test_messageChannel_transferable.html (3031B)
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 - 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=677638">Mozilla Bug 677638</a> 14 <div id="content"></div> 15 <pre id="test"> 16 </pre> 17 <script type="application/javascript"> 18 19 function basic_test() { 20 var a = new MessageChannel(); 21 ok(a, "MessageChannel created"); 22 23 window.addEventListener('message', receiveMessage); 24 function receiveMessage(evt) { 25 if (evt.data.status == 'READY') { 26 a.port1.postMessage({ab, cb: ab}, [ab]); 27 ok(ab.byteLength == 0, "PostMessage - The size is: 0 == " + ab.byteLength) 28 } else { 29 ok(false, "Unknown message"); 30 } 31 } 32 33 var div = document.getElementById("content"); 34 ok(div, "Parent exists"); 35 36 var ifr = document.createElement("iframe"); 37 ifr.addEventListener("load", iframeLoaded); 38 ifr.setAttribute('src', "iframe_messageChannel_post.html"); 39 div.appendChild(ifr); 40 41 function iframeLoaded() { 42 ifr.contentWindow.postMessage({ port: a.port2 }, '*', [a.port2]); 43 } 44 45 a.port1.addEventListener('message', receivePortMessage); 46 function receivePortMessage(evt) { 47 is(evt.data.ab.byteLength, size, "The size is: " + size + " == " + ab.byteLength); 48 window.removeEventListener('message', receiveMessage); 49 runTests(); 50 } 51 52 // Start() is not implicity invoked when addEventListener is used. 53 a.port1.start(); 54 55 var size = 1024 * 1024 * 32; 56 var ab = new ArrayBuffer(size); 57 is(ab.byteLength, size, "The size is: " + size + " == " + ab.byteLength); 58 } 59 60 function port_test() { 61 window.addEventListener('message', receiveMessage); 62 function receiveMessage(evt) { 63 ok(evt.data.type == 'OK', evt.data.msg); 64 } 65 66 var a = new MessageChannel(); 67 ok(a, "MessageChannel created"); 68 69 var div = document.getElementById("content"); 70 ok(div, "Parent exists"); 71 72 var ifr = document.createElement("iframe"); 73 ifr.addEventListener("load", iframeLoaded); 74 ifr.setAttribute('src', "iframe_messageChannel_transferable.html"); 75 div.appendChild(ifr); 76 77 function iframeLoaded() { 78 ifr.contentWindow.postMessage('foobar!', '*', [a.port2]); 79 } 80 81 a.port1.onmessage = function(evt) { 82 ok(evt.ports.length == 1, "Iframe sent a new port!"); 83 evt.ports[0].onmessage = function(event) { 84 is(event.data, "hello world!", "Message sent and received!"); 85 runTests(); 86 } 87 88 evt.ports[0].postMessage("hello world!"); 89 } 90 } 91 92 var tests = [ 93 basic_test, 94 port_test 95 ]; 96 97 function runTests() { 98 if (!tests.length) { 99 SimpleTest.finish(); 100 return; 101 } 102 103 var t = tests.shift(); 104 t(); 105 } 106 107 SimpleTest.waitForExplicitFinish(); 108 runTests(); 109 </script> 110 </body> 111 </html>