tor-browser

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

test_cache_worker_gc.html (1796B)


      1 <!-- Any copyright is dedicated to the Public Domain.
      2   - http://creativecommons.org/publicdomain/zero/1.0/ -->
      3 <!DOCTYPE HTML>
      4 <html>
      5 <head>
      6  <title>Test CacheStorage does not prevent worker GC</title>
      7  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      8  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      9  <script type="text/javascript" src="driver.js"></script>
     10 </head>
     11 <body>
     12 <iframe id="frame"></iframe>
     13 <script class="testbody" type="text/javascript">
     14 function startWorker() {
     15  return new Promise(resolve => {
     16    var w = new Worker("idle_worker.js");
     17    w.addEventListener("message", function onMessage(evt) {
     18      if (evt.data === "LOADED") {
     19        w.removeEventListener("message", onMessage);
     20        resolve(w);
     21      }
     22    });
     23  });
     24 }
     25 
     26 function gc() {
     27  return new Promise(resolve => {
     28    SpecialPowers.exactGC(resolve);
     29  });
     30 }
     31 
     32 SimpleTest.waitForExplicitFinish();
     33 
     34 async function test() {
     35  let w = await startWorker();
     36  let weakWorker = SpecialPowers.Cu.getWeakReference(w);
     37  ok(weakWorker, "worker supports weak reference");
     38  w = null;
     39  await gc();
     40  await gc();
     41  ok(!weakWorker.get(), "worker weak reference should be garbage collected");
     42  SimpleTest.finish();
     43 }
     44 // Bug 1746646: Make mochitests work with TCP enabled (cookieBehavior = 5)
     45 // Acquire storage access permission here so that the Cache API is avaialable
     46 SpecialPowers.wrap(document).notifyUserGestureActivation();
     47 SpecialPowers.addPermission("storageAccessAPI", true, window.location.href).then(() => {
     48  SpecialPowers.wrap(document).requestStorageAccess().then(() => {
     49    SpecialPowers.pushPrefEnv({
     50      set: [["privacy.partition.always_partition_third_party_non_cookie_storage", false]],
     51    }).then(() => {
     52      test();
     53    });
     54  });
     55 });
     56 </script>
     57 </body>
     58 </html>