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>