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 {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 Loading... |
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 Loading... |
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 Loading... |
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(); |
OLD | NEW |