<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=1172870 --> <head> <title>Bug 1172870 - Test clients.openWindow</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="/tests/dom/tests/mochitest/notification/MockServices.js"></script> <script type="text/javascript" src="/tests/dom/tests/mochitest/notification/NotificationTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1172870">Bug 1172870</a> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> </pre> <script type="text/javascript"> SimpleTest.requestFlakyTimeout("Mock alert service dispatches show and click events."); function setup(ctx) { MockServices.register(); return navigator.serviceWorker.register("openWindow_worker.js", {scope: "./"}) .then(function(swr) { ok(swr, "Registration successful"); ctx.registration = swr; return ctx; }); } function waitForActiveServiceWorker(ctx) { return navigator.serviceWorker.ready.then(function(result) { ok(ctx.registration.active, "Service Worker is active"); return ctx; }); } function setupMessageHandler(ctx) { return new Promise(function(res, rej) { navigator.serviceWorker.onmessage = function(event) { navigator.serviceWorker.onmessage = null; for (i = 0; i < event.data.length; i++) { ok(event.data[i].result, event.data[i].message); } res(ctx); } }); } function testPopupNotAllowed(ctx) { var p = setupMessageHandler(ctx); ok(ctx.registration.active, "Worker is active."); ctx.registration.active.postMessage("testNoPopup"); return p; } function testPopupAllowed(ctx) { var p = setupMessageHandler(ctx); ctx.registration.showNotification("testPopup"); return p; } function checkNumberOfWindows(ctx) { return new Promise(function(res, rej) { navigator.serviceWorker.onmessage = function(event) { navigator.serviceWorker.onmessage = null; ok(event.data.result, event.data.message); res(ctx); } ctx.registration.active.postMessage("CHECK_NUMBER_OF_WINDOWS"); }); } function clear(ctx) { MockServices.unregister(); return ctx.registration.unregister().then(function(result) { ctx.registration = null; ok(result, "Unregister was successful."); }); } function runTest() { setup({}) .then(waitForActiveServiceWorker) // Permission to allow popups persists for some time after a notification // click event, so the order here is important. .then(testPopupNotAllowed) .then(testPopupAllowed) .then(checkNumberOfWindows) .then(clear) .catch(function(e) { ok(false, "Some test failed with error " + e); }).then(SimpleTest.finish); } SimpleTest.waitForExplicitFinish(); SpecialPowers.pushPrefEnv({"set": [ ["dom.serviceWorkers.exemptFromPerDomainMax", true], ["dom.serviceWorkers.enabled", true], ["dom.serviceWorkers.openWindow.enabled", true], ["dom.serviceWorkers.testing.enabled", true], ["dom.webnotifications.workers.enabled", true], ["dom.webnotifications.serviceworker.enabled", true], ["notification.prompt.testing", true], ["dom.disable_open_click_delay", 1000], ["dom.serviceWorkers.idle_timeout", 299999], ["dom.serviceWorkers.idle_extended_timeout", 299999] ]}, runTest); </script> </body> </html>