blob: 681c0961cabb9395ad4b9efe3dd4c5eb06cfbfe8 [file] [log] [blame]
<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.grantWebNotificationPermission(testURL);
setTimeout("failTheTest('timed out')", 15000);
}
description("This tests that a notificationclick handler can open a window");
shouldBeEqualToString("Notification.permission", "granted");
async function registerServiceWorker() {
var registration = await navigator.serviceWorker.register('resources/shownotification-openwindow-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|title|body|tag|foobar");
}
});
}
var gotClicked = false;
var gotClosed = false;
var gotNewClient = false;
var gotAboutBlankFail = false;
var gotUserGestureFail = false;
var gotSuccessfulNullClient = false;
navigator.serviceWorker.addEventListener('message', event => {
if (event.data == "showFailed") {
failTheTest("Unexpectedly received the failed-to-show message");
} else if (event.data == "shown") {
if (testRunner)
testRunner.simulateWebNotificationClickForServiceWorkerNotifications();
} else if (event.data == "clicked|data:foobar") {
shouldBeFalse("gotClicked");
shouldBeFalse("gotClosed");
gotClicked = true;
} else if (event.data == "closed") {
shouldBeTrue("gotClicked")
shouldBeFalse("gotClosed")
gotClosed = true;
} else if (event.data == "gotNewClient") {
gotNewClient = true;
} else if (event.data == "gotAboutBlankFail") {
gotAboutBlankFail = true;
} else if (event.data == "gotUserGestureFail") {
gotUserGestureFail = true;
} else if (event.data = "gotSuccessfulNullClient") {
gotSuccessfulNullClient = true;
} else {
testFailed("Message received: " + event.data);
}
if (gotNewClient) {
shouldBeTrue("gotAboutBlankFail");
shouldBeTrue("gotUserGestureFail");
shouldBeTrue("gotSuccessfulNullClient");
testPassed("New client has been observed");
if (window.testRunner)
testRunner.notifyDone();
}
});
</script>
</head>
<body onload="registerServiceWorker()">
</body>