test_register.html (3074B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 Bug 1038811: Push tests. 5 6 Any copyright is dedicated to the Public Domain. 7 http://creativecommons.org/licenses/publicdomain/ 8 9 --> 10 <head> 11 <title>Test for Bug 1038811</title> 12 <script src="/tests/SimpleTest/SimpleTest.js"></script> 13 <script type="text/javascript" src="/tests/dom/push/test/test_utils.js"></script> 14 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 15 <meta http-equiv="Content-type" content="text/html;charset=UTF-8"> 16 </head> 17 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1038811">Mozilla Bug 1038811</a> 18 <p id="display"></p> 19 <div id="content" style="display: none"> 20 21 </div> 22 <pre id="test"> 23 </pre> 24 25 <script class="testbody" type="text/javascript"> 26 function debug() { 27 // console.log(str + "\n"); 28 } 29 30 var mockSocket = new MockWebSocket(); 31 32 var channelID = null; 33 34 mockSocket.onRegister = function(request) { 35 channelID = request.channelID; 36 this.serverSendMsg(JSON.stringify({ 37 messageType: "register", 38 uaid: "c69e2014-9e15-438d-b253-d79cc2df60a8", 39 channelID, 40 status: 200, 41 pushEndpoint: "https://example.com/endpoint/1", 42 })); 43 }; 44 45 var registration; 46 add_task(async function start() { 47 await setupPrefsAndMockSocket(mockSocket); 48 await setPushPermission(true); 49 50 var url = "worker.js?caller=test_register.html"; 51 registration = await navigator.serviceWorker.register(url, {scope: "."}); 52 await waitForActive(registration); 53 }); 54 55 var controlledFrame; 56 add_task(async function createControlledIFrame() { 57 controlledFrame = await injectControlledFrame(); 58 }); 59 60 add_task(async function checkPermissionState() { 61 var state = await registration.pushManager.permissionState(); 62 is(state, "granted", "permissionState() should resolve to granted."); 63 }); 64 65 var pushSubscription; 66 add_task(async function subscribe() { 67 pushSubscription = await registration.pushManager.subscribe(); 68 is(pushSubscription.options.applicationServerKey, null, 69 "Subscription should not have an app server key"); 70 }); 71 72 add_task(async function resubscribe() { 73 var data = await sendRequestToWorker({ 74 type: "resubscribe", 75 endpoint: pushSubscription.endpoint, 76 }); 77 pushSubscription = await registration.pushManager.getSubscription(); 78 is(data.endpoint, pushSubscription.endpoint, 79 "Subscription endpoints should match after resubscribing in worker"); 80 }); 81 82 add_task(async function waitForPushNotification() { 83 var finishedPromise = controlledFrame.waitOnWorkerMessage("finished"); 84 85 // Send a blank message. 86 mockSocket.serverSendMsg(JSON.stringify({ 87 messageType: "notification", 88 version: "vDummy", 89 channelID, 90 })); 91 92 await finishedPromise; 93 }); 94 95 add_task(async function unsubscribe() { 96 controlledFrame.remove(); 97 await pushSubscription.unsubscribe(); 98 }); 99 100 add_task(async function unregister() { 101 var result = await registration.unregister(); 102 ok(result, "Unregister should return true."); 103 }); 104 105 </script> 106 </body> 107 </html>