|
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"> |
|
15 |
|
16 function testTransfer() { |
|
17 var a = new MessageChannel(); |
|
18 ok(a, "MessageChannel created"); |
|
19 |
|
20 window.addEventListener('message', receiveMessage, false); |
|
21 function receiveMessage(evt) { |
|
22 ok(evt.data.port, "Port has been received!"); |
|
23 |
|
24 var a = new MessageChannel(); |
|
25 ok(a, "MessageChannel created"); |
|
26 |
|
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 } |
|
33 |
|
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 } |
|
40 |
|
41 evt.data.port.postMessage({port: a.port2}, [a.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, 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"); |
|
76 |
|
77 var a = new MessageChannel(); |
|
78 ok(a, "MessageChannel created"); |
|
79 |
|
80 evt.ports[0].postMessage(42, [a.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 SpecialPowers.pushPrefEnv({"set": [["dom.messageChannel.enabled", true]]}, runTest); |
|
111 |
|
112 </script> |
|
113 </body> |
|
114 </html> |
|
115 |