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

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

Issue 1801293003: DevTools: Extract TargetManager into its own file (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: only public interfaces for target properties Created 4 years, 9 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 {Protocol.Agents}
10 * @param {!WebInspector.TargetManager} targetManager
11 * @param {string} name
12 * @param {number} type
13 * @param {!InspectorBackendClass.Connection} connection
14 * @param {?WebInspector.Target} parentTarget
15 */
16 WebInspector.Target = function(targetManager, name, type, connection, parentTarg et)
17 {
18 Protocol.Agents.call(this, connection.agentsMap());
19 this._targetManager = targetManager;
20 this._name = name;
21 this._type = type;
22 this._connection = connection;
23 this._parentTarget = parentTarget;
24 connection.addEventListener(InspectorBackendClass.Connection.Events.Disconne cted, this._onDisconnect, this);
25 this._id = WebInspector.Target._nextId++;
26
27 /** @type {!Map.<!Function, !WebInspector.SDKModel>} */
28 this._modelByConstructor = new Map();
29
30 /** @type {!WebInspector.ConsoleModel} */
31 this.consoleModel = new WebInspector.ConsoleModel(this);
32 /** @type {!WebInspector.NetworkManager} */
33 this.networkManager = new WebInspector.NetworkManager(this);
34 /** @type {!WebInspector.ResourceTreeModel} */
35 this.resourceTreeModel = new WebInspector.ResourceTreeModel(this);
36 /** @type {!WebInspector.NetworkLog} */
37 this.networkLog = new WebInspector.NetworkLog(this);
38
39 /** @type {!WebInspector.RuntimeModel} */
40 this.runtimeModel = new WebInspector.RuntimeModel(this);
41 if (this.hasJSContext())
42 new WebInspector.DebuggerModel(this);
43
44 if (this._type === WebInspector.Target.Type.Page) {
45 new WebInspector.DOMModel(this);
46 new WebInspector.CSSModel(this);
47 }
48
49 /** @type {?WebInspector.WorkerManager} */
50 this.workerManager = !this.isDedicatedWorker() ? new WebInspector.WorkerMana ger(this) : null;
51 /** @type {!WebInspector.CPUProfilerModel} */
52 this.cpuProfilerModel = new WebInspector.CPUProfilerModel(this);
53 /** @type {!WebInspector.HeapProfilerModel} */
54 this.heapProfilerModel = new WebInspector.HeapProfilerModel(this);
55
56 this.tracingManager = new WebInspector.TracingManager(this);
57
58 if (this.isPage())
59 this.serviceWorkerManager = new WebInspector.ServiceWorkerManager(this);
60 }
61
62 /**
63 * @enum {number}
64 */
65 WebInspector.Target.Type = {
66 Page: 1,
67 DedicatedWorker: 2,
68 ServiceWorker: 4
69 }
70
71 WebInspector.Target._nextId = 1;
72
73 WebInspector.Target.prototype = {
74 /**
75 * @return {number}
76 */
77 id: function()
78 {
79 return this._id;
80 },
81
82 /**
83 *
84 * @return {string}
85 */
86 name: function()
87 {
88 return this._name;
89 },
90
91 /**
92 *
93 * @return {!WebInspector.TargetManager}
94 */
95 targetManager: function()
96 {
97 return this._targetManager;
98 },
99
100 /**
101 * @param {string} label
102 * @return {string}
103 */
104 decorateLabel: function(label)
105 {
106 return this.isWorker() ? "\u2699 " + label : label;
107 },
108
109 /**
110 * @override
111 * @param {string} domain
112 * @param {!Object} dispatcher
113 */
114 registerDispatcher: function(domain, dispatcher)
115 {
116 this._connection.registerDispatcher(domain, dispatcher);
117 },
118
119 /**
120 * @return {boolean}
121 */
122 isPage: function()
123 {
124 return this._type === WebInspector.Target.Type.Page;
125 },
126
127 /**
128 * @return {boolean}
129 */
130 isWorker: function()
131 {
132 return this.isDedicatedWorker() || this.isServiceWorker();
133 },
134
135 /**
136 * @return {boolean}
137 */
138 isDedicatedWorker: function()
139 {
140 return this._type === WebInspector.Target.Type.DedicatedWorker;
141 },
142
143 /**
144 * @return {boolean}
145 */
146 isServiceWorker: function()
147 {
148 return this._type === WebInspector.Target.Type.ServiceWorker;
149 },
150
151 /**
152 * @return {boolean}
153 */
154 hasJSContext: function()
155 {
156 return !this.isServiceWorker();
157 },
158
159 /**
160 * @return {?WebInspector.Target}
161 */
162 parentTarget: function()
163 {
164 return this._parentTarget;
165 },
166
167 _onDisconnect: function()
168 {
169 this._targetManager.removeTarget(this);
170 this._dispose();
171 },
172
173 _dispose: function()
174 {
175 this._targetManager.dispatchEventToListeners(WebInspector.TargetManager. Events.TargetDisposed, this);
176 this.networkManager.dispose();
177 this.cpuProfilerModel.dispose();
178 WebInspector.ServiceWorkerCacheModel.fromTarget(this).dispose();
179 if (this.workerManager)
180 this.workerManager.dispose();
181 },
182
183 /**
184 * @return {boolean}
185 */
186 isDetached: function()
187 {
188 return this._connection.isClosed();
189 },
190
191 /**
192 * @param {!Function} modelClass
193 * @return {?WebInspector.SDKModel}
194 */
195 model: function(modelClass)
196 {
197 return this._modelByConstructor.get(modelClass) || null;
198 },
199
200 __proto__: Protocol.Agents.prototype
201 }
202
203 /**
204 * @constructor
205 * @extends {WebInspector.Object}
206 * @param {!WebInspector.Target} target
207 */
208 WebInspector.SDKObject = function(target)
209 {
210 WebInspector.Object.call(this);
211 this._target = target;
212 }
213
214 WebInspector.SDKObject.prototype = {
215 /**
216 * @return {!WebInspector.Target}
217 */
218 target: function()
219 {
220 return this._target;
221 },
222
223 __proto__: WebInspector.Object.prototype
224 }
225
226 /**
227 * @constructor
228 * @extends {WebInspector.SDKObject}
229 * @param {!Function} modelClass
230 * @param {!WebInspector.Target} target
231 */
232 WebInspector.SDKModel = function(modelClass, target)
233 {
234 WebInspector.SDKObject.call(this, target);
235 target._modelByConstructor.set(modelClass, this);
236 }
237
238 WebInspector.SDKModel.prototype = {
239 /**
240 * @return {!Promise}
241 */
242 suspendModel: function()
243 {
244 return Promise.resolve();
245 },
246
247 /**
248 * @return {!Promise}
249 */
250 resumeModel: function()
251 {
252 return Promise.resolve();
253 },
254
255 __proto__: WebInspector.SDKObject.prototype
256 }
257
258 /**
259 * @constructor
260 * @extends {WebInspector.Object} 9 * @extends {WebInspector.Object}
261 */ 10 */
262 WebInspector.TargetManager = function() 11 WebInspector.TargetManager = function()
263 { 12 {
264 WebInspector.Object.call(this); 13 WebInspector.Object.call(this);
265 /** @type {!Array.<!WebInspector.Target>} */ 14 /** @type {!Array.<!WebInspector.Target>} */
266 this._targets = []; 15 this._targets = [];
267 /** @type {!Array.<!WebInspector.TargetManager.Observer>} */ 16 /** @type {!Array.<!WebInspector.TargetManager.Observer>} */
268 this._observers = []; 17 this._observers = [];
269 this._observerTypeSymbol = Symbol("observerType"); 18 this._observerTypeSymbol = Symbol("observerType");
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 /** 186 /**
438 * @param {string} name 187 * @param {string} name
439 * @param {number} type 188 * @param {number} type
440 * @param {!InspectorBackendClass.Connection} connection 189 * @param {!InspectorBackendClass.Connection} connection
441 * @param {?WebInspector.Target} parentTarget 190 * @param {?WebInspector.Target} parentTarget
442 * @return {!WebInspector.Target} 191 * @return {!WebInspector.Target}
443 */ 192 */
444 createTarget: function(name, type, connection, parentTarget) 193 createTarget: function(name, type, connection, parentTarget)
445 { 194 {
446 var target = new WebInspector.Target(this, name, type, connection, paren tTarget); 195 var target = new WebInspector.Target(this, name, type, connection, paren tTarget);
196
197 /** @type {!WebInspector.ConsoleModel} */
198 target.consoleModel = new WebInspector.ConsoleModel(target);
199 /** @type {!WebInspector.NetworkManager} */
200 target.networkManager = new WebInspector.NetworkManager(target);
201 /** @type {!WebInspector.ResourceTreeModel} */
202 target.resourceTreeModel = new WebInspector.ResourceTreeModel(target);
203 /** @type {!WebInspector.NetworkLog} */
204 target.networkLog = new WebInspector.NetworkLog(target);
205
206 /** @type {!WebInspector.RuntimeModel} */
207 target.runtimeModel = new WebInspector.RuntimeModel(target);
208 if (target.hasJSContext())
209 new WebInspector.DebuggerModel(target);
210
211 if (target.type() === WebInspector.Target.Type.Page) {
212 new WebInspector.DOMModel(target);
213 new WebInspector.CSSModel(target);
214 }
215
216 /** @type {?WebInspector.WorkerManager} */
217 target.workerManager = !target.isDedicatedWorker() ? new WebInspector.Wo rkerManager(target) : null;
218 /** @type {!WebInspector.CPUProfilerModel} */
219 target.cpuProfilerModel = new WebInspector.CPUProfilerModel(target);
220 /** @type {!WebInspector.HeapProfilerModel} */
221 target.heapProfilerModel = new WebInspector.HeapProfilerModel(target);
222
223 target.tracingManager = new WebInspector.TracingManager(target);
224
225 if (target.isPage())
226 target.serviceWorkerManager = new WebInspector.ServiceWorkerManager( target);
227
447 this.addTarget(target); 228 this.addTarget(target);
448 return target; 229 return target;
449 }, 230 },
450 231
451 /** 232 /**
452 * @param {number} type 233 * @param {number} type
453 * @return {!Array<!WebInspector.TargetManager.Observer>} 234 * @return {!Array<!WebInspector.TargetManager.Observer>}
454 */ 235 */
455 _observersByType: function(type) 236 _observersByType: function(type)
456 { 237 {
(...skipping 11 matching lines...) Expand all
468 addTarget: function(target) 249 addTarget: function(target)
469 { 250 {
470 this._targets.push(target); 251 this._targets.push(target);
471 if (this._targets.length === 1) { 252 if (this._targets.length === 1) {
472 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.InspectedURLChanged, this._redispatchEvent, this); 253 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.InspectedURLChanged, this._redispatchEvent, this);
473 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.MainFrameNavigated, this._redispatchEvent, this); 254 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.MainFrameNavigated, this._redispatchEvent, this);
474 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.Load, this._redispatchEvent, this); 255 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.Load, this._redispatchEvent, this);
475 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.PageReloadRequested, this._redispatchEvent, this); 256 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.PageReloadRequested, this._redispatchEvent, this);
476 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.WillReloadPage, this._redispatchEvent, this); 257 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.WillReloadPage, this._redispatchEvent, this);
477 } 258 }
478 var copy = this._observersByType(target._type); 259 var copy = this._observersByType(target.type());
479 for (var i = 0; i < copy.length; ++i) 260 for (var i = 0; i < copy.length; ++i)
480 copy[i].targetAdded(target); 261 copy[i].targetAdded(target);
481 262
482 for (var eventType in this._modelListeners) { 263 for (var eventType in this._modelListeners) {
483 var listeners = this._modelListeners[eventType]; 264 var listeners = this._modelListeners[eventType];
484 for (var i = 0; i < listeners.length; ++i) { 265 for (var i = 0; i < listeners.length; ++i) {
485 var model = target._modelByConstructor.get(listeners[i].modelCla ss); 266 var model = target.model(listeners[i].modelClass);
486 if (model) 267 if (model)
487 model.addEventListener(eventType, listeners[i].listener, lis teners[i].thisObject); 268 model.addEventListener(eventType, listeners[i].listener, lis teners[i].thisObject);
488 } 269 }
489 } 270 }
490 }, 271 },
491 272
492 /** 273 /**
493 * @param {!WebInspector.Target} target 274 * @param {!WebInspector.Target} target
494 */ 275 */
495 removeTarget: function(target) 276 removeTarget: function(target)
496 { 277 {
497 this._targets.remove(target); 278 this._targets.remove(target);
498 if (this._targets.length === 0) { 279 if (this._targets.length === 0) {
499 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.InspectedURLChanged, this._redispatchEvent, this); 280 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.InspectedURLChanged, this._redispatchEvent, this);
500 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.MainFrameNavigated, this._redispatchEvent, this); 281 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.MainFrameNavigated, this._redispatchEvent, this);
501 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.Load, this._redispatchEvent, this); 282 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.Load, this._redispatchEvent, this);
502 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.WillReloadPage, this._redispatchEvent, this); 283 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.WillReloadPage, this._redispatchEvent, this);
503 } 284 }
504 var copy = this._observersByType(target._type); 285 var copy = this._observersByType(target.type());
505 for (var i = 0; i < copy.length; ++i) 286 for (var i = 0; i < copy.length; ++i)
506 copy[i].targetRemoved(target); 287 copy[i].targetRemoved(target);
507 288
508 for (var eventType in this._modelListeners) { 289 for (var eventType in this._modelListeners) {
509 var listeners = this._modelListeners[eventType]; 290 var listeners = this._modelListeners[eventType];
510 for (var i = 0; i < listeners.length; ++i) { 291 for (var i = 0; i < listeners.length; ++i) {
511 var model = target._modelByConstructor.get(listeners[i].modelCla ss); 292 var model = target.model(listeners[i].modelClass);
512 if (model) 293 if (model)
513 model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject); 294 model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject);
514 } 295 }
515 } 296 }
516 }, 297 },
517 298
518 /** 299 /**
519 * @param {number=} type 300 * @param {number=} type
520 * @return {boolean} 301 * @return {boolean}
521 */ 302 */
522 hasTargets: function(type) 303 hasTargets: function(type)
523 { 304 {
524 return !!this.targets(type).length; 305 return !!this.targets(type).length;
525 }, 306 },
526 307
527 /** 308 /**
528 * @param {number=} type 309 * @param {number=} type
529 * @return {!Array.<!WebInspector.Target>} 310 * @return {!Array.<!WebInspector.Target>}
530 */ 311 */
531 targets: function(type) 312 targets: function(type)
532 { 313 {
533 if (!type) 314 if (!type)
534 return this._targets.slice(); 315 return this._targets.slice();
535 316
536 var result = []; 317 var result = [];
537 for (var target of this._targets) { 318 for (var target of this._targets) {
538 if (target._type & type) 319 if (target.type() & type)
539 result.push(target); 320 result.push(target);
540 } 321 }
541 return result; 322 return result;
542 }, 323 },
543 324
544 /** 325 /**
545 * @return {!Array.<!WebInspector.Target>} 326 * @return {!Array.<!WebInspector.Target>}
546 */ 327 */
547 targetsWithJSContext: function() 328 targetsWithJSContext: function()
548 { 329 {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 /** 376 /**
596 * @param {!WebInspector.Target} target 377 * @param {!WebInspector.Target} target
597 */ 378 */
598 targetRemoved: function(target) { }, 379 targetRemoved: function(target) { },
599 } 380 }
600 381
601 /** 382 /**
602 * @type {!WebInspector.TargetManager} 383 * @type {!WebInspector.TargetManager}
603 */ 384 */
604 WebInspector.targetManager = new WebInspector.TargetManager(); 385 WebInspector.targetManager = new WebInspector.TargetManager();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698