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

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

Issue 1104163003: Devtools: [ElementsPanel] Add dom listeners in sidebars (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@move-force-state
Patch Set: Address comments Created 5 years, 7 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/elements/StylesSidebarPane.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 7200bb47b76b9b76449128b9f959c681aae20a35..0f4619faab475087dc2bbc7f73188d7bb15215fa 100644
--- a/Source/devtools/front_end/sdk/DOMModel.js
+++ b/Source/devtools/front_end/sdk/DOMModel.js
@@ -1076,6 +1076,7 @@ WebInspector.DOMModel.Events = {
AttrModified: "AttrModified",
AttrRemoved: "AttrRemoved",
CharacterDataModified: "CharacterDataModified",
+ DOMMutated: "DOMMutated",
NodeInserted: "NodeInserted",
NodeInspected: "NodeInspected",
NodeRemoved: "NodeRemoved",
@@ -1126,6 +1127,27 @@ WebInspector.DOMModel.cancelSearch = function()
}
WebInspector.DOMModel.prototype = {
+ _scheduleMutationEvent: function()
+ {
+ if (!this.hasEventListeners(WebInspector.DOMModel.Events.DOMMutated))
+ return;
+
+ this._lastMutationId = (this._lastMutationId || 0) + 1;
+ Promise.resolve().then(callObserve.bind(this, this._lastMutationId));
+
+ /**
+ * @this {WebInspector.DOMModel}
+ * @param {number} mutationId
+ */
+ function callObserve(mutationId)
+ {
+ if (!this.hasEventListeners(WebInspector.DOMModel.Events.DOMMutated) || this._lastMutationId !== mutationId)
+ return;
+
+ this.dispatchEventToListeners(WebInspector.DOMModel.Events.DOMMutated);
+ }
+ },
+
/**
* @param {function(!WebInspector.DOMDocument)=} callback
*/
@@ -1286,6 +1308,7 @@ WebInspector.DOMModel.prototype = {
node._setAttribute(name, value);
this.dispatchEventToListeners(WebInspector.DOMModel.Events.AttrModified, { node: node, name: name });
+ this._scheduleMutationEvent();
},
/**
@@ -1299,6 +1322,7 @@ WebInspector.DOMModel.prototype = {
return;
node._removeAttribute(name);
this.dispatchEventToListeners(WebInspector.DOMModel.Events.AttrRemoved, { node: node, name: name });
+ this._scheduleMutationEvent();
},
/**
@@ -1329,8 +1353,10 @@ WebInspector.DOMModel.prototype = {
}
var node = this._idToDOMNode[nodeId];
if (node) {
- if (node._setAttributesPayload(attributes))
+ if (node._setAttributesPayload(attributes)) {
this.dispatchEventToListeners(WebInspector.DOMModel.Events.AttrModified, { node: node, name: "style" });
+ this._scheduleMutationEvent();
+ }
}
}
@@ -1352,6 +1378,7 @@ WebInspector.DOMModel.prototype = {
var node = this._idToDOMNode[nodeId];
node._nodeValue = newValue;
this.dispatchEventToListeners(WebInspector.DOMModel.Events.CharacterDataModified, node);
+ this._scheduleMutationEvent();
},
/**
@@ -1416,6 +1443,7 @@ WebInspector.DOMModel.prototype = {
var node = this._idToDOMNode[nodeId];
node._childNodeCount = newValue;
this.dispatchEventToListeners(WebInspector.DOMModel.Events.ChildNodeCountUpdated, node);
+ this._scheduleMutationEvent();
},
/**
@@ -1430,6 +1458,7 @@ WebInspector.DOMModel.prototype = {
var node = parent._insertChild(prev, payload);
this._idToDOMNode[node.id] = node;
this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeInserted, node);
+ this._scheduleMutationEvent();
},
/**
@@ -1443,6 +1472,7 @@ WebInspector.DOMModel.prototype = {
parent._removeChild(node);
this._unbind(node);
this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeRemoved, {node: node, parent: parent});
+ this._scheduleMutationEvent();
},
/**
@@ -1459,6 +1489,7 @@ WebInspector.DOMModel.prototype = {
this._idToDOMNode[node.id] = node;
host._shadowRoots.unshift(node);
this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeInserted, node);
+ this._scheduleMutationEvent();
},
/**
@@ -1476,6 +1507,7 @@ WebInspector.DOMModel.prototype = {
host._removeChild(root);
this._unbind(root);
this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeRemoved, {node: root, parent: host});
+ this._scheduleMutationEvent();
},
/**
@@ -1493,6 +1525,7 @@ WebInspector.DOMModel.prototype = {
console.assert(!parent._pseudoElements.get(node.pseudoType()));
parent._pseudoElements.set(node.pseudoType(), node);
this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeInserted, node);
+ this._scheduleMutationEvent();
},
/**
@@ -1510,6 +1543,7 @@ WebInspector.DOMModel.prototype = {
parent._removeChild(pseudoElement);
this._unbind(pseudoElement);
this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeRemoved, {node: pseudoElement, parent: parent});
+ this._scheduleMutationEvent();
},
/**
@@ -1523,6 +1557,7 @@ WebInspector.DOMModel.prototype = {
return;
insertionPoint._setDistributedNodePayloads(distributedNodes);
this.dispatchEventToListeners(WebInspector.DOMModel.Events.DistributedNodesChanged, insertionPoint);
+ this._scheduleMutationEvent();
},
/**
« no previous file with comments | « Source/devtools/front_end/elements/StylesSidebarPane.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698