test_unregister.html (3690B)
1 <!-- 2 Any copyright is dedicated to the Public Domain. 3 http://creativecommons.org/publicdomain/zero/1.0/ 4 --> 5 <!DOCTYPE HTML> 6 <html> 7 <head> 8 <title>Bug 984048 - Test unregister</title> 9 <script src="/tests/SimpleTest/SimpleTest.js"></script> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 11 </head> 12 <body> 13 <p id="display"></p> 14 <div id="content" style="display: none"></div> 15 <pre id="test"></pre> 16 <script class="testbody" type="text/javascript"> 17 18 function simpleRegister() { 19 return navigator.serviceWorker.register("worker.js", { scope: "unregister/" }).then(function(swr) { 20 if (swr.installing) { 21 return new Promise(function(resolve, reject) { 22 swr.installing.onstatechange = function(e) { 23 if (swr.waiting) { 24 swr.waiting.onstatechange = function(event) { 25 if (swr.active) { 26 resolve(); 27 } else if (swr.waiting && swr.waiting.state == "redundant") { 28 reject("Should not go into redundant"); 29 } 30 } 31 } else { 32 if (swr.active) { 33 resolve(); 34 } else { 35 reject("No waiting and no active!"); 36 } 37 } 38 } 39 }); 40 } else { 41 return Promise.reject("Installing should be non-null"); 42 } 43 }); 44 } 45 46 function testControlled() { 47 var testPromise = new Promise(function(res, rej) { 48 window.onmessage = function(e) { 49 if (!("controlled" in e.data)) { 50 ok(false, "Something went wrong."); 51 rej(); 52 return; 53 } 54 55 ok(e.data.controlled, "New window should be controlled."); 56 res(); 57 } 58 }) 59 60 var div = document.getElementById("content"); 61 ok(div, "Parent exists"); 62 63 var ifr = document.createElement("iframe"); 64 ifr.setAttribute('src', "unregister/index.html"); 65 div.appendChild(ifr); 66 67 return testPromise.then(function() { 68 div.removeChild(ifr); 69 }); 70 } 71 72 async function unregister() { 73 let reg = await navigator.serviceWorker.getRegistration("unregister/") 74 if (!reg) { 75 info("Registration already removed"); 76 return; 77 } 78 79 info("getRegistration() succeeded " + reg.scope); 80 try { 81 let v = await reg.unregister(); 82 ok(v, "Unregister should resolve to true"); 83 } catch (e) { 84 ok(false, "Unregister failed with " + e.name); 85 } 86 } 87 88 function testUncontrolled() { 89 var testPromise = new Promise(function(res, rej) { 90 window.onmessage = function(e) { 91 if (!("controlled" in e.data)) { 92 ok(false, "Something went wrong."); 93 rej(); 94 return; 95 } 96 97 ok(!e.data.controlled, "New window should not be controlled."); 98 res(); 99 } 100 }); 101 102 var div = document.getElementById("content"); 103 ok(div, "Parent exists"); 104 105 var ifr = document.createElement("iframe"); 106 ifr.setAttribute('src', "unregister/index.html"); 107 div.appendChild(ifr); 108 109 return testPromise.then(function() { 110 div.removeChild(ifr); 111 }); 112 } 113 114 function runTest() { 115 simpleRegister() 116 .then(testControlled) 117 .then(unregister) 118 .then(testUncontrolled) 119 .then(function() { 120 SimpleTest.finish(); 121 }).catch(function(e) { 122 ok(false, "Some test failed with error " + e); 123 SimpleTest.finish(); 124 }); 125 } 126 127 SimpleTest.waitForExplicitFinish(); 128 SpecialPowers.pushPrefEnv({"set": [ 129 ["dom.serviceWorkers.exemptFromPerDomainMax", true], 130 ["dom.serviceWorkers.enabled", true], 131 ["dom.serviceWorkers.testing.enabled", true] 132 ]}, runTest); 133 </script> 134 </pre> 135 </body> 136 </html>