tor-browser

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

test_worker_reference_gc_timeout.html (2273B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4  -->
      5 <head>
      6  <title>Test for Bug 1317266</title>
      7  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      8  <script src="error_reporting_helpers.js"></script>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     10  <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
     11 </head>
     12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1317266">Mozilla Bug 1317266</a>
     13 <p id="display"></p>
     14 <div id="content" style="display: none">
     15 
     16 </div>
     17 <pre id="test">
     18 </pre>
     19 
     20 <script class="testbody" type="text/javascript">
     21 SimpleTest.requestFlakyTimeout("Forcing a race with the cycle collector.");
     22 
     23 add_task(function setupPrefs() {
     24  return SpecialPowers.pushPrefEnv({"set": [
     25    ["dom.serviceWorkers.enabled", true],
     26    ["dom.serviceWorkers.testing.enabled", true],
     27  ]});
     28 });
     29 
     30 add_task(async function test_worker_ref_gc() {
     31  let registration = await navigator.serviceWorker.register(
     32    "lazy_worker.js", { scope: "./lazy_worker_scope_timeout"} )
     33    .then(function(reg) {
     34      SpecialPowers.exactGC();
     35      var worker = reg.installing;
     36      return new Promise(function(resolve) {
     37        worker.addEventListener('statechange', function() {
     38          info("state is " + worker.state + "\n");
     39          SpecialPowers.exactGC();
     40          if (worker.state === 'activated') {
     41            resolve(reg);
     42          }
     43        });
     44      });
     45    });
     46  ok(true, "Got activated event!");
     47 
     48  await registration.unregister();
     49 });
     50 
     51 add_task(async function test_worker_ref_gc_ready_promise() {
     52  let wait_active = navigator.serviceWorker.ready.then(function(reg) {
     53    SpecialPowers.exactGC();
     54    ok(reg.active, "Got active worker.");
     55    ok(reg.active.state === "activating", "Worker is in activating state");
     56    return new Promise(function(res) {
     57      reg.active.onstatechange = function(e) {
     58        reg.active.onstatechange = null;
     59        ok(reg.active.state === "activated", "Worker was activated");
     60        res();
     61      }
     62    });
     63  });
     64 
     65  let registration = await navigator.serviceWorker.register(
     66    "lazy_worker.js", { scope: "."} );
     67  await wait_active;
     68  await registration.unregister();
     69 });
     70 
     71 add_task(async function cleanup() {
     72  await SpecialPowers.popPrefEnv();
     73 });
     74 </script>
     75 </body>
     76 </html>