Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(922)

Unified Diff: Source/devtools/front_end/sdk/DOMModel.js

Issue 1273313002: DevTools: introduce dom markers, decorate hidden, forced state and breakpoint elements using marker… (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: for landing Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/front_end/sdk/CSSStyleModel.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/sdk/DOMModel.js
diff --git a/Source/devtools/front_end/sdk/DOMModel.js b/Source/devtools/front_end/sdk/DOMModel.js
index 75735c42f5898e2011f62887d0f98e7f7a59f65a..7300b5c17c11d2c75b75be656989012567d2d898 100644
--- a/Source/devtools/front_end/sdk/DOMModel.js
+++ b/Source/devtools/front_end/sdk/DOMModel.js
@@ -62,8 +62,8 @@ WebInspector.DOMNode = function(domModel, doc, isInShadowTree, payload)
if (payload.attributes)
this._setAttributesPayload(payload.attributes);
- this._userProperties = {};
- this._descendantUserPropertyCounters = {};
+ this._markers = {};
+ this._subtreeMarkerCount = 0;
this._childNodeCount = payload.childNodeCount || 0;
this._children = null;
@@ -649,7 +649,9 @@ WebInspector.DOMNode.prototype = {
}
}
node.parentNode = null;
- node._updateChildUserPropertyCountsOnRemoval(this);
+ this._subtreeMarkerCount -= node._subtreeMarkerCount;
+ if (node._subtreeMarkerCount)
+ this._domModel.dispatchEventToListeners(WebInspector.DOMModel.Events.MarkersChanged, this);
this._renumber();
},
@@ -784,57 +786,31 @@ WebInspector.DOMNode.prototype = {
return !!this.ownerDocument && !!this.ownerDocument.xmlVersion;
},
- _updateChildUserPropertyCountsOnRemoval: function(parentNode)
- {
- var result = {};
- if (this._userProperties) {
- for (var name in this._userProperties)
- result[name] = (result[name] || 0) + 1;
- }
-
- if (this._descendantUserPropertyCounters) {
- for (var name in this._descendantUserPropertyCounters) {
- var counter = this._descendantUserPropertyCounters[name];
- result[name] = (result[name] || 0) + counter;
- }
- }
-
- for (var name in result)
- parentNode._updateDescendantUserPropertyCount(name, -result[name]);
- },
-
- _updateDescendantUserPropertyCount: function(name, delta)
- {
- if (!this._descendantUserPropertyCounters.hasOwnProperty(name))
- this._descendantUserPropertyCounters[name] = 0;
- this._descendantUserPropertyCounters[name] += delta;
- if (!this._descendantUserPropertyCounters[name])
- delete this._descendantUserPropertyCounters[name];
- if (this.parentNode)
- this.parentNode._updateDescendantUserPropertyCount(name, delta);
- },
-
- setUserProperty: function(name, value)
+ /**
+ * @param {string} name
+ * @param {?*} value
+ */
+ setMarker: function(name, value)
{
if (value === null) {
- this.removeUserProperty(name);
- return;
- }
-
- if (this.parentNode && !this._userProperties.hasOwnProperty(name))
- this.parentNode._updateDescendantUserPropertyCount(name, 1);
-
- this._userProperties[name] = value;
- },
+ if (!this._markers.hasOwnProperty(name))
+ return;
- removeUserProperty: function(name)
- {
- if (!this._userProperties.hasOwnProperty(name))
+ delete this._markers[name];
+ for (var node = this; node; node = node.parentNode)
+ --node._subtreeMarkerCount;
+ for (var node = this; node; node = node.parentNode)
+ this._domModel.dispatchEventToListeners(WebInspector.DOMModel.Events.MarkersChanged, node);
return;
+ }
- delete this._userProperties[name];
- if (this.parentNode)
- this.parentNode._updateDescendantUserPropertyCount(name, -1);
+ if (this.parentNode && !this._markers.hasOwnProperty(name)) {
+ for (var node = this; node; node = node.parentNode)
+ ++node._subtreeMarkerCount;
+ }
+ this._markers[name] = value;
+ for (var node = this; node; node = node.parentNode)
+ this._domModel.dispatchEventToListeners(WebInspector.DOMModel.Events.MarkersChanged, node);
},
/**
@@ -842,18 +818,39 @@ WebInspector.DOMNode.prototype = {
* @return {?T}
* @template T
*/
- getUserProperty: function(name)
+ marker: function(name)
{
- return (this._userProperties && this._userProperties[name]) || null;
+ return this._markers[name] || null;
},
/**
- * @param {string} name
- * @return {number}
+ * @return {!Array<string>}
+ */
+ markers: function()
+ {
+ return Object.values(this._markers);
+ },
+
+ /**
+ * @param {function(!WebInspector.DOMNode, string)} visitor
*/
- descendantUserPropertyCount: function(name)
+ traverseMarkers: function(visitor)
{
- return this._descendantUserPropertyCounters && this._descendantUserPropertyCounters[name] ? this._descendantUserPropertyCounters[name] : 0;
+ /**
+ * @param {!WebInspector.DOMNode} node
+ */
+ function traverse(node)
+ {
+ if (!node._subtreeMarkerCount)
+ return;
+ for (var marker in node._markers)
+ visitor(node, marker);
+ if (!node._children)
+ return;
+ for (var child of node._children)
+ traverse(child);
+ }
+ traverse(this);
},
/**
@@ -1086,7 +1083,8 @@ WebInspector.DOMModel.Events = {
UndoRedoCompleted: "UndoRedoCompleted",
DistributedNodesChanged: "DistributedNodesChanged",
ModelSuspended: "ModelSuspended",
- InspectModeWillBeToggled: "InspectModeWillBeToggled"
+ InspectModeWillBeToggled: "InspectModeWillBeToggled",
+ MarkersChanged: "MarkersChanged"
}
« no previous file with comments | « Source/devtools/front_end/sdk/CSSStyleModel.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698