2 <p>Test that MessagePort messages are delivered even if both ports are in transit (cloned).</p>
3 <p>Should say PASS twice.</p>
8 if (window.GCController)
9 return GCController.collect();
11 for (var i = 0; i < 10000; i++) { // force garbage collection (FF requires about 9K allocations before a collect)
12 var s = new String("abc");
18 document.getElementById("log").innerHTML += message + "<br>";
21 if (window.layoutTestController) {
22 layoutTestController.dumpAsText();
23 layoutTestController.waitUntilDone();
28 var channel = new MessageChannel;
29 var channel2 = new MessageChannel;
30 channel.port1.postMessage("msg1");
31 channel2.port1.postMessage("", [channel.port1]);
32 channel2.port2.postMessage("", [channel.port2]);
33 channel2.port2.onmessage = channel2.port1.onmessage = function(evt) {
34 evt.ports[0].onmessage = function(event) {
35 if (event.data == "msg1") {
36 log("PASS: Received message to cloned port.");
37 this.postMessage("msg2");
39 } else if (event.data == "msg2") {
40 log("PASS: Received message from cloned port.");
42 if (window.layoutTestController)
43 layoutTestController.notifyDone();
45 log("FAIL: Received unknown message: " + event.data);