OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <script src="../../resources/js-test.js"></script> | |
3 <script> | |
4 var jsTestIsAsync = true; | |
5 | |
6 description("Tests that document.defaultView on a detached document doesn't cras
h."); | |
7 | |
8 var cachedWindow; | |
9 var cachedDocument; | |
10 var testFrameUnloaded = false; | |
11 | |
12 // DRT dumps out the number of unload handlers associated with a document once i
t loads. | |
13 // Unfortunately, load order is not guaranteed, so wait until the first frame ha
s finished loading | |
14 // before setting up the rest of the test. | |
15 function setupTest() | |
16 { | |
17 var frame2 = document.createElement('iframe'); | |
18 frame2.srcdoc = '<script>window.onunload=function() { window.top.finishTest(
); };</scr' + 'ipt>'; | |
19 frame2.onload = runTest; | |
20 document.getElementById('frames').appendChild(frame2); | |
21 } | |
22 | |
23 function runTest() | |
24 { | |
25 var i = document.getElementById("testFrame"); | |
26 // Make sure DOMWindow doesn't get GCed and clear Document's pointer back to
it. | |
27 cachedWindow = i.contentWindow; | |
28 cachedDocument = i.contentDocument; | |
29 // This test is structured to catch a document.defaultView crash when all of
the following are true: | |
30 // 1. Document's pointer back to DOMWindow has not yet been cleared by DOMWi
ndow destruction. | |
31 // 2. DOMWindow's pointer back to its Frame has not yet been cleared by Fram
e destruction. | |
32 // 3. The frame is already detached. | |
33 // One way to satisfy this condition is to test the value of document.defaul
tView when removing | |
34 // a DOM node that contains multiple subframes, since ChildFrameDisconnector
keeps a ref to the | |
35 // affected HTMLFrameOwnerElements (and consequently the Frame) on the stack
. | |
36 var frameContainer = document.getElementById("frames"); | |
37 frameContainer.parentNode.removeChild(frameContainer); | |
38 } | |
39 | |
40 function finishTest() | |
41 { | |
42 shouldBeTrue("testFrameUnloaded"); | |
43 shouldBeUndefined("cachedDocument.defaultView"); | |
44 finishJSTest(); | |
45 } | |
46 </script> | |
47 <body onload="setupTest()"> | |
48 <div id="frames"> | |
49 <iframe id="testFrame" srcdoc="<script>window.onunload=function() { window.t
op.testFrameUnloaded = true; };</script>"></iframe> | |
50 </div> | |
51 </body> | |
OLD | NEW |