Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
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 type="application/javascript" 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">
16 function testTransfer() {
17 var a = new MessageChannel();
18 ok(a, "MessageChannel created");
20 window.addEventListener('message', receiveMessage, false);
21 function receiveMessage(evt) {
22 ok(evt.data.port, "Port has been received!");
24 var a = new MessageChannel();
25 ok(a, "MessageChannel created");
27 try {
28 evt.data.port.postMessage({port: a.port2});
29 ok(false, "PostMessage should throw! - no transfered port");
30 } catch(e) {
31 ok(true, "PostMessage should throw! - no transfered port");
32 }
34 try {
35 evt.data.port.postMessage({port: a.port2}, [a.port2, a.port2]);
36 ok(false, "PostMessage should throw - no duplicate!");
37 } catch(e) {
38 ok(true, "PostMessage should throw - no duplicate!");
39 }
41 evt.data.port.postMessage({port: a.port2}, [a.port2]);
42 }
44 a.port1.onmessage = function(evt) {
45 ok(evt.data.port, "Port has been received!");
46 window.removeEventListener('message', receiveMessage);
47 runTest();
48 }
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 }
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 }
64 postMessage({port: a.port2}, '*', [a.port2]);
65 }
67 function testPorts() {
68 var a = new MessageChannel();
69 ok(a, "MessageChannel created");
71 window.addEventListener('message', receiveMessage, false);
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");
77 var a = new MessageChannel();
78 ok(a, "MessageChannel created");
80 evt.ports[0].postMessage(42, [a.port2]);
81 }
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 }
91 postMessage(42, '*', [a.port2]);
92 }
94 var tests = [
95 testTransfer,
96 testPorts
97 ];
99 function runTest() {
100 if (!tests.length) {
101 SimpleTest.finish();
102 return;
103 }
105 var test = tests.shift();
106 test();
107 }
109 SimpleTest.waitForExplicitFinish();
110 SpecialPowers.pushPrefEnv({"set": [["dom.messageChannel.enabled", true]]}, runTest);
112 </script>
113 </body>
114 </html>