summaryrefslogtreecommitdiffstats
path: root/devtools/client/aboutdebugging/test/browser/resources/service-workers/controlled-sw.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/aboutdebugging/test/browser/resources/service-workers/controlled-sw.js')
-rw-r--r--devtools/client/aboutdebugging/test/browser/resources/service-workers/controlled-sw.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/test/browser/resources/service-workers/controlled-sw.js b/devtools/client/aboutdebugging/test/browser/resources/service-workers/controlled-sw.js
new file mode 100644
index 0000000000..0a6d9cfdc6
--- /dev/null
+++ b/devtools/client/aboutdebugging/test/browser/resources/service-workers/controlled-sw.js
@@ -0,0 +1,31 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/* eslint-env worker */
+
+"use strict";
+
+// Copied from shared-head.js
+function waitUntil(predicate, interval = 10) {
+ if (predicate()) {
+ return Promise.resolve(true);
+ }
+ return new Promise(resolve => {
+ setTimeout(function () {
+ waitUntil(predicate, interval).then(() => resolve(true));
+ }, interval);
+ });
+}
+
+// This flag will be flipped from controlled-sw.html::installServiceWorker()
+let canInstall = false;
+self.addEventListener("message", function (event) {
+ if (event.data === "install-service-worker") {
+ canInstall = true;
+ }
+});
+
+// Wait for the canInstall flag to be flipped before completing the install.
+self.addEventListener("install", function (event) {
+ event.waitUntil(waitUntil(() => canInstall));
+});