| <head> |
| <script src="/resources/js-test-pre.js"></script> |
| <script src="/resources/notifications-test-pre.js"></script> |
| <script> |
| |
| function failTheTest(msg) |
| { |
| testFailed(msg); |
| if (testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| if (window.testRunner) { |
| testRunner.waitUntilDone(); |
| testRunner.denyWebNotificationPermission(testURL); |
| setTimeout("failTheTest('timed out')", 15000); |
| } |
| |
| description("This tests that a notification shown by a service worker can be clicked and closed, with those actions being observable by the service worker"); |
| |
| shouldBeEqualToString("Notification.permission", "denied"); |
| |
| async function registerServiceWorker() { |
| var registration = await navigator.serviceWorker.register('resources/shownotification-worker.js'); |
| |
| if (!registration) |
| return testFailed("No registration"); |
| |
| if (registration.active) { |
| registration.active.postMessage("Start"); |
| return; |
| } |
| |
| var installingWorker = registration.installing; |
| if (!installingWorker) |
| failTheTest("No active *or* installing worker"); |
| |
| installingWorker.addEventListener("statechange", () => { |
| if (installingWorker.state === "activated") { |
| installingWorker.postMessage("tryshow"); |
| } |
| }); |
| } |
| |
| navigator.serviceWorker.addEventListener('message', event => { |
| if (event.data == "showFailed") { |
| testPassed("Notification failed to show"); |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } else if (event.data == "shown") { |
| testFailed("Notification shown, but shouldn't have been"); |
| } else { |
| testFailed("Message received: " + event.data); |
| } |
| }); |
| |
| </script> |
| </head> |
| <body onload="registerServiceWorker()"> |
| </body> |