test_bug1151916.html (2641B)
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 1151916 - Test principal is set on cached serviceworkers</title> 9 <script src="/tests/SimpleTest/SimpleTest.js"></script> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 11 <!-- 12 If the principal is not set, accessing self.caches in the worker will crash. 13 --> 14 </head> 15 <body> 16 <p id="display"></p> 17 <div id="content"></div> 18 <pre id="test"></pre> 19 <script class="testbody" type="text/javascript"> 20 21 var frame; 22 23 function listenForMessage() { 24 var p = new Promise(function(resolve, reject) { 25 window.onmessage = function(e) { 26 if (e.data.status == "failed") { 27 ok(false, "iframe had error " + e.data.message); 28 reject(e.data.message); 29 } else if (e.data.status == "success") { 30 ok(true, "iframe step success " + e.data.message); 31 resolve(e.data.message); 32 } else { 33 ok(false, "Unexpected message " + e.data); 34 reject(); 35 } 36 } 37 }); 38 39 return p; 40 } 41 42 // We have the iframe register for its own scope so that this page is not 43 // holding any references when we GC. 44 function register() { 45 var p = listenForMessage(); 46 47 frame = document.createElement("iframe"); 48 document.body.appendChild(frame); 49 frame.src = "bug1151916_driver.html"; 50 51 return p; 52 } 53 54 function unloadFrame() { 55 frame.src = "about:blank"; 56 frame.remove(); 57 frame = null; 58 } 59 60 function gc() { 61 return new Promise(function(resolve) { 62 SpecialPowers.exactGC(resolve); 63 }); 64 } 65 66 function testCaches() { 67 var p = listenForMessage(); 68 69 frame = document.createElement("iframe"); 70 document.body.appendChild(frame); 71 frame.src = "bug1151916_driver.html"; 72 73 return p; 74 } 75 76 function unregister() { 77 return navigator.serviceWorker.getRegistration("./bug1151916_driver.html").then(function(reg) { 78 ok(reg instanceof ServiceWorkerRegistration, "Must have valid registration."); 79 return reg.unregister(); 80 }); 81 } 82 83 function runTest() { 84 register() 85 .then(unloadFrame) 86 .then(gc) 87 .then(testCaches) 88 .then(unregister) 89 .catch(function(e) { 90 ok(false, "Some test failed with error " + e); 91 }).then(SimpleTest.finish); 92 } 93 94 SimpleTest.waitForExplicitFinish(); 95 SpecialPowers.pushPrefEnv({"set": [ 96 ["dom.serviceWorkers.exemptFromPerDomainMax", true], 97 ["dom.serviceWorkers.enabled", true], 98 ["dom.serviceWorkers.testing.enabled", true], 99 ]}, runTest); 100 </script> 101 </pre> 102 </body> 103 </html>