diff options
Diffstat (limited to '')
-rw-r--r-- | dom/html/test/test_bug1472426.html | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/dom/html/test/test_bug1472426.html b/dom/html/test/test_bug1472426.html new file mode 100644 index 0000000000..6f891184b8 --- /dev/null +++ b/dom/html/test/test_bug1472426.html @@ -0,0 +1,120 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1472426 +--> +<head> + <meta charset="utf-8"> + <title>Test for Bug 1472426</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + <script type="application/javascript"> + + /** Test for Bug 1472426 **/ + + var shadowIframe; + var targetIframe; + var form; + var sr; + + function checkMPSubmission(sub, expected, test) { + function getPropCount(o) { + var x, l = 0; + for (x in o) ++l; + return l; + } + function mpquote(s) { + return s.replace(/\r\n/g, " ") + .replace(/\r/g, " ") + .replace(/\n/g, " ") + .replace(/\"/g, "\\\""); + } + + is(sub.length, expected.length, + "Correct number of multipart items in " + test); + + if (sub.length != expected.length) { + alert(JSON.stringify(sub)); + } + + var i; + for (i = 0; i < expected.length; ++i) { + if (!("fileName" in expected[i])) { + is(sub[i].headers["Content-Disposition"], + "form-data; name=\"" + mpquote(expected[i].name) + "\"", + "Correct name in " + test); + is (getPropCount(sub[i].headers), 1, + "Wrong number of headers in " + test); + is(sub[i].body, + expected[i].value.replace(/\r\n|\r|\n/, "\r\n"), + "Correct value in " + test); + } + else { + is(sub[i].headers["Content-Disposition"], + "form-data; name=\"" + mpquote(expected[i].name) + "\"; filename=\"" + + mpquote(expected[i].fileName) + "\"", + "Correct name in " + test); + is(sub[i].headers["Content-Type"], + expected[i].contentType, + "Correct content type in " + test); + is (getPropCount(sub[i].headers), 2, + "Wrong number of headers in " + test); + is(sub[i].body, + expected[i].value, + "Correct value in " + test); + } + } + } + + function testFormSubmissionInShadowDOM() { + targetIframe = document.getElementById("target_iframe"); + shadowIframe = document.createElement("iframe"); + shadowIframe.src = "about:blank"; + shadowIframe.onload = shadowFrameCreated; + document.body.appendChild(shadowIframe); + } + + function shadowFrameCreated() { + var doc = shadowIframe.contentDocument; + var body = doc.body; + var host = doc.createElement("div"); + body.appendChild(host); + sr = host.attachShadow({ mode: "open" }); + sr.appendChild(document.getElementById('template').content.cloneNode(true)); + targetIframe.onload = checkSubmitValues; + sr.getElementById("form").submit(); + } + + function checkSubmitValues() { + submission = JSON.parse(targetIframe.contentDocument.documentElement.textContent); + var expected = [ + { name: "text", value: "textvalue" }, + { name: "hidden", value: "hiddenvalue" }, + { name: "select", value: "selectvalue" }, + { name: "textarea", value: "textareavalue" } + ]; + checkMPSubmission(submission, expected, "form submission inside shadow DOM"); + SimpleTest.finish(); + } + + window.onload = function() { + SimpleTest.waitForExplicitFinish(); + testFormSubmissionInShadowDOM(); + } + + </script> + <template id="template"> + <form action="form_submit_server.sjs" target="target_iframe" id="form" + method="POST" enctype="multipart/form-data"> + <input name="text" value="textvalue"> + <input name="hidden" value="hiddenvalue" type="hidden"> + <select name="select"><option selected>selectvalue</option></select> + <textarea name="textarea">textareavalue</textarea> + </form> + </template> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1472426">Mozilla Bug 1472426</a> +<iframe name="target_iframe" id="target_iframe"></iframe> +</body> +</html> |