tor-browser

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

test_messageChannel_unshipped.html (2841B)


      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 - unshipped message port queue</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 test_orderedMessages() {
     20    var a = new MessageChannel();
     21    ok(a, "MessageChannel created");
     22 
     23    var b = new MessageChannel();
     24    ok(b, "MessageChannel created");
     25 
     26    var expectedNumber = 1;
     27    function testEvent(number, id) {
     28      is(expectedNumber, number, "This is the right number!");
     29      ok(!((expectedNumber - id) % 4), "From the right port: " + expectedNumber + " " + id);
     30      expectedNumber++;
     31 
     32      if (expectedNumber >100) {
     33        runTests();
     34      }
     35    }
     36 
     37    a.port1.onmessage = function(evt) {
     38      testEvent(evt.data, 2);
     39    };
     40 
     41    a.port2.onmessage = function(evt) {
     42      testEvent(evt.data, 1);
     43    };
     44 
     45    b.port1.onmessage = function(evt) {
     46      testEvent(evt.data, 4);
     47    };
     48 
     49    b.port2.onmessage = function(evt) {
     50      testEvent(evt.data, 3);
     51    };
     52 
     53    for (var i = 0; i < 100;) {
     54      a.port1.postMessage(++i);
     55      a.port2.postMessage(++i);
     56      b.port1.postMessage(++i);
     57      b.port2.postMessage(++i);
     58    }
     59  }
     60 
     61  function test_unstarted() {
     62    var a = new MessageChannel();
     63    ok(a, "MessageChannel created");
     64 
     65    var b = new MessageChannel();
     66    ok(b, "MessageChannel created");
     67 
     68    var expectedNumber = 1;
     69    function testEvent(number, id) {
     70      is(expectedNumber, number, "This is the right number!");
     71      ok(!((expectedNumber - id) % 3), "From the right port: " + expectedNumber + " " + id);
     72      expectedNumber++;
     73 
     74      // 102 because it's the first multiple of 3.
     75      if (expectedNumber > 102) {
     76        runTests();
     77      }
     78    }
     79 
     80    a.port1.onmessage = function(evt) {
     81      testEvent(evt.data, 2);
     82    };
     83 
     84    a.port2.onmessage = function(evt) {
     85      testEvent(evt.data, 1);
     86    };
     87 
     88    b.port1.addEventListener("message", function() {
     89      ok(false, "shouldn't be called");
     90    });
     91 
     92    b.port2.onmessage = function(evt) {
     93      testEvent(evt.data, 3);
     94    };
     95 
     96    for (var i = 0; i < 100;) {
     97      a.port1.postMessage(++i);
     98      a.port2.postMessage(++i);
     99      b.port1.postMessage(++i);
    100      b.port2.postMessage(1000);
    101    }
    102  }
    103 
    104  var tests = [
    105    test_orderedMessages,
    106    test_unstarted
    107  ];
    108 
    109  function runTests() {
    110    if (!tests.length) {
    111      SimpleTest.finish();
    112      return;
    113    }
    114 
    115    var test = tests.shift();
    116    test();
    117  }
    118 
    119  SimpleTest.waitForExplicitFinish();
    120  runTests();
    121  </script>
    122 </body>
    123 </html>