<!DOCTYPE HTML> <html> <!-- Bug 1205109: Make `pushsubscriptionchange` extendable. Any copyright is dedicated to the Public Domain. http://creativecommons.org/licenses/publicdomain/ --> <head> <title>Test for Bug 1205109</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script> <script type="text/javascript" src="/tests/dom/push/test/test_utils.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> <meta http-equiv="Content-type" content="text/html;charset=UTF-8"> </head> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1205109">Mozilla Bug 1205109</a> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> </pre> <script class="testbody" type="text/javascript"> var registration; add_task(function* start() { yield setupPrefsAndMockSocket(new MockWebSocket()); yield setPushPermission(true); var url = "worker.js" + "?" + (Math.random()); registration = yield navigator.serviceWorker.register(url, {scope: "."}); yield waitForActive(registration); }); var controlledFrame; add_task(function* createControlledIFrame() { controlledFrame = yield injectControlledFrame(); }); add_task(function* togglePermission() { var subscription = yield registration.pushManager.subscribe(); ok(subscription, "Should create a push subscription"); yield setPushPermission(false); var permissionState = yield registration.pushManager.permissionState(); is(permissionState, "denied", "Should deny push permission"); var subscription = yield registration.pushManager.getSubscription(); is(subscription, null, "Should not return subscription when permission is revoked"); var changePromise = controlledFrame.waitOnWorkerMessage("changed"); yield setPushPermission(true); yield changePromise; subscription = yield registration.pushManager.getSubscription(); is(subscription, null, "Should drop subscription after reinstating permission"); }); add_task(function* unsubscribe() { controlledFrame.remove(); yield registration.unregister(); }); </script> </body> </html>