importScripts("/resources/testharness.js"); async function cleanup() { for (const n of await registration.getNotifications()) { n.close(); } } async function test_notification(t, title) { t.add_cleanup(cleanup); const notifications = await registration.getNotifications(); assert_equals( notifications.length, 1, "There should be one stored notification" ); const notification = notifications[0]; assert_true(notification instanceof Notification, "Should be a Notification"); assert_equals(notification.title, title, "Title should match"); } async function postAll(data) { const clients = await self.clients.matchAll({ includeUncontrolled: true }); assert_true(clients.length > 0, "clients.length"); for (const client of clients) { client.postMessage(data); } } async function untilActivate() { if (registration.active) { return; } return new Promise(resolve => { addEventListener("activate", resolve, { once: true }); }); } promise_test(async t => { await new Promise((resolve, reject) => { self.addEventListener("message", ev => { if (ev.data === "notification-created") { resolve(); } }); untilActivate().then(() => postAll("notification-create")).catch(reject); }); await test_notification(t, "Created from window"); }, "Get notification created from window"); promise_test(async t => { await registration.showNotification("Created here"); await test_notification(t, "Created here"); }, "Create and get notification within service worker");