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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js

Issue 2284663003: DevTools: Use a Map for modelListeners in TargetManager (Closed)
Patch Set: Created 4 years, 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698