tor-browser

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

test_messageChannel_transferable.html (3031B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=677638
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8  <title>Test for Bug 677638 - 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=677638">Mozilla Bug 677638</a>
     14 <div id="content"></div>
     15 <pre id="test">
     16 </pre>
     17  <script type="application/javascript">
     18 
     19  function basic_test() {
     20    var a = new MessageChannel();
     21    ok(a, "MessageChannel created");
     22 
     23    window.addEventListener('message', receiveMessage);
     24    function receiveMessage(evt) {
     25      if (evt.data.status == 'READY') {
     26        a.port1.postMessage({ab, cb: ab}, [ab]);
     27        ok(ab.byteLength == 0, "PostMessage - The size is: 0 == " + ab.byteLength)
     28      } else {
     29        ok(false, "Unknown message");
     30      }
     31    }
     32 
     33    var div = document.getElementById("content");
     34    ok(div, "Parent exists");
     35 
     36    var ifr = document.createElement("iframe");
     37    ifr.addEventListener("load", iframeLoaded);
     38    ifr.setAttribute('src', "iframe_messageChannel_post.html");
     39    div.appendChild(ifr);
     40 
     41    function iframeLoaded() {
     42      ifr.contentWindow.postMessage({ port: a.port2 }, '*', [a.port2]);
     43    }
     44 
     45    a.port1.addEventListener('message', receivePortMessage);
     46    function receivePortMessage(evt) {
     47      is(evt.data.ab.byteLength, size, "The size is: " + size + " == " + ab.byteLength);
     48      window.removeEventListener('message', receiveMessage);
     49      runTests();
     50    }
     51 
     52    // Start() is not implicity invoked when addEventListener is used.
     53    a.port1.start();
     54 
     55    var size = 1024 * 1024 * 32;
     56    var ab = new ArrayBuffer(size);
     57    is(ab.byteLength, size, "The size is: " + size + " == " + ab.byteLength);
     58  }
     59 
     60  function port_test() {
     61    window.addEventListener('message', receiveMessage);
     62    function receiveMessage(evt) {
     63      ok(evt.data.type == 'OK', evt.data.msg);
     64    }
     65 
     66    var a = new MessageChannel();
     67    ok(a, "MessageChannel created");
     68 
     69    var div = document.getElementById("content");
     70    ok(div, "Parent exists");
     71 
     72    var ifr = document.createElement("iframe");
     73    ifr.addEventListener("load", iframeLoaded);
     74    ifr.setAttribute('src', "iframe_messageChannel_transferable.html");
     75    div.appendChild(ifr);
     76 
     77    function iframeLoaded() {
     78      ifr.contentWindow.postMessage('foobar!', '*', [a.port2]);
     79    }
     80 
     81    a.port1.onmessage = function(evt) {
     82      ok(evt.ports.length == 1, "Iframe sent a new port!");
     83      evt.ports[0].onmessage = function(event) {
     84        is(event.data, "hello world!", "Message sent and received!");
     85        runTests();
     86      }
     87 
     88      evt.ports[0].postMessage("hello world!");
     89    }
     90  }
     91 
     92  var tests = [
     93    basic_test,
     94    port_test
     95  ];
     96 
     97  function runTests() {
     98    if (!tests.length) {
     99      SimpleTest.finish();
    100      return;
    101    }
    102 
    103    var t = tests.shift();
    104    t();
    105  }
    106 
    107  SimpleTest.waitForExplicitFinish();
    108  runTests();
    109  </script>
    110 </body>
    111 </html>