test_broadcastchannel_basic.html (1953B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test for BroadcastChannel</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 7 </head> 8 <body> 9 10 <div id="content"></div> 11 12 <script type="application/javascript"> 13 14 function runTest() { 15 addEventListener("message", receiveMessage, false); 16 function receiveMessage(evt) { 17 if (evt.data.status == "OK") { 18 ok(true, evt.data.message); 19 } else if (evt.data.status == "KO") { 20 ok(false, evt.data.message); 21 } else { 22 ok(false, "Unknown message"); 23 } 24 } 25 26 ok("BroadcastChannel" in window, "BroadcastChannel exists"); 27 28 var bc = new BroadcastChannel("foobar"); 29 ok(bc, "BroadcastChannel can be created"); 30 is(bc.name, "foobar", "BroadcastChannel.name is foobar"); 31 32 ok("postMessage" in bc, "BroadcastChannel has postMessage() method"); 33 34 bc.onmessage = function(evt) { 35 ok(evt instanceof MessageEvent, "This is a MessageEvent"); 36 is(evt.target, bc, "MessageEvent.target is bc"); 37 is(evt.target.name, "foobar", "MessageEvent.target.name is foobar"); 38 is(evt.target.name, bc.name, "MessageEvent.target.name == bc.name"); 39 ok(evt.origin.indexOf("http://mochi.test:8888") == 0, "MessageEvent.origin is correct"); 40 is(evt.data, "Hello world from the iframe!", "The message from the iframe has been received!"); 41 SimpleTest.finish(); 42 }; 43 44 var div = document.getElementById("content"); 45 ok(div, "Parent exists"); 46 47 var ifr = document.createElement("iframe"); 48 ifr.addEventListener("load", iframeLoaded); 49 ifr.setAttribute("src", "iframe_broadcastchannel.html"); 50 div.appendChild(ifr); 51 52 function iframeLoaded() { 53 bc.postMessage("Hello world from the window!"); 54 } 55 56 // A leak test 57 var dummyBc = new BroadcastChannel("dont_leak_this"); 58 dummyBc.foo = "bar"; 59 // don't add message listener! 60 } 61 62 SimpleTest.waitForExplicitFinish(); 63 runTest(); 64 65 </script> 66 </body> 67 </html>