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 |