tor-browser

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

suspend_window.html (1843B)


      1 <!--
      2  Any copyright is dedicated to the Public Domain.
      3  http://creativecommons.org/publicdomain/zero/1.0/
      4 -->
      5 <!DOCTYPE HTML>
      6 <html>
      7 <head>
      8  <meta charset="utf-8">
      9  <title>Test for DOM Worker Threads Suspending</title>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     11 </head>
     12 <body>
     13 <pre id="test">
     14 <div id="output"></div>
     15 <script class="testbody" type="text/javascript">
     16 
     17  var worker;
     18  var finish = false;
     19  var bc = new BroadcastChannel("suspendWindow");
     20  bc.onmessage = (msgEvent) => {
     21    var msg = msgEvent.data;
     22    var command = msg.command;
     23    if (command == "startWorker") {
     24      startWorker();
     25    } else if (command == "navigate") {
     26      window.location = "suspend_blank.html";
     27    } else if (command == "finish") {
     28      finish = true;
     29      terminateWorker();
     30      bc.postMessage({command: "finished"});
     31      bc.close();
     32      window.close();
     33    }
     34  }
     35 
     36  function messageCallback(data) {
     37    if (finish) {
     38      return;
     39    }
     40    bc.postMessage({command: "messageCallback", data});
     41  }
     42 
     43  function errorCallback(msg) {
     44    if (finish) {
     45      return;
     46    }
     47    bc.postMessage({command: "errorCallback", data: msg});
     48  }
     49 
     50  var output = document.getElementById("output");
     51 
     52  function terminateWorker() {
     53    if (worker) {
     54      worker.postMessage("stop");
     55      worker = null;
     56    }
     57  }
     58 
     59  function startWorker() {
     60    var lastData;
     61    worker = new Worker("suspend_worker.js");
     62 
     63    worker.onmessage = function(event) {
     64      output.textContent = (lastData ? lastData + " -> " : "") + event.data;
     65      lastData = event.data;
     66      messageCallback(event.data);
     67    };
     68 
     69    worker.onerror = function(event) {
     70      this.terminate();
     71      errorCallback(event.message);
     72    };
     73  }
     74 
     75  window.onload = () => {
     76    bc.postMessage({command: "loaded"});
     77  }
     78 
     79 </script>
     80 </pre>
     81 </body>
     82 </html>