test_bug1472426.html (3858B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=1472426 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for Bug 1472426</title> 9 <script src="/tests/SimpleTest/SimpleTest.js"></script> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 11 <script type="application/javascript"> 12 13 /** Test for Bug 1472426 */ 14 15 var shadowIframe; 16 var targetIframe; 17 var form; 18 var sr; 19 20 function checkMPSubmission(sub, expected, test) { 21 function getPropCount(o) { 22 var x, l = 0; 23 for (x in o) ++l; 24 return l; 25 } 26 function mpquote(s) { 27 return s.replace(/\r\n/g, " ") 28 .replace(/\r/g, " ") 29 .replace(/\n/g, " ") 30 .replace(/\"/g, "\\\""); 31 } 32 33 is(sub.length, expected.length, 34 "Correct number of multipart items in " + test); 35 36 if (sub.length != expected.length) { 37 alert(JSON.stringify(sub)); 38 } 39 40 var i; 41 for (i = 0; i < expected.length; ++i) { 42 if (!("fileName" in expected[i])) { 43 is(sub[i].headers["Content-Disposition"], 44 "form-data; name=\"" + mpquote(expected[i].name) + "\"", 45 "Correct name in " + test); 46 is (getPropCount(sub[i].headers), 1, 47 "Wrong number of headers in " + test); 48 is(sub[i].body, 49 expected[i].value.replace(/\r\n|\r|\n/, "\r\n"), 50 "Correct value in " + test); 51 } 52 else { 53 is(sub[i].headers["Content-Disposition"], 54 "form-data; name=\"" + mpquote(expected[i].name) + "\"; filename=\"" + 55 mpquote(expected[i].fileName) + "\"", 56 "Correct name in " + test); 57 is(sub[i].headers["Content-Type"], 58 expected[i].contentType, 59 "Correct content type in " + test); 60 is (getPropCount(sub[i].headers), 2, 61 "Wrong number of headers in " + test); 62 is(sub[i].body, 63 expected[i].value, 64 "Correct value in " + test); 65 } 66 } 67 } 68 69 function testFormSubmissionInShadowDOM() { 70 targetIframe = document.getElementById("target_iframe"); 71 shadowIframe = document.createElement("iframe"); 72 shadowIframe.src = "about:blank"; 73 shadowIframe.onload = shadowFrameCreated; 74 document.body.appendChild(shadowIframe); 75 } 76 77 function shadowFrameCreated() { 78 var doc = shadowIframe.contentDocument; 79 var body = doc.body; 80 var host = doc.createElement("div"); 81 body.appendChild(host); 82 sr = host.attachShadow({ mode: "open" }); 83 sr.appendChild(document.getElementById('template').content.cloneNode(true)); 84 targetIframe.onload = checkSubmitValues; 85 sr.getElementById("form").submit(); 86 } 87 88 function checkSubmitValues() { 89 submission = JSON.parse(targetIframe.contentDocument.documentElement.textContent); 90 var expected = [ 91 { name: "text", value: "textvalue" }, 92 { name: "hidden", value: "hiddenvalue" }, 93 { name: "select", value: "selectvalue" }, 94 { name: "textarea", value: "textareavalue" } 95 ]; 96 checkMPSubmission(submission, expected, "form submission inside shadow DOM"); 97 SimpleTest.finish(); 98 } 99 100 window.onload = function() { 101 SimpleTest.waitForExplicitFinish(); 102 testFormSubmissionInShadowDOM(); 103 } 104 105 </script> 106 <template id="template"> 107 <form action="form_submit_server.sjs" target="target_iframe" id="form" 108 method="POST" enctype="multipart/form-data"> 109 <input name="text" value="textvalue"> 110 <input name="hidden" value="hiddenvalue" type="hidden"> 111 <select name="select"><option selected>selectvalue</option></select> 112 <textarea name="textarea">textareavalue</textarea> 113 </form> 114 </template> 115 </head> 116 <body> 117 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1472426">Mozilla Bug 1472426</a> 118 <iframe name="target_iframe" id="target_iframe"></iframe> 119 </body> 120 </html>