tor-browser

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

test_bug519928.html (3402B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=519928
      5 -->
      6 <head>
      7  <title>Test for Bug 519928</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     10 </head>
     11 <body>
     12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=519928">Mozilla Bug 519928</a>
     13 <p id="display"></p>
     14 <div id="content">
     15 <iframe id="load-frame"></iframe>
     16 </div>
     17 <pre id="test">
     18 <script class="testbody" type="text/javascript">
     19 
     20 var iframe = document.getElementById("load-frame");
     21 
     22 function enableJS() { allowJS(true, iframe); }
     23 function disableJS() { allowJS(false, iframe); }
     24 function allowJS(allow, frame) {
     25  SpecialPowers.wrap(frame.contentWindow).windowGlobalChild.windowContext.allowJavascript = allow;
     26 }
     27 
     28 async function expectJSAllowed(allowed, testCondition) {
     29  window.ICanRunMyJS = false;
     30  const self_ = window;
     31  testCondition();
     32 
     33  const doc = iframe.contentDocument;
     34  const innerFrame = doc.createElement("iframe");
     35  // eslint-disable-next-line no-useless-concat
     36  innerFrame.srcdoc = "<script>parent.parent.ICanRunMyJS = true;</scr" + "ipt>";
     37  const loaded = new Promise(resolve => innerFrame.onload = resolve);
     38  doc.body.append(innerFrame);
     39 
     40  await loaded;
     41  is(self_.ICanRunMyJS, allowed, "The inner iframe should" + (allowed ? "" : " not") + " be able to run Javascript");
     42 
     43  innerFrame.remove();
     44 }
     45 
     46 async function testDocumentDisabledJS() {
     47  window.ICanRunMyJS = false;
     48  const self_ = window;
     49  // Ensure design modes are disabled
     50  document.designMode = "off";
     51  iframe.contentDocument.designMode = "off";
     52 
     53  // Javascript enabled on the main iframe
     54  enableJS();
     55 
     56  const doc = iframe.contentDocument;
     57  const innerFrame = doc.createElement("iframe");
     58  // eslint-disable-next-line no-useless-concat
     59  innerFrame.srcdoc = "<script>parent.parent.ICanRunMyJS = true;</scr" + "ipt>";
     60  const loaded = new Promise(resolve => innerFrame.onload = resolve);
     61  doc.body.append(innerFrame);
     62 
     63  // Javascript disabled on the innerFrame.
     64  allowJS(false, innerFrame);
     65 
     66  await loaded;
     67  is(self_.ICanRunMyJS, false, "The inner iframe should not be able to run Javascript");
     68 
     69  innerFrame.remove();
     70 }
     71 
     72 SimpleTest.waitForExplicitFinish();
     73 addLoadEvent(async function() {
     74  var enterDesignMode = function() { document.designMode = "on"; };
     75  var leaveDesignMode = function() { document.designMode = "off"; };
     76 
     77  await expectJSAllowed(false, disableJS);
     78  await expectJSAllowed(true, enableJS);
     79  await expectJSAllowed(true, enterDesignMode);
     80  await expectJSAllowed(true, leaveDesignMode);
     81  await expectJSAllowed(false, disableJS);
     82  await expectJSAllowed(false, enterDesignMode);
     83  await expectJSAllowed(false, leaveDesignMode);
     84  await expectJSAllowed(true, enableJS);
     85 
     86  enterDesignMode = function() { iframe.contentDocument.designMode = "on"; };
     87  leaveDesignMode = function() { iframe.contentDocument.designMode = "off"; };
     88 
     89  await expectJSAllowed(false, disableJS);
     90  await expectJSAllowed(true, enableJS);
     91  await expectJSAllowed(true, enterDesignMode);
     92  await expectJSAllowed(true, leaveDesignMode);
     93  await expectJSAllowed(false, disableJS);
     94  await expectJSAllowed(false, enterDesignMode);
     95  await expectJSAllowed(false, leaveDesignMode);
     96  await expectJSAllowed(true, enableJS);
     97 
     98  await testDocumentDisabledJS();
     99 
    100  SimpleTest.finish();
    101 });
    102 </script>
    103 </pre>
    104 </body>
    105 </html>