dom/base/test/test_messageChannel_unshipped.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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 type="application/javascript" 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">
    19   function test_orderedMessages() {
    20     var a = new MessageChannel();
    21     ok(a, "MessageChannel created");
    23     var b = new MessageChannel();
    24     ok(b, "MessageChannel created");
    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++;
    32       if (expectedNumber >100) {
    33         runTests();
    34       }
    35     }
    37     a.port1.onmessage = function(evt) {
    38       testEvent(evt.data, 2);
    39     };
    41     a.port2.onmessage = function(evt) {
    42       testEvent(evt.data, 1);
    43     };
    45     b.port1.onmessage = function(evt) {
    46       testEvent(evt.data, 4);
    47     };
    49     b.port2.onmessage = function(evt) {
    50       testEvent(evt.data, 3);
    51     };
    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   }
    61   function test_unstarted() {
    62     var a = new MessageChannel();
    63     ok(a, "MessageChannel created");
    65     var b = new MessageChannel();
    66     ok(b, "MessageChannel created");
    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++;
    74       // 102 because it's the first multiple of 3.
    75       if (expectedNumber > 102) {
    76         runTests();
    77       }
    78     }
    80     a.port1.onmessage = function(evt) {
    81       testEvent(evt.data, 2);
    82     };
    84     a.port2.onmessage = function(evt) {
    85       testEvent(evt.data, 1);
    86     };
    88     b.port1.addEventListener("message", function() {
    89       ok(false, "shouldn't be called");
    90     });
    92     b.port2.onmessage = function(evt) {
    93       testEvent(evt.data, 3);
    94     };
    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   }
   104   var tests = [
   105     test_orderedMessages,
   106     test_unstarted
   107   ];
   109   function runTests() {
   110     if (!tests.length) {
   111       SimpleTest.finish();
   112       return;
   113     }
   115     var test = tests.shift();
   116     test();
   117   }
   119   SimpleTest.waitForExplicitFinish();
   120   SpecialPowers.pushPrefEnv({"set": [["dom.messageChannel.enabled", true]]}, runTests);
   121   </script>
   122 </body>
   123 </html>

mercurial