tor-browser

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

multi_sharedWorker_manager.js (1544B)


      1 var query = window.location.search;
      2 var bc = new BroadcastChannel("bugSharedWorkerLiftetime" + query);
      3 bc.onmessage = msgEvent => {
      4  var msg = msgEvent.data;
      5  var command = msg.command;
      6  if (command == "postToWorker") {
      7    postToWorker(msg.workerMessage);
      8  } else if (command == "navigate") {
      9    window.location = msg.location;
     10  } else if (command == "finish") {
     11    bc.postMessage({ command: "finished" });
     12    bc.close();
     13    window.close();
     14  }
     15 };
     16 
     17 window.onload = () => {
     18  bc.postMessage({ command: "loaded" });
     19 };
     20 
     21 function debug(message) {
     22  if (typeof message != "string") {
     23    throw new Error("debug() only accepts strings!");
     24  }
     25  bc.postMessage({ command: "debug", message });
     26 }
     27 
     28 let worker;
     29 
     30 function postToWorker(msg) {
     31  if (!worker) {
     32    worker = new SharedWorker(
     33      "multi_sharedWorker_sharedWorker.js",
     34      "FrameWorker"
     35    );
     36    worker.onerror = function (error) {
     37      debug("Worker error: " + error.message);
     38      error.preventDefault();
     39 
     40      let data = {
     41        type: "error",
     42        message: error.message,
     43        filename: error.filename,
     44        lineno: error.lineno,
     45        isErrorEvent: error instanceof ErrorEvent,
     46      };
     47      bc.postMessage({ command: "fromWorker", workerMessage: data });
     48    };
     49 
     50    worker.port.onmessage = function (message) {
     51      debug("Worker message: " + JSON.stringify(message.data));
     52      bc.postMessage({ command: "fromWorker", workerMessage: message.data });
     53    };
     54  }
     55 
     56  debug("Posting message: " + JSON.stringify(msg));
     57  worker.port.postMessage(msg);
     58 }