Modified: trunk/LayoutTests/ChangeLog (223913 => 223914)
--- trunk/LayoutTests/ChangeLog 2017-10-24 20:06:10 UTC (rev 223913)
+++ trunk/LayoutTests/ChangeLog 2017-10-24 20:11:35 UTC (rev 223914)
@@ -1,3 +1,13 @@
+2017-10-24 Ross Kirsling <ross.kirsl...@sony.com>
+
+ Web Inspector: Layer mutations should be purely based on layerId, not based on nodeId
+ https://bugs.webkit.org/show_bug.cgi?id=178554
+
+ Reviewed by Devin Rousso.
+
+ * inspector/layers/layer-tree-manager-expected.txt:
+ * inspector/layers/layer-tree-manager.html:
+
2017-10-24 Adrian Perez de Castro <ape...@igalia.com>
[GTK] Unskip layout tests editing/deleting/delete-emoji-1.html & editing/deleting/delete-emoji-1.html
Modified: trunk/LayoutTests/inspector/layers/layer-tree-manager-expected.txt (223913 => 223914)
--- trunk/LayoutTests/inspector/layers/layer-tree-manager-expected.txt 2017-10-24 20:06:10 UTC (rev 223913)
+++ trunk/LayoutTests/inspector/layers/layer-tree-manager-expected.txt 2017-10-24 20:11:35 UTC (rev 223914)
@@ -6,3 +6,8 @@
PASS: Returned array should include all layers.
PASS: Array elements should be Layer instances.
+-- Running test case: LayerTreeManager.layerTreeMutations.overlappingNodeIds
+PASS: Preserved layers should be correct.
+PASS: Added layers should be correct.
+PASS: Removed layers should be correct.
+
Modified: trunk/LayoutTests/inspector/layers/layer-tree-manager.html (223913 => 223914)
--- trunk/LayoutTests/inspector/layers/layer-tree-manager.html 2017-10-24 20:06:10 UTC (rev 223913)
+++ trunk/LayoutTests/inspector/layers/layer-tree-manager.html 2017-10-24 20:11:35 UTC (rev 223914)
@@ -9,7 +9,7 @@
suite.addTestCase({
name: "LayerTreeManager.layersForNode.root",
- description: "Calling the LayerTreeManager#layersForNode method with the root node should the full layer list.",
+ description: "Calling the LayerTreeManager#layersForNode method with the root node should return the full layer list.",
test(resolve, reject) {
WI.domTreeManager.requestDocument((node) => {
WI.layerTreeManager.layersForNode(node, (layers) => {
@@ -21,6 +21,31 @@
}
});
+ suite.addTestCase({
+ name: "LayerTreeManager.layerTreeMutations.overlappingNodeIds",
+ description: "The LayerTreeManager#layerTreeMutations method should provide a diff purely based on layerIds, not based on nodeIds.",
+ test(resolve, reject) {
+ let previousLayers = [
+ {layerId: "1", nodeId: 1},
+ {layerId: "2", nodeId: 1, isGeneratedContent: true, pseudoElementId: "10"},
+ {layerId: "3", nodeId: 1, isReflection: true},
+ {layerId: "4", nodeId: 2}
+ ];
+
+ let newLayers = [
+ {layerId: "4", nodeId: 2},
+ {layerId: "5", nodeId: 1},
+ {layerId: "6", nodeId: 3}
+ ];
+
+ let {preserved, additions, removals} = WI.layerTreeManager.layerTreeMutations(previousLayers, newLayers);
+ InspectorTest.expectShallowEqual(preserved, previousLayers.slice(3), "Preserved layers should be correct.");
+ InspectorTest.expectShallowEqual(additions, newLayers.slice(1), "Added layers should be correct.");
+ InspectorTest.expectShallowEqual(removals, previousLayers.slice(0, 3), "Removed layers should be correct.");
+ resolve();
+ }
+ });
+
suite.runTestCasesAndFinish();
}
</script>
Modified: trunk/Source/WebInspectorUI/ChangeLog (223913 => 223914)
--- trunk/Source/WebInspectorUI/ChangeLog 2017-10-24 20:06:10 UTC (rev 223913)
+++ trunk/Source/WebInspectorUI/ChangeLog 2017-10-24 20:11:35 UTC (rev 223914)
@@ -1,3 +1,17 @@
+2017-10-24 Ross Kirsling <ross.kirsl...@sony.com>
+
+ Web Inspector: Layer mutations should be purely based on layerId, not based on nodeId
+ https://bugs.webkit.org/show_bug.cgi?id=178554
+
+ Reviewed by Devin Rousso.
+
+ * UserInterface/Controllers/LayerTreeManager.js:
+ (WI.LayerTreeManager.prototype.layerTreeMutations):
+ Looking for special cases involving nodeIds is incorrect, as nodeIds need not be unique in the layer list (such
+ as when an element and a pseudo-element thereof each give rise to a layer). A layer object marked "preserved" in
+ this way shares no data with its predecessor, meaning that no consumer can act upon this so-called preservation.
+ A preserved layer should be nothing more or less than a recycled layerId (the thing that *is* unique).
+
2017-10-23 Nikita Vasilyev <nvasil...@apple.com>
Web Inspector: Styles Redesign: Inline widgets don't hide when starting editing by tabbing from property name
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/LayerTreeManager.js (223913 => 223914)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/LayerTreeManager.js 2017-10-24 20:06:10 UTC (rev 223913)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/LayerTreeManager.js 2017-10-24 20:11:35 UTC (rev 223914)
@@ -46,75 +46,29 @@
{
console.assert(this.supported);
- if (isEmptyObject(previousLayers)) {
- return {
- preserved: [],
- additions: newLayers,
- removals: []
- };
- }
+ if (isEmptyObject(previousLayers))
+ return {preserved: [], additions: newLayers, removals: []};
- function nodeIdForLayer(layer)
- {
- return layer.isGeneratedContent ? layer.pseudoElementId : layer.nodeId;
- }
+ let previousLayerIds = new Set;
+ let newLayerIds = new Set;
- var layerIdsInPreviousLayers = [];
- var nodeIdsInPreviousLayers = [];
- var nodeIdsForReflectionsInPreviousLayers = [];
+ let preserved = [];
+ let additions = [];
- previousLayers.forEach(function(layer) {
- layerIdsInPreviousLayers.push(layer.layerId);
+ for (let layer of previousLayers)
+ previousLayerIds.add(layer.layerId);
- var nodeId = nodeIdForLayer(layer);
- if (!nodeId)
- return;
+ for (let layer of newLayers) {
+ newLayerIds.add(layer.layerId);
- if (layer.isReflection)
- nodeIdsForReflectionsInPreviousLayers.push(nodeId);
- else
- nodeIdsInPreviousLayers.push(nodeId);
- });
-
- var preserved = [];
- var additions = [];
-
- var layerIdsInNewLayers = [];
- var nodeIdsInNewLayers = [];
- var nodeIdsForReflectionsInNewLayers = [];
-
- newLayers.forEach(function(layer) {
- layerIdsInNewLayers.push(layer.layerId);
-
- var existed = layerIdsInPreviousLayers.includes(layer.layerId);
-
- var nodeId = nodeIdForLayer(layer);
- if (!nodeId)
- return;
-
- if (layer.isReflection) {
- nodeIdsForReflectionsInNewLayers.push(nodeId);
- existed = existed || nodeIdsForReflectionsInPreviousLayers.includes(nodeId);
- } else {
- nodeIdsInNewLayers.push(nodeId);
- existed = existed || nodeIdsInPreviousLayers.includes(nodeId);
- }
-
- if (existed)
+ if (previousLayerIds.has(layer.layerId))
preserved.push(layer);
else
additions.push(layer);
- });
+ }
- var removals = previousLayers.filter(function(layer) {
- var nodeId = nodeIdForLayer(layer);
+ let removals = previousLayers.filter((layer) => !newLayerIds.has(layer.layerId));
- if (layer.isReflection)
- return !nodeIdsForReflectionsInNewLayers.includes(nodeId);
- else
- return !nodeIdsInNewLayers.includes(nodeId) && !layerIdsInNewLayers.includes(layer.layerId);
- });
-
return {preserved, additions, removals};
}