summaryrefslogtreecommitdiffstats
path: root/dom/serviceworkers/test/async_waituntil_worker.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /dom/serviceworkers/test/async_waituntil_worker.js
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/serviceworkers/test/async_waituntil_worker.js')
-rw-r--r--dom/serviceworkers/test/async_waituntil_worker.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/dom/serviceworkers/test/async_waituntil_worker.js b/dom/serviceworkers/test/async_waituntil_worker.js
new file mode 100644
index 0000000000..94219e4879
--- /dev/null
+++ b/dom/serviceworkers/test/async_waituntil_worker.js
@@ -0,0 +1,53 @@
+var keepAlivePromise;
+var resolvePromise;
+var result = "Failed";
+
+onactivate = function(event) {
+ event.waitUntil(clients.claim());
+};
+
+onmessage = function(event) {
+ if (event.data === "Start") {
+ event.waitUntil(Promise.reject());
+
+ keepAlivePromise = new Promise(function(resolve, reject) {
+ resolvePromise = resolve;
+ });
+
+ result = "Success";
+ event.waitUntil(keepAlivePromise);
+ event.source.postMessage("Started");
+ } else if (event.data === "Result") {
+ event.source.postMessage(result);
+ if (resolvePromise !== undefined) {
+ resolvePromise();
+ }
+ }
+};
+
+addEventListener("fetch", e => {
+ let respondWithPromise = new Promise(function(res, rej) {
+ setTimeout(() => {
+ res(new Response("ok"));
+ }, 0);
+ });
+ e.respondWith(respondWithPromise);
+ // Test that waitUntil can be called in the promise handler of the existing
+ // lifetime extension promise.
+ respondWithPromise.then(() => {
+ e.waitUntil(
+ clients.matchAll().then(cls => {
+ dump(`matchAll returned ${cls.length} client(s) with URLs:\n`);
+ cls.forEach(cl => {
+ dump(`${cl.url}\n`);
+ });
+
+ if (cls.length != 1) {
+ dump("ERROR: no controlled clients.\n");
+ }
+ client = cls[0];
+ client.postMessage("Done");
+ })
+ );
+ });
+});