tor-browser

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

test_bug1151916.html (2641B)


      1 <!--
      2  Any copyright is dedicated to the Public Domain.
      3  http://creativecommons.org/publicdomain/zero/1.0/
      4 -->
      5 <!DOCTYPE HTML>
      6 <html>
      7 <head>
      8  <title>Bug 1151916 - Test principal is set on cached serviceworkers</title>
      9  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     11 <!--
     12  If the principal is not set, accessing self.caches in the worker will crash.
     13 -->
     14 </head>
     15 <body>
     16 <p id="display"></p>
     17 <div id="content"></div>
     18 <pre id="test"></pre>
     19 <script class="testbody" type="text/javascript">
     20 
     21  var frame;
     22 
     23  function listenForMessage() {
     24    var p = new Promise(function(resolve, reject) {
     25      window.onmessage = function(e) {
     26        if (e.data.status == "failed") {
     27          ok(false, "iframe had error " + e.data.message);
     28          reject(e.data.message);
     29        } else if (e.data.status == "success") {
     30          ok(true, "iframe step success " + e.data.message);
     31          resolve(e.data.message);
     32        } else {
     33          ok(false, "Unexpected message " + e.data);
     34          reject();
     35        }
     36      }
     37    });
     38 
     39    return p;
     40  }
     41 
     42  // We have the iframe register for its own scope so that this page is not
     43  // holding any references when we GC.
     44  function register() {
     45    var p = listenForMessage();
     46 
     47    frame = document.createElement("iframe");
     48    document.body.appendChild(frame);
     49    frame.src = "bug1151916_driver.html";
     50 
     51    return p;
     52  }
     53 
     54  function unloadFrame() {
     55    frame.src = "about:blank";
     56    frame.remove();
     57    frame = null;
     58  }
     59 
     60  function gc() {
     61   return new Promise(function(resolve) {
     62     SpecialPowers.exactGC(resolve);
     63   });
     64  }
     65 
     66  function testCaches() {
     67    var p = listenForMessage();
     68 
     69    frame = document.createElement("iframe");
     70    document.body.appendChild(frame);
     71    frame.src = "bug1151916_driver.html";
     72 
     73    return p;
     74  }
     75 
     76  function unregister() {
     77    return navigator.serviceWorker.getRegistration("./bug1151916_driver.html").then(function(reg) {
     78      ok(reg instanceof ServiceWorkerRegistration, "Must have valid registration.");
     79      return reg.unregister();
     80    });
     81  }
     82 
     83  function runTest() {
     84     register()
     85      .then(unloadFrame)
     86      .then(gc)
     87      .then(testCaches)
     88      .then(unregister)
     89      .catch(function(e) {
     90        ok(false, "Some test failed with error " + e);
     91      }).then(SimpleTest.finish);
     92  }
     93 
     94  SimpleTest.waitForExplicitFinish();
     95  SpecialPowers.pushPrefEnv({"set": [
     96    ["dom.serviceWorkers.exemptFromPerDomainMax", true],
     97    ["dom.serviceWorkers.enabled", true],
     98    ["dom.serviceWorkers.testing.enabled", true],
     99  ]}, runTest);
    100 </script>
    101 </pre>
    102 </body>
    103 </html>