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

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: [DevTools] Replace target type with capabilities 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.hasNetworkDomains())
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.hasJSDomains())
213 new WebInspector.DebuggerModel(target); 213 new WebInspector.DebuggerModel(target);
214 214
215 if (target.type() === WebInspector.Target.Type.Page) { 215 if (target.hasBrowserDomains()) {
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.hasWorkerDomains() ? new WebInspector.Work erManager(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.hasBrowserDomains())
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 * Returns observers matching the capabilities mask.
dgozman 2016/07/12 00:34:11 We don't usually put comments like this and rely o
eostroukhov-old 2016/07/12 21:46:16 Done.
238 * @param {number} capabilitiesMask
238 * @return {!Array<!WebInspector.TargetManager.Observer>} 239 * @return {!Array<!WebInspector.TargetManager.Observer>}
239 */ 240 */
240 _observersByType: function(type) 241 _observersForMask: function(capabilitiesMask)
241 { 242 {
242 var result = []; 243 var result = [];
243 for (var observer of this._observers) { 244 for (var observer of this._observers) {
244 if (observer[this._observerTypeSymbol] & type) 245 var observerMask = observer[this._observerCapabiliesMaskSymbol];
246 // All bits should match
247 if ((observerMask & capabilitiesMask) === observerMask)
245 result.push(observer); 248 result.push(observer);
246 } 249 }
247 return result; 250 return result;
248 }, 251 },
249 252
250 /** 253 /**
251 * @param {!WebInspector.Target} target 254 * @param {!WebInspector.Target} target
252 */ 255 */
253 addTarget: function(target) 256 addTarget: function(target)
254 { 257 {
255 this._targets.push(target); 258 this._targets.push(target);
256 if (this._targets.length === 1) { 259 if (this._targets.length === 1) {
257 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.InspectedURLChanged, this._redispatchEvent, this); 260 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.InspectedURLChanged, this._redispatchEvent, this);
258 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.MainFrameNavigated, this._redispatchEvent, this); 261 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.MainFrameNavigated, this._redispatchEvent, this);
259 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.Load, this._redispatchEvent, this); 262 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.Load, this._redispatchEvent, this);
260 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.PageReloadRequested, this._redispatchEvent, this); 263 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.PageReloadRequested, this._redispatchEvent, this);
261 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.WillReloadPage, this._redispatchEvent, this); 264 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.WillReloadPage, this._redispatchEvent, this);
262 } 265 }
263 var copy = this._observersByType(target.type()); 266 var copy = this._observersForMask(target.capabilitiesMask());
264 for (var i = 0; i < copy.length; ++i) 267 for (var i = 0; i < copy.length; ++i)
265 copy[i].targetAdded(target); 268 copy[i].targetAdded(target);
266 269
267 for (var eventType in this._modelListeners) { 270 for (var eventType in this._modelListeners) {
268 var listeners = this._modelListeners[eventType]; 271 var listeners = this._modelListeners[eventType];
269 for (var i = 0; i < listeners.length; ++i) { 272 for (var i = 0; i < listeners.length; ++i) {
270 var model = target.model(listeners[i].modelClass); 273 var model = target.model(listeners[i].modelClass);
271 if (model) 274 if (model)
272 model.addEventListener(eventType, listeners[i].listener, lis teners[i].thisObject); 275 model.addEventListener(eventType, listeners[i].listener, lis teners[i].thisObject);
273 } 276 }
274 } 277 }
275 }, 278 },
276 279
277 /** 280 /**
278 * @param {!WebInspector.Target} target 281 * @param {!WebInspector.Target} target
279 */ 282 */
280 removeTarget: function(target) 283 removeTarget: function(target)
281 { 284 {
282 this._targets.remove(target); 285 this._targets.remove(target);
283 if (this._targets.length === 0) { 286 if (this._targets.length === 0) {
284 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.InspectedURLChanged, this._redispatchEvent, this); 287 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.InspectedURLChanged, this._redispatchEvent, this);
285 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.MainFrameNavigated, this._redispatchEvent, this); 288 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.MainFrameNavigated, this._redispatchEvent, this);
286 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.Load, this._redispatchEvent, this); 289 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.Load, this._redispatchEvent, this);
287 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.WillReloadPage, this._redispatchEvent, this); 290 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.WillReloadPage, this._redispatchEvent, this);
288 } 291 }
289 var copy = this._observersByType(target.type()); 292 var copy = this._observersForMask(target.capabilitiesMask());
290 for (var i = 0; i < copy.length; ++i) 293 for (var i = 0; i < copy.length; ++i)
291 copy[i].targetRemoved(target); 294 copy[i].targetRemoved(target);
292 295
293 for (var eventType in this._modelListeners) { 296 for (var eventType in this._modelListeners) {
294 var listeners = this._modelListeners[eventType]; 297 var listeners = this._modelListeners[eventType];
295 for (var i = 0; i < listeners.length; ++i) { 298 for (var i = 0; i < listeners.length; ++i) {
296 var model = target.model(listeners[i].modelClass); 299 var model = target.model(listeners[i].modelClass);
297 if (model) 300 if (model)
298 model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject); 301 model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject);
299 } 302 }
300 } 303 }
301 }, 304 },
302 305
303 /** 306 /**
304 * @param {number=} type 307 * @param {number=} capabilitiesMask
305 * @return {boolean} 308 * @return {boolean}
306 */ 309 */
307 hasTargets: function(type) 310 hasTargets: function(capabilitiesMask)
308 { 311 {
309 return !!this.targets(type).length; 312 return !!this.targets(capabilitiesMask).length;
310 }, 313 },
311 314
312 /** 315 /**
313 * @param {number=} type 316 * @param {number=} capabilitiesMask
314 * @return {!Array.<!WebInspector.Target>} 317 * @return {!Array.<!WebInspector.Target>}
315 */ 318 */
316 targets: function(type) 319 targets: function(capabilitiesMask)
317 { 320 {
318 if (!type) 321 if (!capabilitiesMask)
319 return this._targets.slice(); 322 return this._targets.slice();
320 323
321 var result = []; 324 var result = [];
322 for (var target of this._targets) { 325 for (var target of this._targets) {
323 if (target.type() & type) 326 if (target.capabilitiesMask() & capabilitiesMask)
324 result.push(target); 327 result.push(target);
325 } 328 }
326 return result; 329 return result;
327 }, 330 },
328 331
329 /** 332 /**
330 * @return {!Array.<!WebInspector.Target>} 333 * @return {!Array.<!WebInspector.Target>}
331 */ 334 */
332 targetsWithJSContext: function() 335 targetsWithJSContext: function()
dgozman 2016/07/12 00:34:11 targetsWithJSDomains
eostroukhov-old 2016/07/12 21:46:16 Deleted. Not needed any more.
333 { 336 {
334 var result = []; 337 var result = [];
335 for (var target of this._targets) { 338 for (var target of this._targets) {
336 if (target.hasJSContext()) 339 if (target.hasJSDomains())
337 result.push(target); 340 result.push(target);
338 } 341 }
339 return result; 342 return result;
340 }, 343 },
341 344
342 /** 345 /**
343 * 346 *
344 * @param {number} id 347 * @param {number} id
345 * @return {?WebInspector.Target} 348 * @return {?WebInspector.Target}
346 */ 349 */
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 /** 383 /**
381 * @param {!WebInspector.Target} target 384 * @param {!WebInspector.Target} target
382 */ 385 */
383 targetRemoved: function(target) { }, 386 targetRemoved: function(target) { },
384 } 387 }
385 388
386 /** 389 /**
387 * @type {!WebInspector.TargetManager} 390 * @type {!WebInspector.TargetManager}
388 */ 391 */
389 WebInspector.targetManager = new WebInspector.TargetManager(); 392 WebInspector.targetManager = new WebInspector.TargetManager();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698