tor-browser

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

test_messagePort.html (3005B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=912456
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8  <title>Test for Bug 912456 - port cloning</title>
      9  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     11 </head>
     12 <body>
     13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=912456">Mozilla Bug 912456</a>
     14 <script type="application/javascript">
     15 
     16  function testTransfer() {
     17    var a = new MessageChannel();
     18    ok(a, "MessageChannel created");
     19 
     20    window.addEventListener('message', receiveMessage);
     21    function receiveMessage(evt) {
     22      ok(evt.data.port, "Port has been received!");
     23 
     24      var a1 = new MessageChannel();
     25      ok(a1, "MessageChannel created");
     26 
     27      try {
     28        evt.data.port.postMessage({port: a1.port2});
     29        ok(false, "PostMessage should throw! - no transfered port");
     30      } catch(e) {
     31        ok(true, "PostMessage should throw! - no transfered port");
     32      }
     33 
     34      try {
     35        evt.data.port.postMessage({port: a1.port2}, [a1.port2, a1.port2]);
     36        ok(false, "PostMessage should throw - no duplicate!");
     37      } catch(e) {
     38        ok(true, "PostMessage should throw - no duplicate!");
     39      }
     40 
     41      evt.data.port.postMessage({port: a1.port2}, [a1.port2]);
     42    }
     43 
     44    a.port1.onmessage = function(evt) {
     45      ok(evt.data.port, "Port has been received!");
     46      window.removeEventListener('message', receiveMessage);
     47      runTest();
     48    }
     49 
     50    try {
     51      postMessage({ port: a.port2}, 42, '*');
     52      ok(false, "PostMessage should throw! - no transfered port");
     53    } catch(e) {
     54      ok(true, "PostMessage should throw! - no transfered port");
     55    }
     56 
     57    try {
     58      postMessage({ port: a.port2}, 42, '*', [a.port2, a.port2]);
     59      ok(false, "PostMessage should throw - no duplicate!");
     60    } catch(e) {
     61      ok(true, "PostMessage should throw - no duplicate!");
     62    }
     63 
     64    postMessage({port: a.port2}, '*', [a.port2]);
     65  }
     66 
     67  function testPorts() {
     68    var a = new MessageChannel();
     69    ok(a, "MessageChannel created");
     70 
     71    window.addEventListener('message', receiveMessage);
     72    function receiveMessage(evt) {
     73      ok(evt.data, "Data is 42");
     74      ok(evt.ports, "Port is received");
     75      is(evt.ports.length, 1, "Ports.length is 1");
     76 
     77      var a1 = new MessageChannel();
     78      ok(a1, "MessageChannel created");
     79 
     80      evt.ports[0].postMessage(42, [a1.port2]);
     81    }
     82 
     83    a.port1.onmessage = function(evt) {
     84      ok(evt.data, "Data is 42");
     85      ok(evt.ports, "Port is received");
     86      is(evt.ports.length, 1, "Ports.length is 1");
     87      window.removeEventListener('message', receiveMessage);
     88      runTest();
     89    }
     90 
     91    postMessage(42, '*', [a.port2]);
     92  }
     93 
     94  var tests = [
     95    testTransfer,
     96    testPorts
     97  ];
     98 
     99  function runTest() {
    100    if (!tests.length) {
    101      SimpleTest.finish();
    102      return;
    103    }
    104 
    105    var test = tests.shift();
    106    test();
    107  }
    108 
    109  SimpleTest.waitForExplicitFinish();
    110  runTest();
    111 
    112 </script>
    113 </body>
    114 </html>