<!DOCTYPE HTML> <html> <!-- Bug 1038811: Push tests. Any copyright is dedicated to the Public Domain. http://creativecommons.org/licenses/publicdomain/ --> <head> <title>Test for Bug 1038811</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=1038811">Mozilla Bug 1038811</a> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> </pre> <script class="testbody" type="text/javascript"> function debug(str) { // console.log(str + "\n"); } var mockSocket = new MockWebSocket(); var channelID = null; mockSocket.onRegister = function(request) { channelID = request.channelID; this.serverSendMsg(JSON.stringify({ messageType: "register", uaid: "c69e2014-9e15-438d-b253-d79cc2df60a8", channelID, status: 200, pushEndpoint: "https://example.com/endpoint/1" })); }; var registration; add_task(function* start() { yield setupPrefsAndMockSocket(mockSocket); 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* checkPermissionState() { var state = yield registration.pushManager.permissionState(); is(state, "granted", "permissionState() should resolve to granted."); }); var pushSubscription; add_task(function* subscribe() { pushSubscription = yield registration.pushManager.subscribe(); is(pushSubscription.options.applicationServerKey, null, "Subscription should not have an app server key"); }); add_task(function* resubscribe() { var data = yield sendRequestToWorker({ type: "resubscribe", endpoint: pushSubscription.endpoint, }); pushSubscription = yield registration.pushManager.getSubscription(); is(data.endpoint, pushSubscription.endpoint, "Subscription endpoints should match after resubscribing in worker"); }); add_task(function* waitForPushNotification() { var finishedPromise = controlledFrame.waitOnWorkerMessage("finished"); // Send a blank message. mockSocket.serverSendMsg(JSON.stringify({ messageType: "notification", version: "vDummy", channelID: channelID })); yield finishedPromise; }); add_task(function* unsubscribe() { controlledFrame.remove(); yield pushSubscription.unsubscribe(); }); add_task(function* unregister() { var result = yield registration.unregister(); ok(result, "Unregister should return true."); }); </script> </body> </html>