| <!doctype html> |
| <html> |
| <head> |
| <script src="../resources/inspector-test.js"></script> |
| <script> |
| function test() |
| { |
| let suite = InspectorTest.createAsyncSuite("DOM.DisconnectTreeOnMainResourceChange"); |
| |
| suite.addTestCase({ |
| name: "CheckLazyInitializationOfDOMTree", |
| description: "Check that DOMTree instances are created lazily.", |
| test(resolve, reject) { |
| let instances = WI.domManager.retainedObjectsWithPrototype(WI.DOMTree); |
| InspectorTest.expectThat(instances.size === 0, "There should not be a DOMTree listening to DOMTreeManager events initially."); |
| InspectorTest.log("DOMTree instance count: " + instances.size); |
| resolve(); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "CheckDOMTreeCountAfterUsingGetter", |
| description: "Check that the count of connected DOMTrees is correct after initializing them.", |
| test(resolve, reject) { |
| let mainFrame = WI.networkManager.mainFrame; |
| mainFrame.domTree; // Force creation of the root DOM tree. |
| |
| let instances = WI.domManager.retainedObjectsWithPrototype(WI.DOMTree); |
| InspectorTest.expectThat(instances.size === 1, "There should be a one DOMTree listening to DOMTreeManager events after creation."); |
| InspectorTest.log("DOMTree instance count: " + instances.size); |
| |
| // Force creation of child DOM trees. |
| let childrenLevel1 = Array.from(mainFrame.childFrameCollection); |
| childrenLevel1[0].domTree; |
| |
| let childrenLevel2 = Array.from(childrenLevel1[0].childFrameCollection); |
| childrenLevel2[0].domTree; |
| |
| let childrenLevel3 = Array.from(childrenLevel2[0].childFrameCollection); |
| childrenLevel3[0].domTree; |
| |
| instances = WI.domManager.retainedObjectsWithPrototype(WI.DOMTree); |
| InspectorTest.expectThat(instances.size === 4, "There should be four DOMTrees listening to DOMTreeManager events after touching each Frame."); |
| InspectorTest.log("DOMTree instance count: " + instances.size); |
| |
| resolve(); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "CheckDOMTreeCountAfterReloading", |
| description: "Check that the count of connected DOMTrees is correct after a reload.", |
| test(resolve, reject) { |
| WI.Frame.awaitEvent(WI.Frame.Event.MainResourceDidChange) |
| .then((event) => { |
| let instances = WI.domManager.retainedObjectsWithPrototype(WI.DOMTree); |
| InspectorTest.expectThat(instances.size === 0, "There should not be any DOMTrees listening to DOMTreeManager events after a main frame navigation."); |
| InspectorTest.log("DOMTree instance count: " + instances.size); |
| }) |
| .then(resolve, reject); |
| |
| InspectorTest.reloadPage(); |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Testing that DOMTrees are not retained by DOMTreeManager across main frame navigations.</p> |
| <iframe src="resources/nested-frame-2-deep.html"/> |
| </body> |
| </html> |