| <!doctype html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| |
| function addCompositedLayer() |
| { |
| var element = document.createElement("div"); |
| element.className = "composited"; |
| element.id = "last-element"; |
| document.body.appendChild(element); |
| |
| // Force layout to trigger a layer update. |
| document.body.offsetWidth; |
| |
| requestAnimationFrame(() => { |
| TestPage.dispatchEventToFrontend("TestPageDidAppendChild"); |
| }); |
| }; |
| |
| function test() |
| { |
| let documentNode = null; |
| |
| let suite = InspectorTest.createAsyncSuite("LayerTree.layerTreeDidChange"); |
| |
| suite.addTestCase({ |
| name: "LayerTree.layerTreeDidChange.WithRequest", |
| description: "Check that layerTreeDidChange is able to be dispatched once LayerTree.commands.layersForNode is called.", |
| test(resolve, reject) { |
| let layerTreeDidChangeCount = 0; |
| let testPageDidAppendChildCount = 0; |
| |
| let handleLayerTreeDidChange = null; |
| let handleTestPageDidAppendChild = InspectorTest.addEventListener("TestPageDidAppendChild", (event) => { |
| ++testPageDidAppendChildCount; |
| |
| if (testPageDidAppendChildCount === 2) { |
| WI.layerTreeManager.removeEventListener(WI.LayerTreeManager.Event.LayerTreeDidChange, handleLayerTreeDidChange); |
| InspectorTest.removeEventListener("TestPageDidAppendChild", handleTestPageDidAppendChild); |
| |
| InspectorTest.expectEqual(layerTreeDidChangeCount, 2, "LayerTreeDidChange should fire after layersForNode is called"); |
| |
| resolve(); |
| } |
| }); |
| |
| WI.layerTreeManager.layersForNode(documentNode, (layers) => { |
| handleLayerTreeDidChange = WI.layerTreeManager.addEventListener(WI.LayerTreeManager.Event.LayerTreeDidChange, (event) => { |
| ++layerTreeDidChangeCount; |
| |
| InspectorTest.log("Layer tree changed"); |
| |
| if (layerTreeDidChangeCount === 1) { |
| WI.layerTreeManager.layersForNode(documentNode, (layers) => { |
| InspectorTest.log("Creating layer..."); |
| InspectorTest.evaluateInPage(`addCompositedLayer()`); |
| }); |
| } |
| }); |
| |
| InspectorTest.log("Creating layer..."); |
| InspectorTest.evaluateInPage(`addCompositedLayer()`); |
| }); |
| }, |
| }); |
| |
| suite.addTestCase({ |
| name: "LayerTree.layerTreeDidChange.WithoutRequest", |
| description: "Check that layerTreeDidChange doesn't dispatch more than once until LayerTree.commands.layersForNode is called.", |
| test(resolve, reject) { |
| let layerTreeDidChangeCount = 0; |
| let handleLayerTreeDidChange = WI.layerTreeManager.addEventListener(WI.LayerTreeManager.Event.LayerTreeDidChange, (event) => { |
| ++layerTreeDidChangeCount; |
| |
| InspectorTest.log("Layer tree changed"); |
| |
| if (layerTreeDidChangeCount === 1) { |
| InspectorTest.log("Creating layer..."); |
| InspectorTest.evaluateInPage(`addCompositedLayer()`); |
| } |
| }); |
| |
| let testPageDidAppendChildCount = 0; |
| let handleTestPageDidAppendChild = InspectorTest.addEventListener("TestPageDidAppendChild", (event) => { |
| ++testPageDidAppendChildCount; |
| |
| if (testPageDidAppendChildCount === 2) { |
| WI.layerTreeManager.removeEventListener(WI.LayerTreeManager.Event.LayerTreeDidChange, handleLayerTreeDidChange); |
| InspectorTest.removeEventListener("TestPageDidAppendChild", handleTestPageDidAppendChild); |
| |
| InspectorTest.expectEqual(layerTreeDidChangeCount, 1, "LayerTreeDidChange should not fire before layersForNode is called"); |
| |
| resolve(); |
| } |
| }); |
| |
| WI.layerTreeManager.layersForNode(documentNode, (layers) => { |
| InspectorTest.log("Creating layer..."); |
| InspectorTest.evaluateInPage(`addCompositedLayer()`); |
| }); |
| }, |
| }); |
| |
| WI.domManager.requestDocument((node) => { |
| documentNode = node; |
| if (!documentNode) { |
| InspectorTest.fail("Missing document node."); |
| InspectorTest.completeTest(); |
| return; |
| } |
| |
| suite.runTestCasesAndFinish(); |
| }); |
| } |
| </script> |
| <style> |
| .composited { |
| -webkit-transform: translateZ(0); |
| } |
| </style> |
| </head> |
| <body onload="runTest()"> |
| <p>Tests for LayerTree.event.layerTreeDidChange.</p> |
| </body> |
| </html> |