test_messagePort.html (3005B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=912456 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for Bug 912456 - port cloning</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=912456">Mozilla Bug 912456</a> 14 <script type="application/javascript"> 15 16 function testTransfer() { 17 var a = new MessageChannel(); 18 ok(a, "MessageChannel created"); 19 20 window.addEventListener('message', receiveMessage); 21 function receiveMessage(evt) { 22 ok(evt.data.port, "Port has been received!"); 23 24 var a1 = new MessageChannel(); 25 ok(a1, "MessageChannel created"); 26 27 try { 28 evt.data.port.postMessage({port: a1.port2}); 29 ok(false, "PostMessage should throw! - no transfered port"); 30 } catch(e) { 31 ok(true, "PostMessage should throw! - no transfered port"); 32 } 33 34 try { 35 evt.data.port.postMessage({port: a1.port2}, [a1.port2, a1.port2]); 36 ok(false, "PostMessage should throw - no duplicate!"); 37 } catch(e) { 38 ok(true, "PostMessage should throw - no duplicate!"); 39 } 40 41 evt.data.port.postMessage({port: a1.port2}, [a1.port2]); 42 } 43 44 a.port1.onmessage = function(evt) { 45 ok(evt.data.port, "Port has been received!"); 46 window.removeEventListener('message', receiveMessage); 47 runTest(); 48 } 49 50 try { 51 postMessage({ port: a.port2}, 42, '*'); 52 ok(false, "PostMessage should throw! - no transfered port"); 53 } catch(e) { 54 ok(true, "PostMessage should throw! - no transfered port"); 55 } 56 57 try { 58 postMessage({ port: a.port2}, 42, '*', [a.port2, a.port2]); 59 ok(false, "PostMessage should throw - no duplicate!"); 60 } catch(e) { 61 ok(true, "PostMessage should throw - no duplicate!"); 62 } 63 64 postMessage({port: a.port2}, '*', [a.port2]); 65 } 66 67 function testPorts() { 68 var a = new MessageChannel(); 69 ok(a, "MessageChannel created"); 70 71 window.addEventListener('message', receiveMessage); 72 function receiveMessage(evt) { 73 ok(evt.data, "Data is 42"); 74 ok(evt.ports, "Port is received"); 75 is(evt.ports.length, 1, "Ports.length is 1"); 76 77 var a1 = new MessageChannel(); 78 ok(a1, "MessageChannel created"); 79 80 evt.ports[0].postMessage(42, [a1.port2]); 81 } 82 83 a.port1.onmessage = function(evt) { 84 ok(evt.data, "Data is 42"); 85 ok(evt.ports, "Port is received"); 86 is(evt.ports.length, 1, "Ports.length is 1"); 87 window.removeEventListener('message', receiveMessage); 88 runTest(); 89 } 90 91 postMessage(42, '*', [a.port2]); 92 } 93 94 var tests = [ 95 testTransfer, 96 testPorts 97 ]; 98 99 function runTest() { 100 if (!tests.length) { 101 SimpleTest.finish(); 102 return; 103 } 104 105 var test = tests.shift(); 106 test(); 107 } 108 109 SimpleTest.waitForExplicitFinish(); 110 runTest(); 111 112 </script> 113 </body> 114 </html>