blob: ceb2b31c3c43b969368a1d2d129e2cc9fb6faa63 [file] [log] [blame]
(async function(testRunner) {
var {page, session, dp} = await testRunner.startURL('../resources/get-layers.html', 'Tests LayerTree domain reporting layers.');
function layerMutations(oldLayers, newLayers) {
var oldLayerIds = oldLayers.map(layer => layer.layerId);
var newLayerIds = newLayers.map(layer => layer.layerId);
return {
additions: newLayers.filter(layer => oldLayerIds.indexOf(layer.layerId) === -1),
removals: oldLayers.filter(layer => newLayerIds.indexOf(layer.layerId) === -1)
};
}
function attributesFromArray(attributes) {
var map = new Map();
for (var i = 0, count = attributes.length; i < count; i += 2)
map.set(attributes[i], attributes[i + 1]);
return map;
}
function dumpLayers(layers) {
function replacer(key, value) {
if (['layerId', 'parentLayerId', 'backendNodeId', 'paintCount', 'nearestLayerShiftingContainingBlock'].indexOf(key) >= 0)
return typeof(value);
// some values differ based on port, but the ones we most
// care about will always be less or equal 200.
if ((key === 'width' || key === 'height') && value > 200)
return typeof(value);
return value;
}
// Keep 'internal' layers out for better stability.
layers = layers.filter(layer => !!layer.backendNodeId);
testRunner.log('\n' + JSON.stringify(layers, replacer, ' '));
}
await dp.DOM.getDocument();
dp.LayerTree.enable();
var initialLayers = (await dp.LayerTree.onceLayerTreeDidChange()).params.layers;
dp.Runtime.evaluate({expression: 'addCompositedLayer()'});
var modifiedLayers = (await dp.LayerTree.onceLayerTreeDidChange()).params.layers;
var mutations = layerMutations(initialLayers, modifiedLayers);
var newLayer = mutations.additions[0];
var nodeResponse = await dp.DOM.pushNodesByBackendIdsToFrontend({backendNodeIds: [newLayer.backendNodeId]});
var attributesResponse = await dp.DOM.getAttributes({nodeId: nodeResponse.result.nodeIds[0]});
var attributes = attributesFromArray(attributesResponse.result.attributes);
if (attributes.get('id') !== 'last-element')
testRunner.log('FAIL: Did not obtain the expected element for the last inserted layer.');
dumpLayers(initialLayers);
dumpLayers(modifiedLayers);
testRunner.log('DONE!');
testRunner.completeTest();
})