Reverting r42321 because it broke some layout tests.
[WebKit-https.git] / LayoutTests / plugins / root-object-premature-delete-crash.html
1 <p>This test verifies that an Objective-C reference to a DOM object remains valid
2 after the frame that provided the DOM object navigates to a new location.
3 </p>
4 <p>If the test passes, you'll see a 'PASS' message below.
5 </p>
6 <hr>
7 <pre id="log"></pre>
8
9 <iframe id="iframe" src="data:text/html, " style="width: 0; height: 0; visibility: hidden"></iframe>
10
11 <script>
12 function log(s)
13 {
14     document.getElementById("log").appendChild(document.createTextNode(s));
15 }
16
17 var iframe = document.getElementById("iframe");
18
19 var count = 0;
20
21 function runTest()
22 {
23     // Use a possibly stale pointer.
24     objCController.accessStoredWebScriptObject(); 
25
26     // Repeat, just to be sure.
27     if (++count < 100) { // >
28         queueTest();
29         return;
30     }
31
32     log("PASS: You didn't crash.\n");
33     layoutTestController.notifyDone();
34 }
35
36 function queueTest()
37 {
38     iframe.onload = runTest;
39     objCController.storeWebScriptObject(count % 2 == 0 ? iframe.contentWindow : iframe.contentDocument.documentElement);
40     iframe.contentWindow.location.reload();
41 }
42
43 function timeoutTest()
44 {
45     log("FAIL: Test timed-out after " + count + " runs.\n");
46     layoutTestController.notifyDone();
47 }
48
49 window.onload = function onload()
50 {
51     if (!("layoutTestController" in window) || !("objCController" in window)) {
52         var errorMessage = "FAIL: This test can only run inside DumpRenderTree on the mac.";
53         log(errorMessage);
54         throw errorMessage;
55     }
56
57     timeoutIdentifier = setTimeout(timeoutTest, 30000); // timeout after 30 seconds
58
59     layoutTestController.dumpAsText();
60     layoutTestController.waitUntilDone();
61
62     queueTest();
63 }
64 </script>