tor-browser

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

test_messageChannel_pingpong.html (2231B)


      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 runTest() {
     20    var MAX = 100;
     21 
     22    var a = new MessageChannel();
     23    ok(a, "MessageChannel created");
     24 
     25    // Populate the message queue of this port.
     26    for (var i = 0; i < MAX; ++i) {
     27      a.port1.postMessage(i);
     28    }
     29 
     30    window.addEventListener('message', receiveMessage);
     31    function receiveMessage(evt) {
     32 
     33      // This test sends the port from this window to the iframe and viceversa.
     34      if (evt.data.type == 'PORT') {
     35        var port = evt.data.port;
     36        var counter = 0;
     37        port.onmessage = function(event) {
     38          // only 1 message should be received by this port.
     39          if (counter++ == 0) {
     40            ok(event.data % 2, "The number " + event.data + " has been received correctly by the main window");
     41 
     42            if (event.data < MAX - 1) {
     43              ifr.contentWindow.postMessage({ type: 'PORT', port }, '*', [port]);
     44            } else {
     45              SimpleTest.finish();
     46            }
     47          } else {
     48            ok(false, "Wrong message!");
     49          }
     50        }
     51      } else if (evt.data.type == 'OK') {
     52        ok(true, evt.data.msg);
     53      } else if (evt.data.type == 'KO') {
     54        ok(false, evt.data.msg);
     55      } else {
     56        ok(false, "Unknown message");
     57      }
     58    }
     59 
     60    var div = document.getElementById("content");
     61    ok(div, "Parent exists");
     62 
     63    var ifr = document.createElement("iframe");
     64    ifr.addEventListener("load", iframeLoaded);
     65    ifr.setAttribute('src', "iframe_messageChannel_pingpong.html");
     66    div.appendChild(ifr);
     67 
     68    function iframeLoaded() {
     69      ifr.contentWindow.postMessage({ type: 'PORT', port: a.port2 }, '*', [a.port2]);
     70    }
     71  }
     72 
     73  SimpleTest.waitForExplicitFinish();
     74  runTest();
     75  </script>
     76 </body>
     77 </html>