worker-gc.https.window.js (914B)
1 // META: title=An active notification should prevent worker cycle collection 2 // META: script=/resources/testdriver.js 3 // META: script=/resources/testdriver-vendor.js 4 // META: script=/common/gc.js 5 // META: script=resources/helpers.js 6 7 promise_setup(async () => { 8 await trySettingPermission("granted"); 9 }); 10 11 promise_test(async t => { 12 let worker = new Worker(URL.createObjectURL(new Blob([` 13 const n = new Notification("foo"); 14 onmessage = () => n.close(); 15 n.onclose = () => self.postMessage("closed"); 16 postMessage("ready"); 17 `]))); 18 await new Promise(resolve => { 19 worker.addEventListener("message", ev => { 20 if (ev.data === "ready") { 21 resolve(); 22 } 23 }, { once: true }); 24 }); 25 const weakref = new WeakRef(worker); 26 worker = null; 27 28 t.add_cleanup(() => { 29 weakref.deref()?.postMessage("close"); 30 }); 31 32 await garbageCollect(); 33 assert_true(!!weakref.deref()); 34 });