tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });