blob: 478b8e9051bee9bd87287d79c27fd2c0b60b1b44 [file] [log] [blame]
<!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 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()`);
});
}
});
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, 2, "LayerTreeDidChange should fire after layersForNode is called");
resolve();
}
});
WI.layerTreeManager.layersForNode(documentNode, (layers) => {
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>