controlled-install-sw.js (772B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // Copied from shared-head.js 7 function waitUntil(predicate, interval = 10) { 8 if (predicate()) { 9 return Promise.resolve(true); 10 } 11 return new Promise(resolve => { 12 setTimeout(function () { 13 waitUntil(predicate, interval).then(() => resolve(true)); 14 }, interval); 15 }); 16 } 17 18 // this flag will be flipped externally from controlled-install.html 19 // by sending a message event to the worker 20 let canInstall = false; 21 self.addEventListener("message", event => { 22 if (event.data === "install-service-worker") { 23 canInstall = true; 24 } 25 }); 26 27 self.addEventListener("install", event => { 28 event.waitUntil(waitUntil(() => canInstall)); 29 });