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 |