Index: Source/devtools/front_end/MetricsSidebarPane.js |
diff --git a/Source/devtools/front_end/MetricsSidebarPane.js b/Source/devtools/front_end/MetricsSidebarPane.js |
index 9da24e8007a933643e4ddc7092bff03699cd04a4..85f3b7304e4651d49eef448a1680e4f7fa8c6d9e 100644 |
--- a/Source/devtools/front_end/MetricsSidebarPane.js |
+++ b/Source/devtools/front_end/MetricsSidebarPane.js |
@@ -33,12 +33,6 @@ |
WebInspector.MetricsSidebarPane = function() |
{ |
WebInspector.SidebarPane.call(this, WebInspector.UIString("Metrics")); |
- |
- WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetChanged, this._styleSheetOrMediaQueryResultChanged, this); |
- WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged, this._styleSheetOrMediaQueryResultChanged, this); |
- WebInspector.domModel.addEventListener(WebInspector.DOMModel.Events.AttrModified, this._attributesUpdated, this); |
- WebInspector.domModel.addEventListener(WebInspector.DOMModel.Events.AttrRemoved, this._attributesUpdated, this); |
- WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameResized, this._frameResized, this); |
} |
WebInspector.MetricsSidebarPane.prototype = { |
@@ -47,11 +41,39 @@ WebInspector.MetricsSidebarPane.prototype = { |
*/ |
update: function(node) |
{ |
- if (node) |
- this.node = node; |
+ if (!node || this._node === node) { |
+ this._innerUpdate(); |
+ return; |
+ } |
+ |
+ this._node = node; |
+ this._updateTarget(node.target()); |
this._innerUpdate(); |
}, |
+ /** |
+ * @param {!WebInspector.Target} target |
+ */ |
+ _updateTarget: function(target) |
+ { |
+ if (this._target === target) |
+ return; |
+ |
+ if (this._target) { |
+ this._target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.StyleSheetChanged, this._styleSheetOrMediaQueryResultChanged, this); |
+ this._target.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged, this._styleSheetOrMediaQueryResultChanged, this); |
+ this._target.domModel.removeEventListener(WebInspector.DOMModel.Events.AttrModified, this._attributesUpdated, this); |
+ this._target.domModel.removeEventListener(WebInspector.DOMModel.Events.AttrRemoved, this._attributesUpdated, this); |
+ this._target.resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameResized, this._frameResized, this); |
+ } |
+ this._target = target; |
+ this._target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetChanged, this._styleSheetOrMediaQueryResultChanged, this); |
+ this._target.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged, this._styleSheetOrMediaQueryResultChanged, this); |
+ this._target.domModel.addEventListener(WebInspector.DOMModel.Events.AttrModified, this._attributesUpdated, this); |
+ this._target.domModel.addEventListener(WebInspector.DOMModel.Events.AttrRemoved, this._attributesUpdated, this); |
+ this._target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameResized, this._frameResized, this); |
+ }, |
+ |
_innerUpdate: function() |
{ |
// "style" attribute might have changed. Update metrics unless they are being edited |
@@ -60,7 +82,7 @@ WebInspector.MetricsSidebarPane.prototype = { |
return; |
// FIXME: avoid updates of a collapsed pane. |
- var node = this.node; |
+ var node = this._node; |
if (!node || node.nodeType() !== Node.ELEMENT_NODE) { |
this.bodyElement.removeChildren(); |
@@ -73,11 +95,11 @@ WebInspector.MetricsSidebarPane.prototype = { |
*/ |
function callback(style) |
{ |
- if (!style || this.node !== node) |
+ if (!style || this._node !== node) |
return; |
this._updateMetrics(style); |
} |
- WebInspector.cssModel.getComputedStyleAsync(node.id, callback.bind(this)); |
+ this._target.cssModel.getComputedStyleAsync(node.id, callback.bind(this)); |
/** |
* @param {?WebInspector.CSSStyleDeclaration} style |
@@ -85,11 +107,11 @@ WebInspector.MetricsSidebarPane.prototype = { |
*/ |
function inlineStyleCallback(style) |
{ |
- if (!style || this.node !== node) |
+ if (!style || this._node !== node) |
return; |
this.inlineStyle = style; |
} |
- WebInspector.cssModel.getInlineStylesAsync(node.id, inlineStyleCallback.bind(this)); |
+ this._target.cssModel.getInlineStylesAsync(node.id, inlineStyleCallback.bind(this)); |
}, |
_styleSheetOrMediaQueryResultChanged: function() |
@@ -116,7 +138,7 @@ WebInspector.MetricsSidebarPane.prototype = { |
_attributesUpdated: function(event) |
{ |
- if (this.node !== event.data.node) |
+ if (this._node !== event.data.node) |
return; |
this._innerUpdate(); |
@@ -140,19 +162,19 @@ WebInspector.MetricsSidebarPane.prototype = { |
_highlightDOMNode: function(showHighlight, mode, event) |
{ |
event.consume(); |
- if (showHighlight && this.node) { |
+ if (showHighlight && this._node) { |
if (this._highlightMode === mode) |
return; |
this._highlightMode = mode; |
- this.node.highlight(mode); |
+ this._node.highlight(mode); |
} else { |
delete this._highlightMode; |
- WebInspector.domModel.hideDOMNodeHighlight(); |
+ this._target.domModel.hideDOMNodeHighlight(); |
} |
for (var i = 0; this._boxElements && i < this._boxElements.length; ++i) { |
var element = this._boxElements[i]; |
- if (!this.node || mode === "all" || element._name === mode) |
+ if (!this._node || mode === "all" || element._name === mode) |
element.style.backgroundColor = element._backgroundColor; |
else |
element.style.backgroundColor = ""; |
@@ -433,7 +455,7 @@ WebInspector.MetricsSidebarPane.prototype = { |
self.originalPropertyData = self.previousPropertyDataCandidate; |
if (typeof self._highlightMode !== "undefined") |
- self.node.highlight(self._highlightMode); |
+ self._node.highlight(self._highlightMode); |
if (commitEditor) { |
self.dispatchEventToListeners("metrics edited"); |