chrome_helpers.js (1778B)
1 let swm = Cc["@mozilla.org/serviceworkers/manager;1"].getService( 2 Ci.nsIServiceWorkerManager 3 ); 4 5 let EXAMPLE_URL = "https://example.com/chrome/dom/serviceworkers/test/"; 6 7 function waitForIframeLoad(iframe) { 8 return new Promise(function (resolve) { 9 iframe.onload = resolve; 10 }); 11 } 12 13 function waitForRegister(scope, callback) { 14 return new Promise(function (resolve) { 15 let listener = { 16 onRegister(registration) { 17 if (registration.scope !== scope) { 18 return; 19 } 20 swm.removeListener(listener); 21 resolve(callback ? callback(registration) : registration); 22 }, 23 }; 24 swm.addListener(listener); 25 }); 26 } 27 28 function waitForUnregister(scope) { 29 return new Promise(function (resolve) { 30 let listener = { 31 onUnregister(registration) { 32 if (registration.scope !== scope) { 33 return; 34 } 35 swm.removeListener(listener); 36 resolve(registration); 37 }, 38 }; 39 swm.addListener(listener); 40 }); 41 } 42 43 function waitForServiceWorkerRegistrationChange(registration, callback) { 44 return new Promise(function (resolve) { 45 let listener = { 46 onChange() { 47 registration.removeListener(listener); 48 if (callback) { 49 callback(); 50 } 51 resolve(callback ? callback() : undefined); 52 }, 53 }; 54 registration.addListener(listener); 55 }); 56 } 57 58 function waitForServiceWorkerShutdown() { 59 return new Promise(function (resolve) { 60 let observer = { 61 observe(subject, topic, data) { 62 if (topic !== "service-worker-shutdown") { 63 return; 64 } 65 SpecialPowers.removeObserver(observer, "service-worker-shutdown"); 66 resolve(); 67 }, 68 }; 69 SpecialPowers.addObserver(observer, "service-worker-shutdown"); 70 }); 71 }