| Index: Source/devtools/front_end/sdk/Target.js
|
| diff --git a/Source/devtools/front_end/sdk/Target.js b/Source/devtools/front_end/sdk/Target.js
|
| index 7d0c98327ce8a26d40e4de5800eee0ba975a51db..7245488f340256b46f309da3ba7a1e48f5057097 100644
|
| --- a/Source/devtools/front_end/sdk/Target.js
|
| +++ b/Source/devtools/front_end/sdk/Target.js
|
| @@ -21,6 +21,9 @@ WebInspector.Target = function(name, connection, callback)
|
| connection.addEventListener(InspectorBackendClass.Connection.Events.Disconnected, this._onDisconnect, this);
|
| this._id = WebInspector.Target._nextId++;
|
|
|
| + /** @type {!Map.<!Function, !WebInspector.SDKModel>} */
|
| + this._modelByConstructor = new Map();
|
| +
|
| /** @type {!Object.<string, boolean>} */
|
| this._capabilities = {};
|
| this.pageAgent().canScreencast(this._initializeCapability.bind(this, WebInspector.Target.Capabilities.canScreencast, null));
|
| @@ -104,8 +107,6 @@ WebInspector.Target.prototype = {
|
|
|
| /** @type {!WebInspector.NetworkManager} */
|
| this.networkManager = new WebInspector.NetworkManager(this);
|
| - if (!WebInspector.networkManager)
|
| - WebInspector.networkManager = this.networkManager;
|
|
|
| /** @type {!WebInspector.ResourceTreeModel} */
|
| this.resourceTreeModel = new WebInspector.ResourceTreeModel(this);
|
| @@ -239,6 +240,22 @@ WebInspector.SDKObject.prototype = {
|
|
|
| /**
|
| * @constructor
|
| + * @extends {WebInspector.SDKObject}
|
| + * @param {!Function} modelClass
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| +WebInspector.SDKModel = function(modelClass, target)
|
| +{
|
| + WebInspector.SDKObject.call(this, target);
|
| + target._modelByConstructor.put(modelClass, this);
|
| +}
|
| +
|
| +WebInspector.SDKModel.prototype = {
|
| + __proto__: WebInspector.SDKObject.prototype
|
| +}
|
| +
|
| +/**
|
| + * @constructor
|
| */
|
| WebInspector.TargetManager = function()
|
| {
|
| @@ -246,9 +263,52 @@ WebInspector.TargetManager = function()
|
| this._targets = [];
|
| /** @type {!Array.<!WebInspector.TargetManager.Observer>} */
|
| this._observers = [];
|
| + /** @type {!Object.<string, !Array.<{modelClass: !Function, thisObject: (!Object|undefined), listener: function(!WebInspector.Event)}>>} */
|
| + this._listeners = {};
|
| }
|
|
|
| WebInspector.TargetManager.prototype = {
|
| + /**
|
| + * @param {!Function} modelClass
|
| + * @param {string} eventType
|
| + * @param {function(!WebInspector.Event)} listener
|
| + * @param {!Object=} thisObject
|
| + */
|
| + addModelListener: function(modelClass, eventType, listener, thisObject)
|
| + {
|
| + for (var i = 0; i < this._targets.length; ++i) {
|
| + var model = this._targets[i]._modelByConstructor.get(modelClass);
|
| + model.addEventListener(eventType, listener, thisObject);
|
| + }
|
| + if (!this._listeners[eventType])
|
| + this._listeners[eventType] = [];
|
| + this._listeners[eventType].push({ modelClass: modelClass, thisObject: thisObject, listener: listener });
|
| + },
|
| +
|
| + /**
|
| + * @param {!Function} modelClass
|
| + * @param {string} eventType
|
| + * @param {function(!WebInspector.Event)} listener
|
| + * @param {!Object=} thisObject
|
| + */
|
| + removeModelListener: function(modelClass, eventType, listener, thisObject)
|
| + {
|
| + if (!this._listeners[eventType])
|
| + return;
|
| +
|
| + for (var i = 0; i < this._targets.length; ++i) {
|
| + var model = this._targets[i]._modelByConstructor.get(modelClass);
|
| + model.removeEventListener(eventType, listener, thisObject);
|
| + }
|
| +
|
| + var listeners = this._listeners[eventType];
|
| + for (var i = 0; i < listeners.length; ++i) {
|
| + if (listeners[i].modelClass === modelClass && listeners[i].listener === listener && listeners[i].thisObject === thisObject)
|
| + listeners.splice(i--, 1);
|
| + }
|
| + if (!listeners.length)
|
| + delete this._listeners[eventType];
|
| + },
|
|
|
| /**
|
| * @param {!WebInspector.TargetManager.Observer} targetObserver
|
| @@ -289,14 +349,22 @@ WebInspector.TargetManager.prototype = {
|
| },
|
|
|
| /**
|
| - * @param {!WebInspector.Target} newTarget
|
| + * @param {!WebInspector.Target} target
|
| */
|
| - addTarget: function(newTarget)
|
| + addTarget: function(target)
|
| {
|
| - this._targets.push(newTarget);
|
| - var copy = this._observers;
|
| + this._targets.push(target);
|
| + var copy = this._observers.slice();
|
| for (var i = 0; i < copy.length; ++i)
|
| - copy[i].targetAdded(newTarget);
|
| + copy[i].targetAdded(target);
|
| +
|
| + for (var eventType in this._listeners) {
|
| + var listeners = this._listeners[eventType];
|
| + for (var i = 0; i < listeners.length; ++i) {
|
| + var model = target._modelByConstructor.get(listeners[i].modelClass);
|
| + model.addEventListener(eventType, listeners[i].listener, listeners[i].thisObject);
|
| + }
|
| + }
|
| },
|
|
|
| /**
|
| @@ -308,6 +376,14 @@ WebInspector.TargetManager.prototype = {
|
| var copy = this._observers.slice();
|
| for (var i = 0; i < copy.length; ++i)
|
| copy[i].targetRemoved(target);
|
| +
|
| + for (var eventType in this._listeners) {
|
| + var listeners = this._listeners[eventType];
|
| + for (var i = 0; i < listeners.length; ++i) {
|
| + var model = target._modelByConstructor.get(listeners[i].modelClass);
|
| + model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject);
|
| + }
|
| + }
|
| },
|
|
|
| /**
|
|
|