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>