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>