Title: [223914] trunk
Revision
223914
Author
commit-qu...@webkit.org
Date
2017-10-24 13:11:35 -0700 (Tue, 24 Oct 2017)

Log Message

Web Inspector: Layer mutations should be purely based on layerId, not based on nodeId
https://bugs.webkit.org/show_bug.cgi?id=178554

Patch by Ross Kirsling <ross.kirsl...@sony.com> on 2017-10-24
Reviewed by Devin Rousso.

Source/WebInspectorUI:

* 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).

LayoutTests:

* inspector/layers/layer-tree-manager-expected.txt:
* inspector/layers/layer-tree-manager.html:

Modified Paths

Diff

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};
     }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to