serviceworker_wrapper.js (2339B)
1 // Any copyright is dedicated to the Public Domain. 2 // http://creativecommons.org/publicdomain/zero/1.0/ 3 // 4 // ServiceWorker equivalent of worker_wrapper.js. 5 6 let client; 7 8 function ok(a, msg) { 9 dump("OK: " + !!a + " => " + a + ": " + msg + "\n"); 10 client.postMessage({ type: "status", status: !!a, msg: a + ": " + msg }); 11 } 12 13 function is(a, b, msg) { 14 dump("IS: " + (a === b) + " => " + a + " | " + b + ": " + msg + "\n"); 15 client.postMessage({ 16 type: "status", 17 status: a === b, 18 msg: a + " === " + b + ": " + msg, 19 }); 20 } 21 22 function workerTestArrayEquals(a, b) { 23 if (!Array.isArray(a) || !Array.isArray(b) || a.length != b.length) { 24 return false; 25 } 26 for (var i = 0, n = a.length; i < n; ++i) { 27 if (a[i] !== b[i]) { 28 return false; 29 } 30 } 31 return true; 32 } 33 34 function workerTestDone() { 35 client.postMessage({ type: "finish" }); 36 } 37 38 function workerTestGetHelperData(cb) { 39 addEventListener("message", function workerTestGetHelperDataCB(e) { 40 if (e.data.type !== "returnHelperData") { 41 return; 42 } 43 removeEventListener("message", workerTestGetHelperDataCB); 44 cb(e.data.result); 45 }); 46 client.postMessage({ 47 type: "getHelperData", 48 }); 49 } 50 51 function workerTestGetStorageManager(cb) { 52 addEventListener("message", function workerTestGetStorageManagerCB(e) { 53 if (e.data.type !== "returnStorageManager") { 54 return; 55 } 56 removeEventListener("message", workerTestGetStorageManagerCB); 57 cb(e.data.result); 58 }); 59 client.postMessage({ 60 type: "getStorageManager", 61 }); 62 } 63 64 let completeInstall; 65 66 addEventListener("message", function workerWrapperOnMessage(e) { 67 removeEventListener("message", workerWrapperOnMessage); 68 var data = e.data; 69 self.clients.matchAll({ includeUncontrolled: true }).then(function (clients) { 70 for (var i = 0; i < clients.length; ++i) { 71 if (clients[i].url.includes("message_receiver.html")) { 72 client = clients[i]; 73 break; 74 } 75 } 76 try { 77 importScripts(data.script); 78 } catch (ex) { 79 client.postMessage({ 80 type: "status", 81 status: false, 82 msg: 83 "worker failed to import " + data.script + "; error: " + ex.message, 84 }); 85 } 86 completeInstall(); 87 }); 88 }); 89 90 addEventListener("install", e => { 91 e.waitUntil(new Promise(resolve => (completeInstall = resolve))); 92 });