tor-browser

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

multi_sharedWorker_sharedWorker.js (1447B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 "use strict";
      6 
      7 if (self.name != "FrameWorker") {
      8  throw new Error("Bad worker name: " + self.name);
      9 }
     10 
     11 var registeredPorts = [];
     12 var errorCount = 0;
     13 var storedData;
     14 
     15 self.onconnect = function (event) {
     16  var port = event.ports[0];
     17 
     18  if (registeredPorts.length) {
     19    let data = {
     20      type: "connect",
     21    };
     22 
     23    registeredPorts.forEach(function (registeredPort) {
     24      registeredPort.postMessage(data);
     25    });
     26  }
     27 
     28  port.onmessage = function (msg) {
     29    switch (msg.data.command) {
     30      case "start":
     31        break;
     32 
     33      case "error":
     34        throw new Error("Expected");
     35 
     36      case "store":
     37        storedData = msg.data.data;
     38        break;
     39 
     40      case "retrieve":
     41        var data = {
     42          type: "result",
     43          data: storedData,
     44        };
     45        port.postMessage(data);
     46        break;
     47 
     48      default:
     49        throw new Error("Unknown command '" + error.data.command + "'");
     50    }
     51  };
     52 
     53  registeredPorts.push(port);
     54 };
     55 
     56 self.onerror = function (message, filename, lineno) {
     57  if (!errorCount++) {
     58    var data = {
     59      type: "worker-error",
     60      message,
     61      filename,
     62      lineno,
     63    };
     64 
     65    registeredPorts.forEach(function (registeredPort) {
     66      registeredPort.postMessage(data);
     67    });
     68 
     69    // Prevent the error from propagating the first time only.
     70    return true;
     71  }
     72  return undefined;
     73 };