test_permissions.html (3381B)
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 registration; 31 add_task(async function start() { 32 await setupPrefsAndMockSocket(new MockWebSocket()); 33 await setPushPermission(false); 34 35 var url = "worker.js?caller=test_permissions.html"; 36 registration = await navigator.serviceWorker.register(url, {scope: "."}); 37 await waitForActive(registration); 38 }); 39 40 add_task(async function denySubscribe() { 41 try { 42 await registration.pushManager.subscribe(); 43 ok(false, "subscribe() should fail because no permission for push"); 44 } catch (error) { 45 ok(error instanceof DOMException, "Wrong exception type"); 46 is(error.name, "NotAllowedError", "Wrong exception name"); 47 } 48 }); 49 50 add_task(async function denySubscribeInWorker() { 51 // If permission is revoked, `getSubscription()` should return `null`, and 52 // `subscribe()` should reject immediately. Calling these from the worker 53 // should not deadlock the main thread (see bug 1228723). 54 var errorInfo = await sendRequestToWorker({ 55 type: "denySubscribe", 56 }); 57 ok(errorInfo.isDOMException, "Wrong exception type"); 58 is(errorInfo.name, "NotAllowedError", "Wrong exception name"); 59 }); 60 61 add_task(async function getEndpoint() { 62 var pushSubscription = await registration.pushManager.getSubscription(); 63 is(pushSubscription, null, "getSubscription() should return null because no permission for push"); 64 }); 65 66 add_task(async function checkPermissionState() { 67 var permissionManager = SpecialPowers.Ci.nsIPermissionManager; 68 var tests = [{ 69 action: permissionManager.ALLOW_ACTION, 70 state: "granted", 71 }, { 72 action: permissionManager.DENY_ACTION, 73 state: "denied", 74 }, { 75 action: permissionManager.PROMPT_ACTION, 76 state: "prompt", 77 }, { 78 action: permissionManager.UNKNOWN_ACTION, 79 state: "prompt", 80 }]; 81 for (var test of tests) { 82 await setPushPermission(test.action); 83 var state = await registration.pushManager.permissionState(); 84 is(state, test.state, JSON.stringify(test)); 85 try { 86 await SpecialPowers.pushPrefEnv({ set: [ 87 ["dom.push.testing.ignorePermission", true]] }); 88 state = await registration.pushManager.permissionState(); 89 is(state, "granted", `Should ignore ${ 90 test.action} if the override pref is set`); 91 } finally { 92 await SpecialPowers.flushPrefEnv(); 93 } 94 } 95 }); 96 97 add_task(async function unregister() { 98 var result = await registration.unregister(); 99 ok(result, "Unregister should return true."); 100 }); 101 102 </script> 103 </body> 104 </html>