/* eslint-env worker */ // Any copyright is dedicated to the Public Domain. // http://creativecommons.org/publicdomain/zero/1.0/ // // ServiceWorker equivalent of worker_wrapper.js. var client; var context; function ok(a, msg) { client.postMessage({ type: "status", status: !!a, msg: a + ": " + msg, context, }); } function is(a, b, msg) { client.postMessage({ type: "status", status: a === b, msg: a + " === " + b + ": " + msg, context, }); } 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 testDone() { client.postMessage({ type: "finish", context }); } function workerTestGetPrefs(prefs, cb) { addEventListener("message", function workerTestGetPrefsCB(e) { if ( e.data.type != "returnPrefs" || !workerTestArrayEquals(prefs, e.data.prefs) ) { return; } removeEventListener("message", workerTestGetPrefsCB); cb(e.data.result); }); client.postMessage({ type: "getPrefs", context, prefs, }); } function workerTestGetPermissions(permissions, cb) { addEventListener("message", function workerTestGetPermissionsCB(e) { if ( e.data.type != "returnPermissions" || !workerTestArrayEquals(permissions, e.data.permissions) ) { return; } removeEventListener("message", workerTestGetPermissionsCB); cb(e.data.result); }); client.postMessage({ type: "getPermissions", context, permissions, }); } function workerTestGetUserAgent(cb) { addEventListener("message", function workerTestGetUserAgentCB(e) { if (e.data.type !== "returnUserAgent") { return; } removeEventListener("message", workerTestGetUserAgentCB); cb(e.data.result); }); client.postMessage({ context, type: "getUserAgent", }); } var completeInstall = null; addEventListener("message", function workerWrapperOnMessage(e) { removeEventListener("message", workerWrapperOnMessage); var data = e.data; function runScript() { try { importScripts(data.script); } catch (err) { client.postMessage({ type: "status", status: false, context, msg: "worker failed to import " + data.script + "; error: " + err.message, }); } } if ("ServiceWorker" in self) { self.clients .matchAll({ includeUncontrolled: true }) .then(function (clients) { for (var i = 0; i < clients.length; ++i) { if (clients[i].url.indexOf("message_receiver.html") > -1) { client = clients[i]; break; } } if (!client) { dump( "We couldn't find the message_receiver window, the test will fail\n" ); } context = "ServiceWorker"; runScript(); completeInstall(); }); } else { client = self; context = "Worker"; runScript(); } }); addEventListener("install", e => { e.waitUntil(new Promise(resolve => (completeInstall = resolve))); });