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