tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>