| // META: script=/resources/testdriver.js |
| // META: script=/resources/testdriver-vendor.js |
| // META: script=/service-workers/service-worker/resources/test-helpers.sub.js |
| // META: script=resources/helpers.js |
| |
| let registration; |
| |
| promise_setup(async () => { |
| await trySettingPermission("granted"); |
| registration = await prepareActiveServiceWorker("icon-fetch-sw.js"); |
| await new Promise(r => navigator.serviceWorker.addEventListener("controllerchange", r, { once: true })); |
| }); |
| |
| promise_test(async t => { |
| const iconUrl = new URL("resources/icon.png", location.href).toString(); |
| |
| const { promise, resolve } = Promise.withResolvers(); |
| navigator.serviceWorker.addEventListener("message", async ev => { |
| if (ev.data.url === iconUrl) { |
| resolve(); |
| } |
| }, { signal: t.signal }); |
| |
| await registration.showNotification("new Notification", { |
| icon: iconUrl |
| }); |
| t.add_cleanup(closeAllNotifications); |
| |
| await promise; |
| }, "Icon fetch should cause a corresponding fetch event in the service worker"); |