| 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 |