Chromium Code Reviews| 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} | 9 * @extends {Protocol.Agents} |
| 10 * @param {string} name | 10 * @param {string} name |
| 11 * @param {!InspectorBackendClass.Connection} connection | 11 * @param {!InspectorBackendClass.Connection} connection |
| 12 * @param {function(!WebInspector.Target)=} callback | 12 * @param {function(!WebInspector.Target)=} callback |
| 13 */ | 13 */ |
| 14 WebInspector.Target = function(name, connection, callback) | 14 WebInspector.Target = function(name, connection, callback) |
| 15 { | 15 { |
| 16 Protocol.Agents.call(this, connection.agentsMap()); | 16 Protocol.Agents.call(this, connection.agentsMap()); |
| 17 /** @type {!WeakReference.<!WebInspector.Target>} */ | 17 /** @type {!WeakReference.<!WebInspector.Target>} */ |
| 18 this._weakReference = new WeakReference(this); | 18 this._weakReference = new WeakReference(this); |
| 19 this._name = name; | 19 this._name = name; |
| 20 this._connection = connection; | 20 this._connection = connection; |
| 21 connection.addEventListener(InspectorBackendClass.Connection.Events.Disconne cted, this._onDisconnect, this); | 21 connection.addEventListener(InspectorBackendClass.Connection.Events.Disconne cted, this._onDisconnect, this); |
| 22 this._id = WebInspector.Target._nextId++; | 22 this._id = WebInspector.Target._nextId++; |
| 23 | 23 |
| 24 /** @type {!Map.<!Function, !WebInspector.SDKModel>} */ | |
| 25 this._modelByConstructor = new Map(); | |
| 26 | |
| 24 /** @type {!Object.<string, boolean>} */ | 27 /** @type {!Object.<string, boolean>} */ |
| 25 this._capabilities = {}; | 28 this._capabilities = {}; |
| 26 this.pageAgent().canScreencast(this._initializeCapability.bind(this, WebInsp ector.Target.Capabilities.canScreencast, null)); | 29 this.pageAgent().canScreencast(this._initializeCapability.bind(this, WebInsp ector.Target.Capabilities.canScreencast, null)); |
| 27 this.pageAgent().hasTouchInputs(this._initializeCapability.bind(this, WebIns pector.Target.Capabilities.hasTouchInputs, null)); | 30 this.pageAgent().hasTouchInputs(this._initializeCapability.bind(this, WebIns pector.Target.Capabilities.hasTouchInputs, null)); |
| 28 if (WebInspector.experimentsSettings.timelinePowerProfiler.isEnabled()) | 31 if (WebInspector.experimentsSettings.timelinePowerProfiler.isEnabled()) |
| 29 this.powerAgent().canProfilePower(this._initializeCapability.bind(this, WebInspector.Target.Capabilities.canProfilePower, null)); | 32 this.powerAgent().canProfilePower(this._initializeCapability.bind(this, WebInspector.Target.Capabilities.canProfilePower, null)); |
| 30 this.workerAgent().canInspectWorkers(this._initializeCapability.bind(this, W ebInspector.Target.Capabilities.canInspectWorkers, this._loadedWithCapabilities. bind(this, callback))); | 33 this.workerAgent().canInspectWorkers(this._initializeCapability.bind(this, W ebInspector.Target.Capabilities.canInspectWorkers, this._loadedWithCapabilities. bind(this, callback))); |
| 31 | 34 |
| 32 /** @type {!WebInspector.Lock} */ | 35 /** @type {!WebInspector.Lock} */ |
| 33 this.profilingLock = new WebInspector.Lock(); | 36 this.profilingLock = new WebInspector.Lock(); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 97 /** | 100 /** |
| 98 * @param {function(!WebInspector.Target)=} callback | 101 * @param {function(!WebInspector.Target)=} callback |
| 99 */ | 102 */ |
| 100 _loadedWithCapabilities: function(callback) | 103 _loadedWithCapabilities: function(callback) |
| 101 { | 104 { |
| 102 /** @type {!WebInspector.ConsoleModel} */ | 105 /** @type {!WebInspector.ConsoleModel} */ |
| 103 this.consoleModel = new WebInspector.ConsoleModel(this); | 106 this.consoleModel = new WebInspector.ConsoleModel(this); |
| 104 | 107 |
| 105 /** @type {!WebInspector.NetworkManager} */ | 108 /** @type {!WebInspector.NetworkManager} */ |
| 106 this.networkManager = new WebInspector.NetworkManager(this); | 109 this.networkManager = new WebInspector.NetworkManager(this); |
| 107 if (!WebInspector.networkManager) | |
| 108 WebInspector.networkManager = this.networkManager; | |
| 109 | 110 |
| 110 /** @type {!WebInspector.ResourceTreeModel} */ | 111 /** @type {!WebInspector.ResourceTreeModel} */ |
| 111 this.resourceTreeModel = new WebInspector.ResourceTreeModel(this); | 112 this.resourceTreeModel = new WebInspector.ResourceTreeModel(this); |
| 112 if (!WebInspector.resourceTreeModel) | 113 if (!WebInspector.resourceTreeModel) |
| 113 WebInspector.resourceTreeModel = this.resourceTreeModel; | 114 WebInspector.resourceTreeModel = this.resourceTreeModel; |
| 114 | 115 |
| 115 /** @type {!WebInspector.NetworkLog} */ | 116 /** @type {!WebInspector.NetworkLog} */ |
| 116 this.networkLog = new WebInspector.NetworkLog(this); | 117 this.networkLog = new WebInspector.NetworkLog(this); |
| 117 if (!WebInspector.networkLog) | 118 if (!WebInspector.networkLog) |
| 118 WebInspector.networkLog = this.networkLog; | 119 WebInspector.networkLog = this.networkLog; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 232 target: function() | 233 target: function() |
| 233 { | 234 { |
| 234 return this._target; | 235 return this._target; |
| 235 }, | 236 }, |
| 236 | 237 |
| 237 __proto__: WebInspector.Object.prototype | 238 __proto__: WebInspector.Object.prototype |
| 238 } | 239 } |
| 239 | 240 |
| 240 /** | 241 /** |
| 241 * @constructor | 242 * @constructor |
| 243 * @extends {WebInspector.SDKObject} | |
| 244 * @param {!Function} modelClass | |
| 245 * @param {!WebInspector.Target} target | |
| 246 */ | |
| 247 WebInspector.SDKModel = function(modelClass, target) | |
| 248 { | |
| 249 WebInspector.SDKObject.call(this, target); | |
| 250 target._modelByConstructor.put(modelClass, this); | |
| 251 } | |
| 252 | |
| 253 WebInspector.SDKModel.prototype = { | |
| 254 | |
|
apavlov
2014/07/17 22:09:59
extra line
pfeldman
2014/07/18 11:59:47
Done.
| |
| 255 __proto__: WebInspector.SDKObject.prototype | |
| 256 } | |
| 257 | |
| 258 /** | |
| 259 * @constructor | |
| 242 */ | 260 */ |
| 243 WebInspector.TargetManager = function() | 261 WebInspector.TargetManager = function() |
| 244 { | 262 { |
| 245 /** @type {!Array.<!WebInspector.Target>} */ | 263 /** @type {!Array.<!WebInspector.Target>} */ |
| 246 this._targets = []; | 264 this._targets = []; |
| 247 /** @type {!Array.<!WebInspector.TargetManager.Observer>} */ | 265 /** @type {!Array.<!WebInspector.TargetManager.Observer>} */ |
| 248 this._observers = []; | 266 this._observers = []; |
| 267 /** @type {!Object.<string, !Array.<{modelClass: !Function, thisObject: (!Ob ject|undefined), listener: function(!WebInspector.Event)}>>} */ | |
| 268 this._listeners = {}; | |
| 249 } | 269 } |
| 250 | 270 |
| 251 WebInspector.TargetManager.prototype = { | 271 WebInspector.TargetManager.prototype = { |
| 272 /** | |
| 273 * @param {!Function} modelClass | |
| 274 * @param {string} eventType | |
| 275 * @param {function(!WebInspector.Event)} listener | |
| 276 * @param {!Object=} thisObject | |
| 277 */ | |
| 278 addModelListener: function(modelClass, eventType, listener, thisObject) | |
| 279 { | |
| 280 for (var i = 0; i < this._targets.length; ++i) { | |
| 281 var target = this._targets[i]; | |
|
apavlov
2014/07/17 22:09:58
can be inlined
pfeldman
2014/07/18 11:59:47
Done.
| |
| 282 var model = target._modelByConstructor.get(modelClass); | |
| 283 model.addEventListener(eventType, listener, thisObject); | |
| 284 } | |
| 285 if (!this._listeners[eventType]) | |
| 286 this._listeners[eventType] = []; | |
| 287 this._listeners[eventType].push({ modelClass: modelClass, thisObject: th isObject, listener: listener }); | |
| 288 }, | |
| 289 | |
| 290 /** | |
| 291 * @param {!Function} modelClass | |
| 292 * @param {string} eventType | |
| 293 * @param {function(!WebInspector.Event)} listener | |
| 294 * @param {!Object=} thisObject | |
| 295 */ | |
| 296 removeModelListener: function(modelClass, eventType, listener, thisObject) | |
| 297 { | |
| 298 if (!this._listeners[eventType]) | |
| 299 return; | |
| 300 | |
| 301 for (var i = 0; i < this._targets.length; ++i) { | |
| 302 var target = this._targets[i]; | |
|
apavlov
2014/07/17 22:09:59
ditto
pfeldman
2014/07/18 11:59:47
Done.
| |
| 303 var model = target._modelByConstructor.get(modelClass); | |
| 304 model.removeEventListener(eventType, listener, thisObject); | |
| 305 } | |
| 306 | |
| 307 var listeners = this._listeners[eventType]; | |
| 308 for (var i = 0; i < listeners.length; ++i) { | |
| 309 if (listeners[i].modelClass === modelClass && listeners[i].listener === listener && listeners[i].thisObject === thisObject) | |
| 310 listeners.splice(i--, 1); | |
| 311 } | |
| 312 if (!listeners.length) | |
| 313 delete this._listeners[eventType]; | |
| 314 }, | |
| 252 | 315 |
| 253 /** | 316 /** |
| 254 * @param {!WebInspector.TargetManager.Observer} targetObserver | 317 * @param {!WebInspector.TargetManager.Observer} targetObserver |
| 255 */ | 318 */ |
| 256 observeTargets: function(targetObserver) | 319 observeTargets: function(targetObserver) |
| 257 { | 320 { |
| 258 this.targets().forEach(targetObserver.targetAdded.bind(targetObserver)); | 321 this.targets().forEach(targetObserver.targetAdded.bind(targetObserver)); |
| 259 this._observers.push(targetObserver); | 322 this._observers.push(targetObserver); |
| 260 }, | 323 }, |
| 261 | 324 |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 282 */ | 345 */ |
| 283 function callbackWrapper(newTarget) | 346 function callbackWrapper(newTarget) |
| 284 { | 347 { |
| 285 this.addTarget(newTarget); | 348 this.addTarget(newTarget); |
| 286 if (callback) | 349 if (callback) |
| 287 callback(newTarget); | 350 callback(newTarget); |
| 288 } | 351 } |
| 289 }, | 352 }, |
| 290 | 353 |
| 291 /** | 354 /** |
| 292 * @param {!WebInspector.Target} newTarget | 355 * @param {!WebInspector.Target} target |
| 293 */ | 356 */ |
| 294 addTarget: function(newTarget) | 357 addTarget: function(target) |
| 295 { | 358 { |
| 296 this._targets.push(newTarget); | 359 this._targets.push(target); |
| 297 var copy = this._observers; | 360 var copy = this._observers; |
|
apavlov
2014/07/17 22:09:59
while we are here, "copy" sounds a bit wrong - it'
pfeldman
2014/07/18 11:59:47
Done.
| |
| 298 for (var i = 0; i < copy.length; ++i) | 361 for (var i = 0; i < copy.length; ++i) { |
| 299 copy[i].targetAdded(newTarget); | 362 copy[i].targetAdded(target); |
| 363 for (var eventType in this._listeners) { | |
|
apavlov
2014/07/17 22:09:58
Should this loop reside outside the outer one? It
pfeldman
2014/07/18 11:59:47
Done.
| |
| 364 var listeners = this._listeners[eventType]; | |
| 365 for (var i = 0; i < listeners.length; ++i) { | |
|
apavlov
2014/07/17 22:09:58
nested iteration by "i". Argh.
pfeldman
2014/07/18 11:59:47
Done.
| |
| 366 var model = target._modelByConstructor.get(listeners[i].mode lClass); | |
| 367 model.addEventListener(eventType, listeners[i].listener, lis teners[i].thisObject); | |
| 368 } | |
| 369 } | |
| 370 } | |
| 300 }, | 371 }, |
| 301 | 372 |
| 302 /** | 373 /** |
| 303 * @param {!WebInspector.Target} target | 374 * @param {!WebInspector.Target} target |
| 304 */ | 375 */ |
| 305 removeTarget: function(target) | 376 removeTarget: function(target) |
| 306 { | 377 { |
| 307 this._targets.remove(target); | 378 this._targets.remove(target); |
| 308 var copy = this._observers.slice(); | 379 var copy = this._observers.slice(); |
| 309 for (var i = 0; i < copy.length; ++i) | 380 for (var i = 0; i < copy.length; ++i) { |
| 310 copy[i].targetRemoved(target); | 381 copy[i].targetRemoved(target); |
| 382 for (var eventType in this._listeners) { | |
|
apavlov
2014/07/17 22:09:59
ditto
pfeldman
2014/07/18 11:59:47
Done.
| |
| 383 var listeners = this._listeners[eventType]; | |
| 384 for (var i = 0; i < listeners.length; ++i) { | |
|
apavlov
2014/07/17 22:09:59
ditto
pfeldman
2014/07/18 11:59:47
Done.
| |
| 385 var model = target._modelByConstructor.get(listeners[i].mode lClass); | |
| 386 model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject); | |
| 387 } | |
| 388 } | |
| 389 } | |
| 311 }, | 390 }, |
| 312 | 391 |
| 313 /** | 392 /** |
| 314 * @return {!Array.<!WebInspector.Target>} | 393 * @return {!Array.<!WebInspector.Target>} |
| 315 */ | 394 */ |
| 316 targets: function() | 395 targets: function() |
| 317 { | 396 { |
| 318 return this._targets.slice(); | 397 return this._targets.slice(); |
| 319 }, | 398 }, |
| 320 | 399 |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 343 /** | 422 /** |
| 344 * @param {!WebInspector.Target} target | 423 * @param {!WebInspector.Target} target |
| 345 */ | 424 */ |
| 346 targetRemoved: function(target) { }, | 425 targetRemoved: function(target) { }, |
| 347 } | 426 } |
| 348 | 427 |
| 349 /** | 428 /** |
| 350 * @type {!WebInspector.TargetManager} | 429 * @type {!WebInspector.TargetManager} |
| 351 */ | 430 */ |
| 352 WebInspector.targetManager = new WebInspector.TargetManager(); | 431 WebInspector.targetManager = new WebInspector.TargetManager(); |
| OLD | NEW |