blob: 34cd6bf1cba1994c68fad9f4b7667a97c583d566 [file] [log] [blame]
<head>
<script src="/resources/js-test-pre.js"></script>
<script src="/resources/gc.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);
}
description("This tests that persistent notifications created by a service worker are visible to getNotifications() even after Notification objects are stopped");
shouldBeEqualToString("Notification.permission", "granted");
var registration;
async function registerServiceWorker() {
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("getnotes");
}
});
}
var numberShown = 0;
var numberGot = 0;
function with_iframe(url) {
return new Promise(function(resolve) {
var frame = document.createElement('iframe');
frame.src = url;
frame.onload = function() { resolve(frame); };
document.body.appendChild(frame);
});
}
async function gotNotes(event)
{
++numberGot;
debug("Got notifications");
message = event.data.split('|')
for (var i = 1; i < message.length; ++i)
debug(message[i]);
if (numberGot == 1) {
event.source.postMessage("tryshow|Hello|Body1|tag-a");
event.source.postMessage("tryshow|There|Body2|tag-b");
event.source.postMessage("tryshow|Buddy|Body3|tag-b|Data3");
} else if (numberGot == 4) {
debug("Loading iframe");
const frame = await with_iframe("resources/getNotifications-iframe.html");
debug("Get notifications from iframe");
await frame.contentWindow.getNotifications();
debug("Remove iframes to stop notifications");
frame.remove();
const notifications = await registration.getNotifications({ tag: "" });
debug("Retrieving notifications from page registration object - " + notifications.length);
notifications.forEach(notification => {
debug("Notification: " + notification.title + " / " + notification.body + " / " + notification.tag + " / " + notification.data);
});
debug("Retrieving notifications from page registration object - end");
testCompleted();
}
}
function shown(event)
{
debug("Notification was shown");
++numberShown;
if (numberShown == 2) {
event.source.postMessage("getnotes");
event.source.postMessage("getnotes|tag-a");
event.source.postMessage("getnotes|tag-b");
}
}
navigator.serviceWorker.addEventListener('message', event => {
var messageName = event.data.split('|')[0];
if (messageName == "gotnotes") {
gotNotes(event);
} else if (messageName == "shown") {
shown(event);
} else {
debug("Unexpected message: " + event.data);
}
});
</script>
</head>
<body onload="registerServiceWorker()">
</body>