tor-browser

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

test_postMessages_messagePort.html (2453B)


      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 MessagePort
     15 tests.push(function test_messagePort() {
     16  info("Testing messagePort");
     17 
     18  var mc = new MessageChannel();
     19  var resolve;
     20 
     21  function resolvePromise(data) {
     22    if (!resolve) {
     23      ok(false, "Unexpected message!");
     24      return;
     25    }
     26 
     27    let tmp = resolve;
     28    resolve = null;
     29    tmp(data);
     30  }
     31 
     32  mc.port2.onmessage = function(e) {
     33    resolvePromise({ data: e.data, ports: e.ports, error: false });
     34  }
     35 
     36  mc.port2.onmessageerror = function(e) {
     37    resolvePromise({ error: true });
     38  }
     39 
     40  runTests({
     41    clonableObjectsEveryWhere: true,
     42    clonableObjectsSameProcess: true,
     43    transferableObjects: true,
     44    send(what, ports) {
     45      return new Promise(function(r, rr) {
     46        resolve = r;
     47        try {
     48          mc.port1.postMessage(what, ports);
     49        } catch(e) {
     50          resolve = null;
     51          rr();
     52        }
     53      });
     54    },
     55 
     56    finished() {
     57      next();
     58    }
     59  });
     60 });
     61 
     62 // PostMessage for MessagePort in Workers
     63 tests.push(function test_messagePort_inWorkers() {
     64  info("Testing messagePort in workers");
     65 
     66  var mc = new MessageChannel();
     67  var resolve;
     68 
     69  var w = new Worker('worker_postMessages.js');
     70  w.postMessage('messagePort', [ mc.port2 ]);
     71  w.onmessage = function(e) {
     72    is(e.data, 'ok', "Worker ready!");
     73 
     74    w.onmessage = function(e1) {
     75      if (!resolve) {
     76        ok(false, "Unexpected message!");
     77        return;
     78      }
     79 
     80      let tmp = resolve;
     81      resolve = null;
     82      tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" });
     83    }
     84 
     85    runTests({
     86      clonableObjectsEveryWhere: true,
     87      clonableObjectsSameProcess: true,
     88      transferableObjects: true,
     89      send(what, ports) {
     90        return new Promise(function(r, rr) {
     91          resolve = r;
     92          try {
     93            mc.port1.postMessage(what, ports);
     94          } catch(ex) {
     95            resolve = null;
     96            rr();
     97          }
     98        });
     99      },
    100 
    101      finished() {
    102        w.terminate();
    103        next();
    104      }
    105    });
    106  }
    107 });
    108 
    109 SimpleTest.waitForExplicitFinish();
    110 next();
    111 
    112 </script>
    113 </body>
    114 </html>