26c159e0345bf10fcd207df9f96441fdc5a28d6e
[WebKit-https.git] / LayoutTests / http / tests / websocket / tests / close-on-unload-and-force-gc.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <link rel="stylesheet" href="../../../js-test-resources/js-test-style.css">
5 <script src="../../../js-test-resources/js-test-pre.js"></script>
6 </head>
7 <body>
8 <div id="description"></div>
9 <div id="console"></div>
10 <script type="text/javascript">
11 description("Test if Web Socket is closed on unload and not crashed if garbage collected");
12
13 window.jsTestIsAsync = true;
14
15 function gc()
16 {
17     if (window.GCController)
18         return GCController.collect();
19
20     for (var i = 0; i < 10000; i++) { // > force garbage collection (FF requires about 9K allocations before a collect)
21         var s = new String("abc");
22     }
23 };
24
25 var frameDiv;
26 var closedSocket;
27
28 var ws = new WebSocket("ws://127.0.0.1:8880/websocket/tests/close-on-unload");
29 ws.onopen = function()
30 {
31     debug("PASS ws on master document is ready.");
32     frameDiv = document.createElement("iframe");
33     frameDiv.src = "resources/close-on-unload-iframe.html";
34     document.body.appendChild(frameDiv);
35     debug("PASS insert a iframe, where open ws called 'socket1'");
36 };
37 ws.onmessage = function(evt)
38 {
39     closedSocket = evt.data;
40     ws.close();
41 };
42 ws.onclose = function()
43 {
44     shouldBe("closedSocket", '"socket1"');
45     finishJSTest();
46 };
47
48 document.iframeReady = function()
49 {
50     debug("PASS 'socket1' is sent to the server. unload the iframe and force garbage collection. expect receiving 'socket1' on ws and no crash...");
51     document.body.removeChild(frameDiv);
52     gc();
53 };
54
55 var successfullyParsed = true;
56 </script>
57 <script src="../../../js-test-resources/js-test-post.js"></script>
58 </body>
59 </html>