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 |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 253 WebInspector.SDKObject.call(this, target); | 253 WebInspector.SDKObject.call(this, target); |
| 254 target._modelByConstructor.put(modelClass, this); | 254 target._modelByConstructor.put(modelClass, this); |
| 255 } | 255 } |
| 256 | 256 |
| 257 WebInspector.SDKModel.prototype = { | 257 WebInspector.SDKModel.prototype = { |
| 258 __proto__: WebInspector.SDKObject.prototype | 258 __proto__: WebInspector.SDKObject.prototype |
| 259 } | 259 } |
| 260 | 260 |
| 261 /** | 261 /** |
| 262 * @constructor | 262 * @constructor |
| 263 * @extends {WebInspector.Object} | |
| 263 */ | 264 */ |
| 264 WebInspector.TargetManager = function() | 265 WebInspector.TargetManager = function() |
| 265 { | 266 { |
| 266 /** @type {!Array.<!WebInspector.Target>} */ | 267 /** @type {!Array.<!WebInspector.Target>} */ |
| 267 this._targets = []; | 268 this._targets = []; |
| 268 /** @type {!Array.<!WebInspector.TargetManager.Observer>} */ | 269 /** @type {!Array.<!WebInspector.TargetManager.Observer>} */ |
| 269 this._observers = []; | 270 this._observers = []; |
| 270 /** @type {!Object.<string, !Array.<{modelClass: !Function, thisObject: (!Ob ject|undefined), listener: function(!WebInspector.Event)}>>} */ | 271 /** @type {!Object.<string, !Array.<{modelClass: !Function, thisObject: (!Ob ject|undefined), listener: function(!WebInspector.Event)}>>} */ |
| 271 this._listeners = {}; | 272 this._modelListeners = {}; |
| 273 } | |
| 274 | |
| 275 WebInspector.TargetManager.Events = { | |
| 276 InspectedURLChanged: "InspectedURLChanged" | |
| 272 } | 277 } |
| 273 | 278 |
| 274 WebInspector.TargetManager.prototype = { | 279 WebInspector.TargetManager.prototype = { |
| 275 /** | 280 /** |
| 281 * @return {string} | |
| 282 */ | |
| 283 inspectedPageURL: function() | |
| 284 { | |
| 285 return this._targets[0].resourceTreeModel.inspectedPageURL(); | |
|
pfeldman
2014/08/18 16:35:20
I have zero targets. This fails for me.
sergeyv
2014/08/18 17:05:51
Done.
| |
| 286 }, | |
| 287 | |
| 288 /** | |
| 289 * @return {string} | |
| 290 */ | |
| 291 inspectedPageDomain: function() | |
| 292 { | |
| 293 return this._targets[0].resourceTreeModel.inspectedPageDomain(); | |
| 294 }, | |
| 295 | |
| 296 /** | |
| 297 * @param {!WebInspector.Event} event | |
| 298 */ | |
| 299 _dispatchInspectedURLChanged: function(event) | |
| 300 { | |
| 301 this.dispatchEventToListeners(WebInspector.TargetManager.Events.Inspecte dURLChanged, event.data); | |
| 302 }, | |
| 303 | |
| 304 /** | |
| 276 * @param {!Function} modelClass | 305 * @param {!Function} modelClass |
| 277 * @param {string} eventType | 306 * @param {string} eventType |
| 278 * @param {function(!WebInspector.Event)} listener | 307 * @param {function(!WebInspector.Event)} listener |
| 279 * @param {!Object=} thisObject | 308 * @param {!Object=} thisObject |
| 280 */ | 309 */ |
| 281 addModelListener: function(modelClass, eventType, listener, thisObject) | 310 addModelListener: function(modelClass, eventType, listener, thisObject) |
| 282 { | 311 { |
| 283 for (var i = 0; i < this._targets.length; ++i) { | 312 for (var i = 0; i < this._targets.length; ++i) { |
| 284 var model = this._targets[i]._modelByConstructor.get(modelClass); | 313 var model = this._targets[i]._modelByConstructor.get(modelClass); |
| 285 model.addEventListener(eventType, listener, thisObject); | 314 model.addEventListener(eventType, listener, thisObject); |
| 286 } | 315 } |
| 287 if (!this._listeners[eventType]) | 316 if (!this._modelListeners[eventType]) |
| 288 this._listeners[eventType] = []; | 317 this._modelListeners[eventType] = []; |
| 289 this._listeners[eventType].push({ modelClass: modelClass, thisObject: th isObject, listener: listener }); | 318 this._modelListeners[eventType].push({ modelClass: modelClass, thisObjec t: thisObject, listener: listener }); |
| 290 }, | 319 }, |
| 291 | 320 |
| 292 /** | 321 /** |
| 293 * @param {!Function} modelClass | 322 * @param {!Function} modelClass |
| 294 * @param {string} eventType | 323 * @param {string} eventType |
| 295 * @param {function(!WebInspector.Event)} listener | 324 * @param {function(!WebInspector.Event)} listener |
| 296 * @param {!Object=} thisObject | 325 * @param {!Object=} thisObject |
| 297 */ | 326 */ |
| 298 removeModelListener: function(modelClass, eventType, listener, thisObject) | 327 removeModelListener: function(modelClass, eventType, listener, thisObject) |
| 299 { | 328 { |
| 300 if (!this._listeners[eventType]) | 329 if (!this._modelListeners[eventType]) |
| 301 return; | 330 return; |
| 302 | 331 |
| 303 for (var i = 0; i < this._targets.length; ++i) { | 332 for (var i = 0; i < this._targets.length; ++i) { |
| 304 var model = this._targets[i]._modelByConstructor.get(modelClass); | 333 var model = this._targets[i]._modelByConstructor.get(modelClass); |
| 305 model.removeEventListener(eventType, listener, thisObject); | 334 model.removeEventListener(eventType, listener, thisObject); |
| 306 } | 335 } |
| 307 | 336 |
| 308 var listeners = this._listeners[eventType]; | 337 var listeners = this._modelListeners[eventType]; |
| 309 for (var i = 0; i < listeners.length; ++i) { | 338 for (var i = 0; i < listeners.length; ++i) { |
| 310 if (listeners[i].modelClass === modelClass && listeners[i].listener === listener && listeners[i].thisObject === thisObject) | 339 if (listeners[i].modelClass === modelClass && listeners[i].listener === listener && listeners[i].thisObject === thisObject) |
| 311 listeners.splice(i--, 1); | 340 listeners.splice(i--, 1); |
| 312 } | 341 } |
| 313 if (!listeners.length) | 342 if (!listeners.length) |
| 314 delete this._listeners[eventType]; | 343 delete this._modelListeners[eventType]; |
| 315 }, | 344 }, |
| 316 | 345 |
| 317 /** | 346 /** |
| 318 * @param {!WebInspector.TargetManager.Observer} targetObserver | 347 * @param {!WebInspector.TargetManager.Observer} targetObserver |
| 319 */ | 348 */ |
| 320 observeTargets: function(targetObserver) | 349 observeTargets: function(targetObserver) |
| 321 { | 350 { |
| 322 this.targets().forEach(targetObserver.targetAdded.bind(targetObserver)); | 351 this.targets().forEach(targetObserver.targetAdded.bind(targetObserver)); |
| 323 this._observers.push(targetObserver); | 352 this._observers.push(targetObserver); |
| 324 }, | 353 }, |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 351 callback(newTarget); | 380 callback(newTarget); |
| 352 } | 381 } |
| 353 }, | 382 }, |
| 354 | 383 |
| 355 /** | 384 /** |
| 356 * @param {!WebInspector.Target} target | 385 * @param {!WebInspector.Target} target |
| 357 */ | 386 */ |
| 358 addTarget: function(target) | 387 addTarget: function(target) |
| 359 { | 388 { |
| 360 this._targets.push(target); | 389 this._targets.push(target); |
| 390 if (this._targets.length === 1) | |
| 391 target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeM odel.EventTypes.InspectedURLChanged, this._dispatchInspectedURLChanged, this); | |
| 392 | |
| 361 var copy = this._observers.slice(); | 393 var copy = this._observers.slice(); |
| 362 for (var i = 0; i < copy.length; ++i) | 394 for (var i = 0; i < copy.length; ++i) |
| 363 copy[i].targetAdded(target); | 395 copy[i].targetAdded(target); |
| 364 | 396 |
| 365 for (var eventType in this._listeners) { | 397 for (var eventType in this._modelListeners) { |
| 366 var listeners = this._listeners[eventType]; | 398 var listeners = this._modelListeners[eventType]; |
| 367 for (var i = 0; i < listeners.length; ++i) { | 399 for (var i = 0; i < listeners.length; ++i) { |
| 368 var model = target._modelByConstructor.get(listeners[i].modelCla ss); | 400 var model = target._modelByConstructor.get(listeners[i].modelCla ss); |
| 369 model.addEventListener(eventType, listeners[i].listener, listene rs[i].thisObject); | 401 model.addEventListener(eventType, listeners[i].listener, listene rs[i].thisObject); |
| 370 } | 402 } |
| 371 } | 403 } |
| 372 }, | 404 }, |
| 373 | 405 |
| 374 /** | 406 /** |
| 375 * @param {!WebInspector.Target} target | 407 * @param {!WebInspector.Target} target |
| 376 */ | 408 */ |
| 377 removeTarget: function(target) | 409 removeTarget: function(target) |
| 378 { | 410 { |
| 379 this._targets.remove(target); | 411 this._targets.remove(target); |
| 412 if (this._targets.length === 0) | |
| 413 target.resourceTreeModel.removeEventListener(WebInspector.ResourceTr eeModel.EventTypes.InspectedURLChanged, this._dispatchInspectedURLChanged, this) ; | |
| 414 | |
| 380 var copy = this._observers.slice(); | 415 var copy = this._observers.slice(); |
| 381 for (var i = 0; i < copy.length; ++i) | 416 for (var i = 0; i < copy.length; ++i) |
| 382 copy[i].targetRemoved(target); | 417 copy[i].targetRemoved(target); |
| 383 | 418 |
| 384 for (var eventType in this._listeners) { | 419 for (var eventType in this._modelListeners) { |
| 385 var listeners = this._listeners[eventType]; | 420 var listeners = this._modelListeners[eventType]; |
| 386 for (var i = 0; i < listeners.length; ++i) { | 421 for (var i = 0; i < listeners.length; ++i) { |
| 387 var model = target._modelByConstructor.get(listeners[i].modelCla ss); | 422 var model = target._modelByConstructor.get(listeners[i].modelCla ss); |
| 388 model.removeEventListener(eventType, listeners[i].listener, list eners[i].thisObject); | 423 model.removeEventListener(eventType, listeners[i].listener, list eners[i].thisObject); |
| 389 } | 424 } |
| 390 } | 425 } |
| 391 }, | 426 }, |
| 392 | 427 |
| 393 /** | 428 /** |
| 394 * @return {!Array.<!WebInspector.Target>} | 429 * @return {!Array.<!WebInspector.Target>} |
| 395 */ | 430 */ |
| 396 targets: function() | 431 targets: function() |
| 397 { | 432 { |
| 398 return this._targets.slice(); | 433 return this._targets.slice(); |
| 399 }, | 434 }, |
| 400 | 435 |
| 401 /** | 436 /** |
| 402 * @return {?WebInspector.Target} | 437 * @return {?WebInspector.Target} |
| 403 */ | 438 */ |
| 404 mainTarget: function() | 439 mainTarget: function() |
| 405 { | 440 { |
| 406 return this._targets[0]; | 441 return this._targets[0]; |
| 407 } | 442 }, |
| 443 | |
| 444 __proto__: WebInspector.Object.prototype | |
| 408 } | 445 } |
| 409 | 446 |
| 410 /** | 447 /** |
| 411 * @interface | 448 * @interface |
| 412 */ | 449 */ |
| 413 WebInspector.TargetManager.Observer = function() | 450 WebInspector.TargetManager.Observer = function() |
| 414 { | 451 { |
| 415 } | 452 } |
| 416 | 453 |
| 417 WebInspector.TargetManager.Observer.prototype = { | 454 WebInspector.TargetManager.Observer.prototype = { |
| 418 /** | 455 /** |
| 419 * @param {!WebInspector.Target} target | 456 * @param {!WebInspector.Target} target |
| 420 */ | 457 */ |
| 421 targetAdded: function(target) { }, | 458 targetAdded: function(target) { }, |
| 422 | 459 |
| 423 /** | 460 /** |
| 424 * @param {!WebInspector.Target} target | 461 * @param {!WebInspector.Target} target |
| 425 */ | 462 */ |
| 426 targetRemoved: function(target) { }, | 463 targetRemoved: function(target) { }, |
| 427 } | 464 } |
| 428 | 465 |
| 429 /** | 466 /** |
| 430 * @type {!WebInspector.TargetManager} | 467 * @type {!WebInspector.TargetManager} |
| 431 */ | 468 */ |
| 432 WebInspector.targetManager = new WebInspector.TargetManager(); | 469 WebInspector.targetManager = new WebInspector.TargetManager(); |
| OLD | NEW |