[Release] Webkit-EFL Ver. 2.0_beta_118996_0.6.22
[framework/web/webkit-efl.git] / LayoutTests / fast / events / message-port-deleted-frame.html
1 <body>
2 <p>Test that destroying a frame doesn't cause a crash when posting a message to a MessagePort it owned.</p>
3 <pre id=log></pre>
4 <script>
5 function gc()
6 {
7     if (window.GCController)
8         return GCController.collect();
9
10     for (var i = 0; i < 10000; i++) { // > force garbage collection (FF requires about 9K allocations before a collect)
11         var s = new String("abc");
12     }
13 }
14
15 function log(message)
16 {
17     document.getElementById("log").innerHTML += message + "<br>";
18 }
19
20 if (window.layoutTestController) {
21     layoutTestController.dumpAsText();
22     layoutTestController.waitUntilDone();
23 }
24
25 var mainPort;
26 var frameDoc;
27
28 function test()
29 {
30     frameDoc = window.frames[0].document;
31     var channel = new MessageChannel;
32     window.frames[0].postMessage("msg", [channel.port2], "*");
33     mainPort = channel.port1;
34     mainPort.start();
35
36     mainPort.postMessage("ping");
37     mainPort.onmessage = test2;
38 }
39
40 function test2()
41 {
42     var frameElement = document.getElementsByTagName("iframe")[0];
43     frameElement.parentNode.removeChild(frameElement);
44     frameElement = null;
45
46     gc();
47     setTimeout(test3, 10);
48 }
49
50 function test3()
51 {
52     gc();
53     mainPort.postMessage("ping");
54     mainPort.onmessage = function(evt) {
55         if (evt.data == "pong")
56             log("Unexpected response: FAIL");
57     };
58     setTimeout(test4, 10);
59 }
60
61 function test4()
62 {
63     log("Didn't crash: SUCCESS");
64
65     if (window.layoutTestController)
66         layoutTestController.notifyDone();
67 }
68
69 </script>
70 <iframe src="resources/message-port-iframe.html" onload="test()"></iframe>
71 </body>