[Release] Webkit-EFL Ver. 2.0_beta_118996_0.6.22
[framework/web/webkit-efl.git] / LayoutTests / fast / events / message-channel-gc-4.html
1 <body>
2 <p>Test that MessagePort messages are delivered even if both ports are in transit (cloned).</p>
3 <p>Should say PASS twice.</p>
4 <pre id=log></pre>
5 <script>
6 function gc()
7 {
8     if (window.GCController)
9         return GCController.collect();
10
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");
13     }
14 }
15
16 function log(message)
17 {
18     document.getElementById("log").innerHTML += message + "<br>";
19 }
20
21 if (window.layoutTestController) {
22     layoutTestController.dumpAsText();
23     layoutTestController.waitUntilDone();
24 }
25
26 function test1()
27 {
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");
38                 gc();
39             } else if (event.data == "msg2") {
40                 log("PASS: Received message from cloned port.");
41                 gc();
42                 if (window.layoutTestController)
43                     layoutTestController.notifyDone();
44             } else {
45                 log("FAIL: Received unknown message: " + event.data);
46             }
47         }
48         evt.ports[0] = 0;
49     }
50     channel = 0;
51     channel2 = 0;
52     gc();
53 }
54
55 test1();
56
57 </script>
58 </body>