// META: title=An active notification should prevent worker cycle collection // META: script=/resources/testdriver.js // META: script=/resources/testdriver-vendor.js // META: script=/common/gc.js // META: script=resources/helpers.js promise_setup(async () => { await trySettingPermission("granted"); }); promise_test(async t => { let worker = new Worker(URL.createObjectURL(new Blob([` const n = new Notification("foo"); onmessage = () => n.close(); n.onclose = () => self.postMessage("closed"); postMessage("ready"); `]))); await new Promise(resolve => { worker.addEventListener("message", ev => { if (ev.data === "ready") { resolve(); } }, { once: true }); }); const weakref = new WeakRef(worker); worker = null; t.add_cleanup(() => { weakref.deref()?.postMessage("close"); }); await garbageCollect(); assert_true(!!weakref.deref()); });