Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2014 The Chromium Authors. All rights reserved. | 2 * Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * @constructor | 8 * @constructor |
| 9 * @extends {WebInspector.Object} | 9 * @extends {WebInspector.Object} |
| 10 */ | 10 */ |
| 11 WebInspector.TargetManager = function() | 11 WebInspector.TargetManager = function() |
| 12 { | 12 { |
| 13 WebInspector.Object.call(this); | 13 WebInspector.Object.call(this); |
| 14 /** @type {!Array.<!WebInspector.Target>} */ | 14 /** @type {!Array.<!WebInspector.Target>} */ |
| 15 this._targets = []; | 15 this._targets = []; |
| 16 /** @type {!Array.<!WebInspector.TargetManager.Observer>} */ | 16 /** @type {!Array.<!WebInspector.TargetManager.Observer>} */ |
| 17 this._observers = []; | 17 this._observers = []; |
| 18 this._observerCapabiliesMaskSymbol = Symbol("observerCapabilitiesMask"); | 18 this._observerCapabiliesMaskSymbol = Symbol("observerCapabilitiesMask"); |
| 19 /** @type {!Object.<string, !Array.<{modelClass: !Function, thisObject: (!Ob ject|undefined), listener: function(!WebInspector.Event)}>>} */ | 19 /** @type {!Map<symbol, !Array<{modelClass: !Function, thisObject: (!Object| undefined), listener: function(!WebInspector.Event)}>>} */ |
|
lushnikov
2016/08/26 19:34:45
technically, this should be (symbol|string)
dgozman
2016/08/26 20:52:49
I hope we don't have strings anymore! Let's change
alph
2016/08/26 21:00:33
I'll keep it just symbol and make sure there are n
| |
| 20 this._modelListeners = {}; | 20 this._modelListeners = new Map(); |
| 21 this._isSuspended = false; | 21 this._isSuspended = false; |
| 22 } | 22 } |
| 23 | 23 |
| 24 /** @enum {symbol} */ | 24 /** @enum {symbol} */ |
| 25 WebInspector.TargetManager.Events = { | 25 WebInspector.TargetManager.Events = { |
| 26 InspectedURLChanged: Symbol("InspectedURLChanged"), | 26 InspectedURLChanged: Symbol("InspectedURLChanged"), |
| 27 MainFrameNavigated: Symbol("MainFrameNavigated"), | 27 MainFrameNavigated: Symbol("MainFrameNavigated"), |
| 28 Load: Symbol("Load"), | 28 Load: Symbol("Load"), |
| 29 PageReloadRequested: Symbol("PageReloadRequested"), | 29 PageReloadRequested: Symbol("PageReloadRequested"), |
| 30 WillReloadPage: Symbol("WillReloadPage"), | 30 WillReloadPage: Symbol("WillReloadPage"), |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 108 | 108 |
| 109 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(this._ targets[0]); | 109 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(this._ targets[0]); |
| 110 if (!resourceTreeModel) | 110 if (!resourceTreeModel) |
| 111 return; | 111 return; |
| 112 | 112 |
| 113 resourceTreeModel.reloadPage(bypassCache, injectedScript); | 113 resourceTreeModel.reloadPage(bypassCache, injectedScript); |
| 114 }, | 114 }, |
| 115 | 115 |
| 116 /** | 116 /** |
| 117 * @param {!Function} modelClass | 117 * @param {!Function} modelClass |
| 118 * @param {string} eventType | 118 * @param {symbol} eventType |
|
lushnikov
2016/08/26 19:34:45
(symbol|string) as well
alph
2016/08/26 21:00:34
ditto
| |
| 119 * @param {function(!WebInspector.Event)} listener | 119 * @param {function(!WebInspector.Event)} listener |
| 120 * @param {!Object=} thisObject | 120 * @param {!Object=} thisObject |
| 121 */ | 121 */ |
| 122 addModelListener: function(modelClass, eventType, listener, thisObject) | 122 addModelListener: function(modelClass, eventType, listener, thisObject) |
| 123 { | 123 { |
| 124 for (var i = 0; i < this._targets.length; ++i) { | 124 for (var i = 0; i < this._targets.length; ++i) { |
| 125 var model = this._targets[i].model(modelClass); | 125 var model = this._targets[i].model(modelClass); |
| 126 if (model) | 126 if (model) |
| 127 model.addEventListener(eventType, listener, thisObject); | 127 model.addEventListener(eventType, listener, thisObject); |
| 128 } | 128 } |
| 129 if (!this._modelListeners[eventType]) | 129 if (!this._modelListeners.has(eventType)) |
| 130 this._modelListeners[eventType] = []; | 130 this._modelListeners.set(eventType, []); |
| 131 this._modelListeners[eventType].push({ modelClass: modelClass, thisObjec t: thisObject, listener: listener }); | 131 this._modelListeners.get(eventType).push({ modelClass: modelClass, thisO bject: thisObject, listener: listener }); |
| 132 }, | 132 }, |
| 133 | 133 |
| 134 /** | 134 /** |
| 135 * @param {!Function} modelClass | 135 * @param {!Function} modelClass |
| 136 * @param {string} eventType | 136 * @param {symbol} eventType |
|
lushnikov
2016/08/26 19:34:45
ditto
alph
2016/08/26 21:00:34
ditto
| |
| 137 * @param {function(!WebInspector.Event)} listener | 137 * @param {function(!WebInspector.Event)} listener |
| 138 * @param {!Object=} thisObject | 138 * @param {!Object=} thisObject |
| 139 */ | 139 */ |
| 140 removeModelListener: function(modelClass, eventType, listener, thisObject) | 140 removeModelListener: function(modelClass, eventType, listener, thisObject) |
| 141 { | 141 { |
| 142 if (!this._modelListeners[eventType]) | 142 if (!this._modelListeners.has(eventType)) |
| 143 return; | 143 return; |
| 144 | 144 |
| 145 for (var i = 0; i < this._targets.length; ++i) { | 145 for (var i = 0; i < this._targets.length; ++i) { |
| 146 var model = this._targets[i].model(modelClass); | 146 var model = this._targets[i].model(modelClass); |
| 147 if (model) | 147 if (model) |
| 148 model.removeEventListener(eventType, listener, thisObject); | 148 model.removeEventListener(eventType, listener, thisObject); |
| 149 } | 149 } |
| 150 | 150 |
| 151 var listeners = this._modelListeners[eventType]; | 151 var listeners = this._modelListeners.get(eventType); |
| 152 for (var i = 0; i < listeners.length; ++i) { | 152 for (var i = 0; i < listeners.length; ++i) { |
| 153 if (listeners[i].modelClass === modelClass && listeners[i].listener === listener && listeners[i].thisObject === thisObject) | 153 if (listeners[i].modelClass === modelClass && listeners[i].listener === listener && listeners[i].thisObject === thisObject) |
| 154 listeners.splice(i--, 1); | 154 listeners.splice(i--, 1); |
| 155 } | 155 } |
| 156 if (!listeners.length) | 156 if (!listeners.length) |
| 157 delete this._modelListeners[eventType]; | 157 this._modelListeners.delete(eventType); |
| 158 }, | 158 }, |
| 159 | 159 |
| 160 /** | 160 /** |
| 161 * @param {!WebInspector.TargetManager.Observer} targetObserver | 161 * @param {!WebInspector.TargetManager.Observer} targetObserver |
| 162 * @param {number=} capabilitiesMask | 162 * @param {number=} capabilitiesMask |
| 163 */ | 163 */ |
| 164 observeTargets: function(targetObserver, capabilitiesMask) | 164 observeTargets: function(targetObserver, capabilitiesMask) |
| 165 { | 165 { |
| 166 if (this._observerCapabiliesMaskSymbol in targetObserver) | 166 if (this._observerCapabiliesMaskSymbol in targetObserver) |
| 167 throw new Error("Observer can only be registered once"); | 167 throw new Error("Observer can only be registered once"); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 250 setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events .MainFrameNavigated, WebInspector.TargetManager.Events.MainFrameNavigated), | 250 setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events .MainFrameNavigated, WebInspector.TargetManager.Events.MainFrameNavigated), |
| 251 setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events .Load, WebInspector.TargetManager.Events.Load), | 251 setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events .Load, WebInspector.TargetManager.Events.Load), |
| 252 setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events .PageReloadRequested, WebInspector.TargetManager.Events.PageReloadRequested), | 252 setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events .PageReloadRequested, WebInspector.TargetManager.Events.PageReloadRequested), |
| 253 setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events .WillReloadPage, WebInspector.TargetManager.Events.WillReloadPage) | 253 setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events .WillReloadPage, WebInspector.TargetManager.Events.WillReloadPage) |
| 254 ]; | 254 ]; |
| 255 } | 255 } |
| 256 var copy = this._observersForTarget(target); | 256 var copy = this._observersForTarget(target); |
| 257 for (var i = 0; i < copy.length; ++i) | 257 for (var i = 0; i < copy.length; ++i) |
| 258 copy[i].targetAdded(target); | 258 copy[i].targetAdded(target); |
| 259 | 259 |
| 260 for (var eventType in this._modelListeners) { | 260 for (var pair of this._modelListeners) { |
|
lushnikov
2016/08/26 19:34:45
nit: this probably never compiles - there are no t
alph
2016/08/26 21:00:34
yeah. it seems to treat them as having value type.
| |
| 261 var listeners = this._modelListeners[eventType]; | 261 var listeners = pair[1]; |
| 262 for (var i = 0; i < listeners.length; ++i) { | 262 for (var i = 0; i < listeners.length; ++i) { |
| 263 var model = target.model(listeners[i].modelClass); | 263 var model = target.model(listeners[i].modelClass); |
| 264 if (model) | 264 if (model) |
| 265 model.addEventListener(eventType, listeners[i].listener, lis teners[i].thisObject); | 265 model.addEventListener(pair[0], listeners[i].listener, liste ners[i].thisObject); |
| 266 } | 266 } |
| 267 } | 267 } |
| 268 | 268 |
| 269 /** | 269 /** |
| 270 * @param {!WebInspector.ResourceTreeModel.Events} sourceEvent | 270 * @param {!WebInspector.ResourceTreeModel.Events} sourceEvent |
| 271 * @param {!WebInspector.TargetManager.Events} targetEvent | 271 * @param {!WebInspector.TargetManager.Events} targetEvent |
| 272 * @return {!WebInspector.EventTarget.EventDescriptor} | 272 * @return {!WebInspector.EventTarget.EventDescriptor} |
| 273 * @this {WebInspector.TargetManager} | 273 * @this {WebInspector.TargetManager} |
| 274 */ | 274 */ |
| 275 function setupRedispatch(sourceEvent, targetEvent) | 275 function setupRedispatch(sourceEvent, targetEvent) |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 286 this._targets.remove(target); | 286 this._targets.remove(target); |
| 287 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target ); | 287 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target ); |
| 288 var treeModelListeners = resourceTreeModel && resourceTreeModel[WebInspe ctor.TargetManager._listenersSymbol]; | 288 var treeModelListeners = resourceTreeModel && resourceTreeModel[WebInspe ctor.TargetManager._listenersSymbol]; |
| 289 if (treeModelListeners) | 289 if (treeModelListeners) |
| 290 WebInspector.EventTarget.removeEventListeners(treeModelListeners); | 290 WebInspector.EventTarget.removeEventListeners(treeModelListeners); |
| 291 | 291 |
| 292 var copy = this._observersForTarget(target); | 292 var copy = this._observersForTarget(target); |
| 293 for (var i = 0; i < copy.length; ++i) | 293 for (var i = 0; i < copy.length; ++i) |
| 294 copy[i].targetRemoved(target); | 294 copy[i].targetRemoved(target); |
| 295 | 295 |
| 296 for (var eventType in this._modelListeners) { | 296 for (var pair of this._modelListeners) { |
| 297 var listeners = this._modelListeners[eventType]; | 297 var listeners = pair[1]; |
| 298 for (var i = 0; i < listeners.length; ++i) { | 298 for (var i = 0; i < listeners.length; ++i) { |
| 299 var model = target.model(listeners[i].modelClass); | 299 var model = target.model(listeners[i].modelClass); |
| 300 if (model) | 300 if (model) |
| 301 model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject); | 301 model.removeEventListener(pair[0], listeners[i].listener, li steners[i].thisObject); |
| 302 } | 302 } |
| 303 } | 303 } |
| 304 }, | 304 }, |
| 305 | 305 |
| 306 /** | 306 /** |
| 307 * @param {number=} capabilitiesMask | 307 * @param {number=} capabilitiesMask |
| 308 * @return {!Array.<!WebInspector.Target>} | 308 * @return {!Array.<!WebInspector.Target>} |
| 309 */ | 309 */ |
| 310 targets: function(capabilitiesMask) | 310 targets: function(capabilitiesMask) |
| 311 { | 311 { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 376 /** | 376 /** |
| 377 * @param {!WebInspector.Target} target | 377 * @param {!WebInspector.Target} target |
| 378 */ | 378 */ |
| 379 targetRemoved: function(target) { }, | 379 targetRemoved: function(target) { }, |
| 380 } | 380 } |
| 381 | 381 |
| 382 /** | 382 /** |
| 383 * @type {!WebInspector.TargetManager} | 383 * @type {!WebInspector.TargetManager} |
| 384 */ | 384 */ |
| 385 WebInspector.targetManager = new WebInspector.TargetManager(); | 385 WebInspector.targetManager = new WebInspector.TargetManager(); |
| OLD | NEW |