| 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 {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 Loading... |
| 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 /** @type {!WebInspector.RuntimeModel} */ | 199 /** @type {!WebInspector.RuntimeModel} */ |
| 200 target.runtimeModel = new WebInspector.RuntimeModel(target); | 200 target.runtimeModel = new WebInspector.RuntimeModel(target); |
| 201 | 201 |
| 202 var networkManager = null; | 202 var networkManager = null; |
| 203 if (!target.isJSInspector()) | 203 if (target.hasNetworkCapability()) |
| 204 networkManager = new WebInspector.NetworkManager(target); | 204 networkManager = new WebInspector.NetworkManager(target); |
| 205 | 205 |
| 206 /** @type {!WebInspector.ResourceTreeModel} */ | 206 /** @type {!WebInspector.ResourceTreeModel} */ |
| 207 target.resourceTreeModel = new WebInspector.ResourceTreeModel(target, ne
tworkManager); | 207 target.resourceTreeModel = new WebInspector.ResourceTreeModel(target, ne
tworkManager); |
| 208 | 208 |
| 209 if (networkManager) | 209 if (networkManager) |
| 210 new WebInspector.NetworkLog(target, networkManager); | 210 new WebInspector.NetworkLog(target, networkManager); |
| 211 | 211 |
| 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)); |
| 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 {!Array.<!WebInspector.Target>} |
| 306 */ | 301 */ |
| 307 hasTargets: function(type) | 302 targets: function(capabilitiesMask) |
| 308 { | 303 { |
| 309 return !!this.targets(type).length; | 304 if (!capabilitiesMask) |
| 305 return this._targets.slice(); |
| 306 else |
| 307 return this._targets.filter((target) => target.hasAllCapabilities(ca
pabilitiesMask || 0)); |
| 310 }, | 308 }, |
| 311 | 309 |
| 312 /** | 310 /** |
| 313 * @param {number=} type | |
| 314 * @return {!Array.<!WebInspector.Target>} | |
| 315 */ | |
| 316 targets: function(type) | |
| 317 { | |
| 318 if (!type) | |
| 319 return this._targets.slice(); | |
| 320 | |
| 321 var result = []; | |
| 322 for (var target of this._targets) { | |
| 323 if (target.type() & type) | |
| 324 result.push(target); | |
| 325 } | |
| 326 return result; | |
| 327 }, | |
| 328 | |
| 329 /** | |
| 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 * | 311 * |
| 344 * @param {number} id | 312 * @param {number} id |
| 345 * @return {?WebInspector.Target} | 313 * @return {?WebInspector.Target} |
| 346 */ | 314 */ |
| 347 targetById: function(id) | 315 targetById: function(id) |
| 348 { | 316 { |
| 349 for (var i = 0; i < this._targets.length; ++i) { | 317 for (var i = 0; i < this._targets.length; ++i) { |
| 350 if (this._targets[i].id() === id) | 318 if (this._targets[i].id() === id) |
| 351 return this._targets[i]; | 319 return this._targets[i]; |
| 352 } | 320 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 380 /** | 348 /** |
| 381 * @param {!WebInspector.Target} target | 349 * @param {!WebInspector.Target} target |
| 382 */ | 350 */ |
| 383 targetRemoved: function(target) { }, | 351 targetRemoved: function(target) { }, |
| 384 } | 352 } |
| 385 | 353 |
| 386 /** | 354 /** |
| 387 * @type {!WebInspector.TargetManager} | 355 * @type {!WebInspector.TargetManager} |
| 388 */ | 356 */ |
| 389 WebInspector.targetManager = new WebInspector.TargetManager(); | 357 WebInspector.targetManager = new WebInspector.TargetManager(); |
| OLD | NEW |