summaryrefslogtreecommitdiffstats
path: root/dom/serviceworkers/test/serviceworker_wrapper.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/serviceworkers/test/serviceworker_wrapper.js')
-rw-r--r--dom/serviceworkers/test/serviceworker_wrapper.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/dom/serviceworkers/test/serviceworker_wrapper.js b/dom/serviceworkers/test/serviceworker_wrapper.js
new file mode 100644
index 0000000000..a1538f43c4
--- /dev/null
+++ b/dom/serviceworkers/test/serviceworker_wrapper.js
@@ -0,0 +1,92 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/publicdomain/zero/1.0/
+//
+// ServiceWorker equivalent of worker_wrapper.js.
+
+let client;
+
+function ok(a, msg) {
+ dump("OK: " + !!a + " => " + a + ": " + msg + "\n");
+ client.postMessage({ type: "status", status: !!a, msg: a + ": " + msg });
+}
+
+function is(a, b, msg) {
+ dump("IS: " + (a === b) + " => " + a + " | " + b + ": " + msg + "\n");
+ client.postMessage({
+ type: "status",
+ status: a === b,
+ msg: a + " === " + b + ": " + msg,
+ });
+}
+
+function workerTestArrayEquals(a, b) {
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length != b.length) {
+ return false;
+ }
+ for (var i = 0, n = a.length; i < n; ++i) {
+ if (a[i] !== b[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function workerTestDone() {
+ client.postMessage({ type: "finish" });
+}
+
+function workerTestGetHelperData(cb) {
+ addEventListener("message", function workerTestGetHelperDataCB(e) {
+ if (e.data.type !== "returnHelperData") {
+ return;
+ }
+ removeEventListener("message", workerTestGetHelperDataCB);
+ cb(e.data.result);
+ });
+ client.postMessage({
+ type: "getHelperData",
+ });
+}
+
+function workerTestGetStorageManager(cb) {
+ addEventListener("message", function workerTestGetStorageManagerCB(e) {
+ if (e.data.type !== "returnStorageManager") {
+ return;
+ }
+ removeEventListener("message", workerTestGetStorageManagerCB);
+ cb(e.data.result);
+ });
+ client.postMessage({
+ type: "getStorageManager",
+ });
+}
+
+let completeInstall;
+
+addEventListener("message", function workerWrapperOnMessage(e) {
+ removeEventListener("message", workerWrapperOnMessage);
+ var data = e.data;
+ self.clients.matchAll({ includeUncontrolled: true }).then(function (clients) {
+ for (var i = 0; i < clients.length; ++i) {
+ if (clients[i].url.includes("message_receiver.html")) {
+ client = clients[i];
+ break;
+ }
+ }
+ try {
+ importScripts(data.script);
+ } catch (ex) {
+ client.postMessage({
+ type: "status",
+ status: false,
+ msg:
+ "worker failed to import " + data.script + "; error: " + ex.message,
+ });
+ }
+ completeInstall();
+ });
+});
+
+addEventListener("install", e => {
+ e.waitUntil(new Promise(resolve => (completeInstall = resolve)));
+});