Wed, 31 Dec 2014 06:09:35 +0100
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>