https://bugs.webkit.org/show_bug.cgi?id=73503
[WebKit-https.git] / LayoutTests / fast / dom / Window / window-postmessage-args.html
1 <html>
2 <head></head>
3 <body>
4 <div id="description"></div>
5 <div id="console"></div>
6 <script>
7 if (window.layoutTestController) {
8     layoutTestController.dumpAsText();
9     layoutTestController.waitUntilDone();
10 }
11
12 var console = document.getElementById("console");
13
14 function onmessage(evt) {
15     if (evt.ports)
16         console.innerHTML += "Received message '" + evt.data + "' with " + evt.ports.length + " ports.<br>";
17     else
18         console.innerHTML += "Received message '" + evt.data + "'<br>";
19
20     if (evt.data == 'done' && window.layoutTestController)
21         layoutTestController.notifyDone();
22 }
23
24 window.addEventListener('message', onmessage, false);
25
26 function tryPostMessageFunction(postMessageFunction, first, second, third, shouldFail) {
27    try {
28         if (!third)
29             postMessageFunction(first, second);
30         else
31             postMessageFunction(first, second, third);
32         console.innerHTML += (shouldFail ? "FAIL" : "PASS") + ": Posting message ('" + first + "', " + second + ") did not throw an exception<br>";
33    } catch (e) {
34         console.innerHTML += (shouldFail ? "PASS" : "FAIL") + ": Posting message ('" + first + "', " + second + "): threw exception " + e + "<br>";
35    }
36 }
37
38 function tryPostMessage(first, second, third, shouldFail) {
39     tryPostMessageFunction(window.postMessage, first, second, third, shouldFail);
40     tryPostMessageFunction(window.webkitPostMessage, first, second, third, shouldFail);
41 }
42
43 document.getElementById("description").innerHTML = "Test that the second argument of window.postMessage is ignored or triggers an error if it is not a message port. You should see PASS message '1' through '7', followed by 'done', with messages 4-7 received below.<br><br>";
44
45 tryPostMessage('1', 1, '*', true);
46 tryPostMessage('2', "", '*', true);
47 tryPostMessage('3', { x: 1 }, '*', true);
48 tryPostMessage('4', window, '*');  // Passes because window has a "length" attribute of value '0', so it looks like an array
49 tryPostMessage('5', null, '*');
50 tryPostMessage('6', void 0, '*');
51 var channel1 = new MessageChannel;
52 tryPostMessageFunction(window.postMessage, '7', [channel1.port1, channel1.port2], '*');
53 var channel2 = new MessageChannel;
54 tryPostMessageFunction(window.webkitPostMessage, '7', [channel2.port1, channel2.port2], '*');
55 var channel3 = new MessageChannel;
56 tryPostMessage(2147483648, null, '*');
57 tryPostMessageFunction(window.postMessage, channel3.port1, [channel3.port1, channel3.port2], '*', true);
58 var channel4 = new MessageChannel;
59 tryPostMessageFunction(window.webkitPostMessage, channel4.port1, [channel4.port1, channel4.port2], '*');
60 var channel5 = new MessageChannel;
61 tryPostMessageFunction(window.webkitPostMessage, [channel5.port1, channel5.port2], [channel5.port1, channel5.port2], '*');
62
63 var arrayBuffer = new ArrayBuffer(30);
64 var int8View = new Int8Array(arrayBuffer, 2, 10);
65 tryPostMessageFunction(window.webkitPostMessage, arrayBuffer, [arrayBuffer], '*');
66 if (!(arrayBuffer.byteLength === 0)) {
67     console.innerHTML += "FAIL: arrayBuffer not neutered; byteLength = " + arrayBuffer.byteLength + "<br>";
68 }
69 else {
70     console.innerHTML += "PASS: arrayBuffer neutered<br>";
71 }
72
73 if (!(int8View.length == 0)) {
74     console.innerHTML += "FAIL: view was not neutered; length = " + int8View.length + "<br>";
75 }
76 else {
77     console.innerHTML += "PASS: view neutered<br>"
78 }
79
80
81 tryPostMessageFunction(window.postMessage, 'done', '*');
82 </script>
83 </body>
84 </html>