blob: fdd16e37538a6d752f16f8beb69d89cd0b124b17 [file] [log] [blame]
<html>
<head>
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
<script>
function test()
{
var nodes = [];
InspectorProtocol.eventHandler["DOM.setChildNodes"] = setChildNodes;
enableLayerTreeAgent();
function enableLayerTreeAgent(result)
{
step({
name: "Enable the LayerTree agent",
command: "LayerTree.enable",
parameters: {},
callback: getDocument
});
};
function getDocument()
{
// We must first get the document so that later on we may get sensible nodeIds.
step({
name: "Get the Document",
command: "DOM.getDocument",
parameters: {},
callback: getLayerTree
});
};
function getLayerTree(result)
{
step({
name: "Get the layer tree",
command: "LayerTree.layersForNode",
parameters: {"nodeId": result.root.nodeId},
callback: gotLayerTree
});
};
function gotLayerTree(result)
{
logTestName("Check layers' reasons for compositing")
var layers = result.layers;
var nodesById = {};
nodes.forEach(function(node) {
nodesById[node.nodeId] = node;
});
var count = 0;
function hasId(node, id) {
return node && node.attributes && node.attributes[0] === "id" && node.attributes[1] === id;
}
function dumpReasons(layer, compositingReasons) {
var node = nodesById[layer.nodeId];
if (hasId(node, "blending")) {
assert(
"<div id=\"blending\"> is composited due having CSS blending applied and composited descendants",
compositingReasons.blendingWithCompositedDescendants,
true);
} else if (hasId(node, "isolating")) {
assert(
"<div id=\"isolating\"> is composition due to isolating compositing descendants having CSS blending applied",
compositingReasons.isolatesCompositedBlendingDescendants,
true);
}
if (++count === layers.length)
ProtocolTest.completeTest();
};
layers.forEach(function (layer) {
runCommand({
command: "LayerTree.reasonsForCompositingLayer",
parameters: {"layerId": layer.layerId},
callback: function(result) {
dumpReasons(layer, result.compositingReasons);
}
});
});
};
function setChildNodes (messageObject) {
messageObject.params.nodes.forEach(function (node) {
nodes.push(node);
})
};
function step(test)
{
if (test.callback)
logTestName(test.name);
runCommand(test);
};
function logTestName(name)
{
ProtocolTest.log("\n=== " + name + " ===\n");
};
function runCommand(command)
{
InspectorProtocol.sendCommand(command.command, command.parameters, function(messageObject) {
InspectorProtocol.checkForError(messageObject);
if (command.name)
ProtocolTest.log("PASS");
if (command.callback)
command.callback(messageObject.result);
});
};
function assert(name, actual, expected)
{
if (expected === actual)
ProtocolTest.log("PASS: " + name + ".");
else
ProtocolTest.log("FAIL: " + name + ". Expected " + expected + " but got " + actual);
};
};
window.addEventListener("DOMContentLoaded", function()
{
runTest();
}, false);
</script>
<style type="text/css">
#isolating {
isolation: isolate;
}
#blending {
mix-blend-mode: difference;
}
#composited {
-webkit-transform: translateZ(0);
}
</style>
</head>
<body>
<div id="isolating">
<div id="blending">
<div id="composited"></div>
</div>
</div>
</body>
</html>