tor-browser

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

window_suspended.html (2135B)


      1 <script>
      2 const WORKER_URL = "worker_suspended.js";
      3 var testUrl2 = "window_suspended.html?page2Shown";
      4 
      5 let cacheDataPromise = {};
      6 cacheDataPromise.promise = new Promise(resolve => {
      7  cacheDataPromise.resolve = resolve;
      8 });
      9 var bcName = location.search.split('?')[1];
     10 var bc = new BroadcastChannel(bcName);
     11 if (bcName == "page1Shown") {
     12  bc.onmessage = async (msgEvent) => {
     13    var msg = msgEvent.data;
     14    var command = msg.command;
     15    if (command == "startWorker") {
     16      // Create a worker and subworkers
     17      let { worker, promise } = postMessageWorker(msg.workerMessage);
     18      promise.then(function() {
     19        bc.postMessage({command: "verifyCacheData"});
     20        return cacheDataPromise.promise;
     21      })
     22      .then(function() {
     23        location.href = testUrl2;
     24      });
     25    } else if (command == "changeLocation") {
     26      cacheDataPromise.resolve();
     27    } else if (command == "finish") {
     28      bc.postMessage({command: "finished"});
     29      bc.close();
     30      window.close();
     31    }
     32  }
     33 } else if (bcName == "page2Shown") {
     34  bc.onmessage = (msgEvent) => {
     35    var msg = msgEvent.data;
     36    var command = msg.command;
     37    if (command == "startWorker") {
     38      let { worker, promise } = postMessageWorker(msg.workerMessage);
     39      promise.then(function() {
     40        bc.postMessage({command: "verifyCacheData"});
     41        return cacheDataPromise.promise;
     42      })
     43      .then(function() {
     44        bc.close();
     45        history.back();
     46      });
     47    } else if (command == "goBack") {
     48      cacheDataPromise.resolve();
     49    }
     50  }
     51 }
     52 
     53 function postMessageWorker(message) {
     54  let worker = new window.Worker(WORKER_URL);
     55 
     56  var promise = new Promise((resolve, reject) => {
     57    // Waiting until workers are ready
     58    worker.addEventListener("message", function onmessage(msg) {
     59      bc.postMessage({command: "workerMessage", workerMessage: msg.data});
     60      worker.removeEventListener("message", onmessage);
     61      resolve();
     62    });
     63    worker.postMessage(message);
     64  });
     65  return { worker, promise };
     66 }
     67 
     68 onpageshow = function(e) {
     69  bc.postMessage({command: "onpageshow", persisted: e.persisted, location: location.href});
     70 }
     71 </script>