Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @constructor | 6 * @constructor |
| 7 * @extends {WebInspector.SidebarPane} | 7 * @extends {WebInspector.SidebarPane} |
| 8 * @param {string} title | 8 * @param {string} title |
| 9 */ | 9 */ |
| 10 WebInspector.ElementsSidebarPane = function(title) | 10 WebInspector.ElementsSidebarPane = function(title) |
| 11 { | 11 { |
| 12 WebInspector.SidebarPane.call(this, title); | 12 WebInspector.SidebarPane.call(this, title); |
| 13 this._node = null; | 13 this._computedStyleModel = new WebInspector.ComputedStyleModel(); |
|
lushnikov
2016/07/14 00:58:15
Looks like this will result in re-requesting compu
pfeldman
2016/07/14 17:26:12
Not unless you call fetchComputedStyle on it.
| |
| 14 this._updateController = new WebInspector.ElementsSidebarPane._UpdateControl ler(this, this.doUpdate.bind(this)); | 14 this._computedStyleModel.addEventListener(WebInspector.ComputedStyleModel.Ev ents.ComputedStyleChanged, this.onCSSModelChanged, this); |
| 15 WebInspector.context.addFlavorChangeListener(WebInspector.DOMNode, this._nod eChanged, this); | 15 |
| 16 this._updateThrottler = new WebInspector.Throttler(100); | |
| 17 this._updateWhenVisible = false; | |
| 16 } | 18 } |
| 17 | 19 |
| 18 WebInspector.ElementsSidebarPane.prototype = { | 20 WebInspector.ElementsSidebarPane.prototype = { |
| 19 /** | 21 /** |
| 20 * @return {?WebInspector.DOMNode} | 22 * @return {?WebInspector.DOMNode} |
| 21 */ | 23 */ |
| 22 node: function() | 24 node: function() |
| 23 { | 25 { |
| 24 return this._node; | 26 return this._computedStyleModel.node(); |
| 25 }, | 27 }, |
| 26 | 28 |
| 27 /** | 29 /** |
| 28 * @return {?WebInspector.CSSModel} | 30 * @return {?WebInspector.CSSModel} |
| 29 */ | 31 */ |
| 30 cssModel: function() | 32 cssModel: function() |
| 31 { | 33 { |
| 32 return this._cssModel && this._cssModel.isEnabled() ? this._cssModel : n ull; | 34 return this._computedStyleModel.cssModel(); |
| 33 }, | 35 }, |
| 34 | 36 |
| 35 /** | 37 /** |
| 36 * @param {!WebInspector.Event} event | |
| 37 */ | |
| 38 _nodeChanged: function(event) | |
| 39 { | |
| 40 this.setNode(/** @type {?WebInspector.DOMNode} */ (event.data)); | |
| 41 }, | |
| 42 | |
| 43 /** | |
| 44 * @param {?WebInspector.DOMNode} node | |
| 45 */ | |
| 46 setNode: function(node) | |
| 47 { | |
| 48 this._node = node; | |
| 49 this._updateTarget(node ? node.target() : null); | |
| 50 this.update(); | |
| 51 }, | |
| 52 | |
| 53 /** | |
| 54 * @protected | 38 * @protected |
| 55 * @return {!Promise.<?>} | 39 * @return {!Promise.<?>} |
| 56 */ | 40 */ |
| 57 doUpdate: function() | 41 doUpdate: function() |
| 58 { | 42 { |
| 59 return Promise.resolve(); | 43 return Promise.resolve(); |
| 60 }, | 44 }, |
| 61 | 45 |
| 62 update: function() | 46 update: function() |
| 63 { | 47 { |
| 64 this._updateController.update(); | 48 this._updateWhenVisible = !this.isShowing(); |
| 49 if (this._updateWhenVisible) | |
| 50 return; | |
| 51 this._updateThrottler.schedule(innerUpdate.bind(this)); | |
| 52 | |
| 53 /** | |
| 54 * @return {!Promise.<?>} | |
| 55 * @this {WebInspector.ElementsSidebarPane} | |
| 56 */ | |
| 57 function innerUpdate() | |
| 58 { | |
| 59 return this.isShowing() ? this.doUpdate() : Promise.resolve(); | |
| 60 } | |
| 65 }, | 61 }, |
| 66 | 62 |
| 67 wasShown: function() | 63 wasShown: function() |
| 68 { | 64 { |
| 69 WebInspector.SidebarPane.prototype.wasShown.call(this); | 65 WebInspector.SidebarPane.prototype.wasShown.call(this); |
| 70 this._updateController.viewWasShown(); | 66 if (this._updateWhenVisible) |
| 67 this.update(); | |
| 71 }, | 68 }, |
| 72 | 69 |
| 73 /** | 70 /** |
| 74 * @param {?WebInspector.Target} target | |
| 75 */ | |
| 76 _updateTarget: function(target) | |
| 77 { | |
| 78 if (this._target === target) | |
| 79 return; | |
| 80 if (this._targetEvents) { | |
| 81 WebInspector.EventTarget.removeEventListeners(this._targetEvents); | |
| 82 this._targetEvents = null; | |
| 83 } | |
| 84 this._target = target; | |
| 85 | |
| 86 var domModel = null; | |
| 87 var resourceTreeModel = null; | |
| 88 if (target) { | |
| 89 this._cssModel = WebInspector.CSSModel.fromTarget(target); | |
| 90 domModel = WebInspector.DOMModel.fromTarget(target); | |
| 91 resourceTreeModel = target.resourceTreeModel; | |
| 92 } | |
| 93 | |
| 94 if (this._cssModel && domModel && resourceTreeModel) { | |
| 95 this._targetEvents = [ | |
| 96 this._cssModel.addEventListener(WebInspector.CSSModel.Events.Sty leSheetAdded, this.onCSSModelChanged, this), | |
| 97 this._cssModel.addEventListener(WebInspector.CSSModel.Events.Sty leSheetRemoved, this.onCSSModelChanged, this), | |
| 98 this._cssModel.addEventListener(WebInspector.CSSModel.Events.Sty leSheetChanged, this.onCSSModelChanged, this), | |
| 99 this._cssModel.addEventListener(WebInspector.CSSModel.Events.Med iaQueryResultChanged, this.onCSSModelChanged, this), | |
| 100 this._cssModel.addEventListener(WebInspector.CSSModel.Events.Pse udoStateForced, this.onCSSModelChanged, this), | |
| 101 this._cssModel.addEventListener(WebInspector.CSSModel.Events.Mod elWasEnabled, this.onCSSModelChanged, this), | |
| 102 domModel.addEventListener(WebInspector.DOMModel.Events.DOMMutate d, this._domModelChanged, this), | |
| 103 resourceTreeModel.addEventListener(WebInspector.ResourceTreeMode l.EventTypes.FrameResized, this._onFrameResized, this), | |
| 104 ]; | |
| 105 } | |
| 106 }, | |
| 107 | |
| 108 /** | |
| 109 * @param {!WebInspector.Event} event | |
| 110 */ | |
| 111 _onFrameResized: function(event) | |
| 112 { | |
| 113 /** | |
| 114 * @this {WebInspector.ElementsSidebarPane} | |
| 115 */ | |
| 116 function refreshContents() | |
| 117 { | |
| 118 this.onFrameResizedThrottled(); | |
| 119 delete this._frameResizedTimer; | |
| 120 } | |
| 121 | |
| 122 if (this._frameResizedTimer) | |
| 123 clearTimeout(this._frameResizedTimer); | |
| 124 | |
| 125 this._frameResizedTimer = setTimeout(refreshContents.bind(this), 100); | |
| 126 }, | |
| 127 | |
| 128 /** | |
| 129 * @param {!WebInspector.Event} event | |
| 130 */ | |
| 131 _domModelChanged: function(event) | |
| 132 { | |
| 133 var node = /** @type {!WebInspector.DOMNode} */ (event.data); | |
| 134 this.onDOMModelChanged(node) | |
| 135 }, | |
| 136 | |
| 137 /** | |
| 138 * @param {!WebInspector.DOMNode} node | |
| 139 */ | |
| 140 onDOMModelChanged: function(node) { }, | |
| 141 | |
| 142 /** | |
| 143 * @param {!WebInspector.Event} event | 71 * @param {!WebInspector.Event} event |
| 144 */ | 72 */ |
| 145 onCSSModelChanged: function(event) { }, | 73 onCSSModelChanged: function(event) { }, |
| 146 | 74 |
| 147 onFrameResizedThrottled: function() { }, | |
| 148 | |
| 149 __proto__: WebInspector.SidebarPane.prototype | 75 __proto__: WebInspector.SidebarPane.prototype |
| 150 } | 76 } |
| 151 | |
| 152 /** | |
| 153 * @constructor | |
| 154 * @param {!WebInspector.Widget} view | |
| 155 * @param {function():!Promise.<?>} doUpdate | |
| 156 */ | |
| 157 WebInspector.ElementsSidebarPane._UpdateController = function(view, doUpdate) | |
| 158 { | |
| 159 this._view = view; | |
| 160 this._updateThrottler = new WebInspector.Throttler(100); | |
| 161 this._updateWhenVisible = false; | |
| 162 this._doUpdate = doUpdate; | |
| 163 } | |
| 164 | |
| 165 WebInspector.ElementsSidebarPane._UpdateController.prototype = { | |
| 166 update: function() | |
| 167 { | |
| 168 this._updateWhenVisible = !this._view.isShowing(); | |
| 169 if (this._updateWhenVisible) | |
| 170 return; | |
| 171 this._updateThrottler.schedule(innerUpdate.bind(this)); | |
| 172 | |
| 173 /** | |
| 174 * @this {WebInspector.ElementsSidebarPane._UpdateController} | |
| 175 * @return {!Promise.<?>} | |
| 176 */ | |
| 177 function innerUpdate() | |
| 178 { | |
| 179 return this._view.isShowing() ? this._doUpdate.call(null) : Promise. resolve(); | |
| 180 } | |
| 181 }, | |
| 182 | |
| 183 viewWasShown: function() | |
| 184 { | |
| 185 if (this._updateWhenVisible) | |
| 186 this.update(); | |
| 187 } | |
| 188 } | |
| OLD | NEW |