test_messageChannel_start.html (5745B)
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 - start/close</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 runTests() { 20 if (!tests.length) { 21 SimpleTest.finish(); 22 return; 23 } 24 25 var test = tests.shift(); 26 test(); 27 } 28 29 function testOnMessage() { 30 var a = new MessageChannel(); 31 ok(a, "MessageChannel created"); 32 33 a.port1.postMessage(42); 34 a.port2.postMessage(43); 35 ok(true, "MessagePort{1,2}.postmessage() invoked"); 36 37 var events = 2; 38 39 a.port1.onmessage = function() { 40 ok(true, "This method should be called"); 41 if (!--events) runTests(); 42 } 43 44 a.port2.onmessage = function() { 45 ok(true, "This method should be called"); 46 if (!--events) runTests(); 47 } 48 } 49 50 function testAddEventListener() { 51 var a = new MessageChannel(); 52 ok(a, "MessageChannel created"); 53 54 a.port1.postMessage(42); 55 a.port2.postMessage(43); 56 ok(true, "MessagePort{1,2}.postmessage() invoked"); 57 58 a.port1.addEventListener('message', function() { 59 ok(false, "This method should not be called"); 60 }); 61 62 a.port2.addEventListener('message', function() { 63 ok(false, "This method should not be called"); 64 }); 65 66 setTimeout(runTests, 0); 67 } 68 69 function testAddEventListenerAndStart() { 70 var a = new MessageChannel(); 71 ok(a, "MessageChannel created"); 72 73 a.port1.postMessage(42); 74 a.port2.postMessage(43); 75 ok(true, "MessagePort{1,2}.postmessage() invoked"); 76 77 var events = 2; 78 79 a.port1.addEventListener('message', function() { 80 ok(true, "This method should be called"); 81 if (!--events) runTests(); 82 }); 83 84 a.port2.addEventListener('message', function() { 85 ok(true, "This method should be called"); 86 if (!--events) runTests(); 87 }); 88 89 a.port1.start(); 90 a.port2.start(); 91 } 92 93 function testAddEventListener1AndStart() { 94 var a = new MessageChannel(); 95 ok(a, "MessageChannel created"); 96 97 a.port1.postMessage(42); 98 a.port2.postMessage(43); 99 ok(true, "MessagePort{1,2}.postmessage() invoked"); 100 101 var events = 1; 102 103 a.port1.addEventListener('message', function() { 104 ok(true, "This method should be called"); 105 if (!--events) runTests(); 106 }); 107 108 a.port2.addEventListener('message', function() { 109 ok(false, "This method should not be called"); 110 }); 111 112 a.port1.start(); 113 } 114 115 function testAddEventListener2AndStart() { 116 var a = new MessageChannel(); 117 ok(a, "MessageChannel created"); 118 119 a.port1.postMessage(42); 120 a.port2.postMessage(43); 121 ok(true, "MessagePort{1,2}.postmessage() invoked"); 122 123 var events = 1; 124 125 a.port1.addEventListener('message', function() { 126 ok(false, "This method should not be called"); 127 }); 128 129 a.port2.addEventListener('message', function() { 130 ok(true, "This method should be called"); 131 if (!--events) runTests(); 132 }); 133 134 a.port2.start(); 135 } 136 137 function testTimer() { 138 var a = new MessageChannel(); 139 ok(a, "MessageChannel created"); 140 141 a.port1.postMessage(42); 142 a.port2.postMessage(43); 143 ok(true, "MessagePort{1,2}.postmessage() invoked"); 144 145 setTimeout(function() { 146 var events = 2; 147 a.port1.onmessage = function() { 148 ok(true, "This method should be called"); 149 if (!--events) runTests(); 150 } 151 152 a.port2.onmessage = function() { 153 ok(true, "This method should be called"); 154 if (!--events) runTests(); 155 } 156 }, 200); 157 } 158 159 function testAddEventListenerAndStartWrongOrder() { 160 var a = new MessageChannel(); 161 ok(a, "MessageChannel created"); 162 163 a.port1.postMessage(42); 164 a.port2.postMessage(43); 165 ok(true, "MessagePort{1,2}.postmessage() invoked"); 166 167 var events = 2; 168 169 a.port1.start(); 170 a.port1.addEventListener('message', function() { 171 ok(true, "This method should be called"); 172 if (!--events) runTests(); 173 }); 174 175 a.port2.start(); 176 a.port2.addEventListener('message', function() { 177 ok(true, "This method should be called"); 178 if (!--events) runTests(); 179 }); 180 } 181 182 function testOnMessageClone() { 183 var a = new MessageChannel(); 184 ok(a, "MessageChannel created"); 185 186 a.port1.postMessage(42); 187 a.port2.postMessage(43); 188 ok(true, "MessagePort{1,2}.postmessage() invoked"); 189 190 var events = 2; 191 192 addEventListener('message', testOnMessageCloneCb, false); 193 function testOnMessageCloneCb(event) { 194 a.port1.onmessage = function() { 195 ok(true, "This method should be called"); 196 testOnMessageCloneFinish(); 197 } 198 199 event.data.onmessage = function() { 200 ok(true, "This method should be called"); 201 testOnMessageCloneFinish(); 202 } 203 204 a.port2.onmessage = function() { 205 ok(false, "This method should not be called"); 206 } 207 } 208 209 function testOnMessageCloneFinish() { 210 if (!--events) { 211 removeEventListener('message', testOnMessageCloneCb); 212 runTests(); 213 } 214 } 215 216 postMessage(a.port2, '*', [a.port2]); 217 } 218 219 var tests = [ 220 testOnMessage, 221 testAddEventListener, 222 testAddEventListenerAndStart, 223 testAddEventListener1AndStart, 224 testAddEventListener2AndStart, 225 testTimer, 226 testAddEventListenerAndStartWrongOrder, 227 testOnMessageClone, 228 ]; 229 230 SimpleTest.waitForExplicitFinish(); 231 SimpleTest.requestFlakyTimeout("untriaged"); 232 runTests(); 233 </script> 234 </body> 235 </html>