tor-browser

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

test_postMessages_workers.html (2459B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test for postMessages cloning/transferring objects</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      7  <script src="common_postMessages.js"></script>
      8 </head>
      9 
     10 <body>
     11 <input id="fileList" type="file"></input>
     12 <script type="application/javascript">
     13 
     14 // PostMessage for Workers
     15 tests.push(function test_workers() {
     16  info("Testing Workers");
     17 
     18  var resolve;
     19 
     20  var w = new Worker('worker_postMessages.js');
     21  w.postMessage('workers');
     22  w.onmessage = function(e) {
     23    is(e.data, 'ok', "Worker ready!");
     24 
     25    w.onmessage = function(e1) {
     26      if (!resolve) {
     27        ok(false, "Unexpected message!");
     28        return;
     29      }
     30 
     31      let tmp = resolve;
     32      resolve = null;
     33      tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" });
     34    }
     35 
     36    runTests({
     37      clonableObjectsEveryWhere: true,
     38      clonableObjectsSameProcess: true,
     39      transferableObjects: true,
     40      send(what, ports) {
     41        return new Promise(function(r, rr) {
     42          resolve = r;
     43          try {
     44            w.postMessage(what, ports);
     45          } catch(ex) {
     46            resolve = null;
     47            rr();
     48          }
     49        });
     50      },
     51 
     52      finished() {
     53        w.terminate();
     54        next();
     55      }
     56    });
     57  }
     58 });
     59 
     60 // PostMessage for SharedWorkers
     61 tests.push(function test_sharedWorkers() {
     62  info("Testing SharedWorkers");
     63 
     64  var resolve;
     65 
     66  var w = new SharedWorker('worker_postMessages.js');
     67  w.port.postMessage('sharedworkers');
     68  w.port.onmessage = function(e) {
     69    is(e.data, 'ok', "Worker ready!");
     70 
     71    w.port.onmessage = function(e1) {
     72      if (!resolve) {
     73        ok(false, "Unexpected message!");
     74        return;
     75      }
     76 
     77      let tmp = resolve;
     78      resolve = null;
     79      tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" });
     80    }
     81 
     82    runTests({
     83      clonableObjectsEveryWhere: true,
     84      clonableObjectsSameProcess: false,
     85      transferableObjects: true,
     86      send(what, ports) {
     87        return new Promise(function(r, rr) {
     88          resolve = r;
     89          try {
     90            w.port.postMessage(what, ports);
     91          } catch(ex) {
     92            resolve = null;
     93            rr();
     94          }
     95        });
     96      },
     97 
     98      finished() {
     99        w.port.postMessage("terminate");
    100        next();
    101      }
    102    });
    103  }
    104 });
    105 
    106 SimpleTest.waitForExplicitFinish();
    107 next();
    108 
    109 </script>
    110 </body>
    111 </html>