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

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

Issue 2137773002: [DevTools] Replace the target type with capabilities (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing the code review comments Created 4 years, 5 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
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._observerTypeSymbol = Symbol("observerType"); 18 this._observerCapabiliesMaskSymbol = Symbol("observerCapabilitiesMask");
19 /** @type {!Object.<string, !Array.<{modelClass: !Function, thisObject: (!Ob ject|undefined), listener: function(!WebInspector.Event)}>>} */ 19 /** @type {!Object.<string, !Array.<{modelClass: !Function, thisObject: (!Ob ject|undefined), listener: function(!WebInspector.Event)}>>} */
20 this._modelListeners = {}; 20 this._modelListeners = {};
21 this._isSuspended = false; 21 this._isSuspended = false;
22 } 22 }
23 23
24 WebInspector.TargetManager.Events = { 24 WebInspector.TargetManager.Events = {
25 InspectedURLChanged: "InspectedURLChanged", 25 InspectedURLChanged: "InspectedURLChanged",
26 MainFrameNavigated: "MainFrameNavigated", 26 MainFrameNavigated: "MainFrameNavigated",
27 Load: "Load", 27 Load: "Load",
28 PageReloadRequested: "PageReloadRequested", 28 PageReloadRequested: "PageReloadRequested",
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 for (var i = 0; i < listeners.length; ++i) { 156 for (var i = 0; i < listeners.length; ++i) {
157 if (listeners[i].modelClass === modelClass && listeners[i].listener === listener && listeners[i].thisObject === thisObject) 157 if (listeners[i].modelClass === modelClass && listeners[i].listener === listener && listeners[i].thisObject === thisObject)
158 listeners.splice(i--, 1); 158 listeners.splice(i--, 1);
159 } 159 }
160 if (!listeners.length) 160 if (!listeners.length)
161 delete this._modelListeners[eventType]; 161 delete this._modelListeners[eventType];
162 }, 162 },
163 163
164 /** 164 /**
165 * @param {!WebInspector.TargetManager.Observer} targetObserver 165 * @param {!WebInspector.TargetManager.Observer} targetObserver
166 * @param {number=} type 166 * @param {number=} capabilitiesMask
167 */ 167 */
168 observeTargets: function(targetObserver, type) 168 observeTargets: function(targetObserver, capabilitiesMask)
169 { 169 {
170 if (this._observerTypeSymbol in targetObserver) 170 if (this._observerCapabiliesMaskSymbol in targetObserver)
171 throw new Error("Observer can only be registered once"); 171 throw new Error("Observer can only be registered once");
172 targetObserver[this._observerTypeSymbol] = type || 0x7fff; 172 targetObserver[this._observerCapabiliesMaskSymbol] = capabilitiesMask || 0;
173 this.targets(type).forEach(targetObserver.targetAdded.bind(targetObserve r)); 173 this.targets(capabilitiesMask).forEach(targetObserver.targetAdded.bind(t argetObserver));
174 this._observers.push(targetObserver); 174 this._observers.push(targetObserver);
175 }, 175 },
176 176
177 /** 177 /**
178 * @param {!WebInspector.TargetManager.Observer} targetObserver 178 * @param {!WebInspector.TargetManager.Observer} targetObserver
179 */ 179 */
180 unobserveTargets: function(targetObserver) 180 unobserveTargets: function(targetObserver)
181 { 181 {
182 delete targetObserver[this._observerTypeSymbol]; 182 delete targetObserver[this._observerCapabiliesMaskSymbol];
183 this._observers.remove(targetObserver); 183 this._observers.remove(targetObserver);
184 }, 184 },
185 185
186 /** 186 /**
187 * @param {string} name 187 * @param {string} name
188 * @param {number} type 188 * @param {number} capabilitiesMask
189 * @param {!InspectorBackendClass.Connection} connection 189 * @param {!InspectorBackendClass.Connection} connection
190 * @param {?WebInspector.Target} parentTarget 190 * @param {?WebInspector.Target} parentTarget
191 * @return {!WebInspector.Target} 191 * @return {!WebInspector.Target}
192 */ 192 */
193 createTarget: function(name, type, connection, parentTarget) 193 createTarget: function(name, capabilitiesMask, connection, parentTarget)
194 { 194 {
195 var target = new WebInspector.Target(this, name, type, connection, paren tTarget); 195 var target = new WebInspector.Target(this, name, capabilitiesMask, conne ction, parentTarget);
196 196
197 /** @type {!WebInspector.ConsoleModel} */ 197 /** @type {!WebInspector.ConsoleModel} */
198 target.consoleModel = new WebInspector.ConsoleModel(target); 198 target.consoleModel = new WebInspector.ConsoleModel(target);
199 199
200 var networkManager = null; 200 var networkManager = null;
201 if (!target.isJSInspector()) 201 if (target.hasNetworkCapability())
202 networkManager = new WebInspector.NetworkManager(target); 202 networkManager = new WebInspector.NetworkManager(target);
203 203
204 /** @type {!WebInspector.ResourceTreeModel} */ 204 /** @type {!WebInspector.ResourceTreeModel} */
205 target.resourceTreeModel = new WebInspector.ResourceTreeModel(target, ne tworkManager); 205 target.resourceTreeModel = new WebInspector.ResourceTreeModel(target, ne tworkManager);
206 206
207 if (networkManager) 207 if (networkManager)
208 new WebInspector.NetworkLog(target, networkManager); 208 new WebInspector.NetworkLog(target, networkManager);
209 209
210 /** @type {!WebInspector.RuntimeModel} */ 210 /** @type {!WebInspector.RuntimeModel} */
211 target.runtimeModel = new WebInspector.RuntimeModel(target); 211 target.runtimeModel = new WebInspector.RuntimeModel(target);
212 if (target.hasJSContext()) 212 if (target.hasJSCapability())
213 new WebInspector.DebuggerModel(target); 213 new WebInspector.DebuggerModel(target);
214 214
215 if (target.type() === WebInspector.Target.Type.Page) { 215 if (target.hasBrowserCapability()) {
216 new WebInspector.DOMModel(target); 216 new WebInspector.DOMModel(target);
217 new WebInspector.CSSModel(target); 217 new WebInspector.CSSModel(target);
218 } 218 }
219 219
220 /** @type {?WebInspector.WorkerManager} */ 220 /** @type {?WebInspector.WorkerManager} */
221 target.workerManager = target.supportsWorkers() ? new WebInspector.Worke rManager(target) : null; 221 target.workerManager = target.hasWorkerCapability() ? new WebInspector.W orkerManager(target) : null;
222 /** @type {!WebInspector.CPUProfilerModel} */ 222 /** @type {!WebInspector.CPUProfilerModel} */
223 target.cpuProfilerModel = new WebInspector.CPUProfilerModel(target); 223 target.cpuProfilerModel = new WebInspector.CPUProfilerModel(target);
224 /** @type {!WebInspector.HeapProfilerModel} */ 224 /** @type {!WebInspector.HeapProfilerModel} */
225 target.heapProfilerModel = new WebInspector.HeapProfilerModel(target); 225 target.heapProfilerModel = new WebInspector.HeapProfilerModel(target);
226 226
227 target.tracingManager = new WebInspector.TracingManager(target); 227 target.tracingManager = new WebInspector.TracingManager(target);
228 228
229 if (target.isPage()) 229 if (target.hasBrowserCapability())
230 target.serviceWorkerManager = new WebInspector.ServiceWorkerManager( target); 230 target.serviceWorkerManager = new WebInspector.ServiceWorkerManager( target);
231 231
232 this.addTarget(target); 232 this.addTarget(target);
233 return target; 233 return target;
234 }, 234 },
235 235
236 /** 236 /**
237 * @param {number} type 237 * @param {!WebInspector.Target} target
238 * @return {!Array<!WebInspector.TargetManager.Observer>} 238 * @return {!Array<!WebInspector.TargetManager.Observer>}
239 */ 239 */
240 _observersByType: function(type) 240 _observersForTarget: function(target)
241 { 241 {
242 var result = []; 242 return this._observers.filter((observer) => target.hasAllCapabilities(ob server[this._observerCapabiliesMaskSymbol] || 0));
dgozman 2016/07/13 00:08:29 No need for "|| 0"
eostroukhov-old 2016/07/13 00:36:29 It is for the compiler - so the passed value is ne
243 for (var observer of this._observers) {
244 if (observer[this._observerTypeSymbol] & type)
245 result.push(observer);
246 }
247 return result;
248 }, 243 },
249 244
250 /** 245 /**
251 * @param {!WebInspector.Target} target 246 * @param {!WebInspector.Target} target
252 */ 247 */
253 addTarget: function(target) 248 addTarget: function(target)
254 { 249 {
255 this._targets.push(target); 250 this._targets.push(target);
256 if (this._targets.length === 1) { 251 if (this._targets.length === 1) {
257 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.InspectedURLChanged, this._redispatchEvent, this); 252 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.InspectedURLChanged, this._redispatchEvent, this);
258 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.MainFrameNavigated, this._redispatchEvent, this); 253 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.MainFrameNavigated, this._redispatchEvent, this);
259 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.Load, this._redispatchEvent, this); 254 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.Load, this._redispatchEvent, this);
260 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.PageReloadRequested, this._redispatchEvent, this); 255 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.PageReloadRequested, this._redispatchEvent, this);
261 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.WillReloadPage, this._redispatchEvent, this); 256 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.WillReloadPage, this._redispatchEvent, this);
262 } 257 }
263 var copy = this._observersByType(target.type()); 258 var copy = this._observersForTarget(target);
264 for (var i = 0; i < copy.length; ++i) 259 for (var i = 0; i < copy.length; ++i)
265 copy[i].targetAdded(target); 260 copy[i].targetAdded(target);
266 261
267 for (var eventType in this._modelListeners) { 262 for (var eventType in this._modelListeners) {
268 var listeners = this._modelListeners[eventType]; 263 var listeners = this._modelListeners[eventType];
269 for (var i = 0; i < listeners.length; ++i) { 264 for (var i = 0; i < listeners.length; ++i) {
270 var model = target.model(listeners[i].modelClass); 265 var model = target.model(listeners[i].modelClass);
271 if (model) 266 if (model)
272 model.addEventListener(eventType, listeners[i].listener, lis teners[i].thisObject); 267 model.addEventListener(eventType, listeners[i].listener, lis teners[i].thisObject);
273 } 268 }
274 } 269 }
275 }, 270 },
276 271
277 /** 272 /**
278 * @param {!WebInspector.Target} target 273 * @param {!WebInspector.Target} target
279 */ 274 */
280 removeTarget: function(target) 275 removeTarget: function(target)
281 { 276 {
282 this._targets.remove(target); 277 this._targets.remove(target);
283 if (this._targets.length === 0) { 278 if (this._targets.length === 0) {
284 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.InspectedURLChanged, this._redispatchEvent, this); 279 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.InspectedURLChanged, this._redispatchEvent, this);
285 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.MainFrameNavigated, this._redispatchEvent, this); 280 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.MainFrameNavigated, this._redispatchEvent, this);
286 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.Load, this._redispatchEvent, this); 281 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.Load, this._redispatchEvent, this);
287 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.WillReloadPage, this._redispatchEvent, this); 282 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.WillReloadPage, this._redispatchEvent, this);
288 } 283 }
289 var copy = this._observersByType(target.type()); 284 var copy = this._observersForTarget(target);
290 for (var i = 0; i < copy.length; ++i) 285 for (var i = 0; i < copy.length; ++i)
291 copy[i].targetRemoved(target); 286 copy[i].targetRemoved(target);
292 287
293 for (var eventType in this._modelListeners) { 288 for (var eventType in this._modelListeners) {
294 var listeners = this._modelListeners[eventType]; 289 var listeners = this._modelListeners[eventType];
295 for (var i = 0; i < listeners.length; ++i) { 290 for (var i = 0; i < listeners.length; ++i) {
296 var model = target.model(listeners[i].modelClass); 291 var model = target.model(listeners[i].modelClass);
297 if (model) 292 if (model)
298 model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject); 293 model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject);
299 } 294 }
300 } 295 }
301 }, 296 },
302 297
303 /** 298 /**
304 * @param {number=} type 299 * @param {number=} capabilitiesMask
305 * @return {boolean} 300 * @return {boolean}
306 */ 301 */
307 hasTargets: function(type) 302 hasTargets: function(capabilitiesMask)
dgozman 2016/07/13 00:08:29 Is this one used?
eostroukhov-old 2016/07/13 00:36:29 There was one usage in Main.js - removed it.
308 { 303 {
309 return !!this.targets(type).length; 304 return this._targets.some((target) => target.hasAllCapabilities(capabili tiesMask || 0));
310 }, 305 },
311 306
312 /** 307 /**
313 * @param {number=} type 308 * @param {number=} capabilitiesMask
314 * @return {!Array.<!WebInspector.Target>} 309 * @return {!Array.<!WebInspector.Target>}
315 */ 310 */
316 targets: function(type) 311 targets: function(capabilitiesMask)
317 { 312 {
318 if (!type) 313 if (!capabilitiesMask)
319 return this._targets.slice(); 314 return this._targets.slice();
320 315 else
321 var result = []; 316 return this._targets.filter((target) => target.hasAllCapabilities(ca pabilitiesMask || 0));
dgozman 2016/07/13 00:08:29 No need for "|| 0"
eostroukhov-old 2016/07/13 00:36:29 Compiler would bark...
322 for (var target of this._targets) {
323 if (target.type() & type)
324 result.push(target);
325 }
326 return result;
327 }, 317 },
328 318
329 /** 319 /**
330 * @return {!Array.<!WebInspector.Target>}
331 */
332 targetsWithJSContext: function()
333 {
334 var result = [];
335 for (var target of this._targets) {
336 if (target.hasJSContext())
337 result.push(target);
338 }
339 return result;
340 },
341
342 /**
343 * 320 *
344 * @param {number} id 321 * @param {number} id
345 * @return {?WebInspector.Target} 322 * @return {?WebInspector.Target}
346 */ 323 */
347 targetById: function(id) 324 targetById: function(id)
348 { 325 {
349 for (var i = 0; i < this._targets.length; ++i) { 326 for (var i = 0; i < this._targets.length; ++i) {
350 if (this._targets[i].id() === id) 327 if (this._targets[i].id() === id)
351 return this._targets[i]; 328 return this._targets[i];
352 } 329 }
(...skipping 27 matching lines...) Expand all
380 /** 357 /**
381 * @param {!WebInspector.Target} target 358 * @param {!WebInspector.Target} target
382 */ 359 */
383 targetRemoved: function(target) { }, 360 targetRemoved: function(target) { },
384 } 361 }
385 362
386 /** 363 /**
387 * @type {!WebInspector.TargetManager} 364 * @type {!WebInspector.TargetManager}
388 */ 365 */
389 WebInspector.targetManager = new WebInspector.TargetManager(); 366 WebInspector.targetManager = new WebInspector.TargetManager();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698