| Index: third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
|
| index ed342a458c8f316ecf5bc4e70465781d26d81763..080e4d8136124696e820d9fb63acbb5aece4fc21 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
|
| @@ -3,443 +3,416 @@
|
| * Use of this source code is governed by a BSD-style license that can be
|
| * found in the LICENSE file.
|
| */
|
| -
|
| /**
|
| - * @constructor
|
| - * @extends {WebInspector.Object}
|
| + * @unrestricted
|
| */
|
| -WebInspector.TargetManager = function()
|
| -{
|
| - WebInspector.Object.call(this);
|
| +WebInspector.TargetManager = class extends WebInspector.Object {
|
| + constructor() {
|
| + super();
|
| /** @type {!Array.<!WebInspector.Target>} */
|
| this._targets = [];
|
| /** @type {!Array.<!WebInspector.TargetManager.Observer>} */
|
| this._observers = [];
|
| - this._observerCapabiliesMaskSymbol = Symbol("observerCapabilitiesMask");
|
| + this._observerCapabiliesMaskSymbol = Symbol('observerCapabilitiesMask');
|
| /** @type {!Map<symbol, !Array<{modelClass: !Function, thisObject: (!Object|undefined), listener: function(!WebInspector.Event)}>>} */
|
| this._modelListeners = new Map();
|
| this._isSuspended = false;
|
| + }
|
| +
|
| + suspendAllTargets() {
|
| + if (this._isSuspended)
|
| + return;
|
| + this._isSuspended = true;
|
| + this.dispatchEventToListeners(WebInspector.TargetManager.Events.SuspendStateChanged);
|
| +
|
| + for (var i = 0; i < this._targets.length; ++i) {
|
| + for (var model of this._targets[i].models())
|
| + model.suspendModel();
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @return {!Promise}
|
| + */
|
| + resumeAllTargets() {
|
| + if (!this._isSuspended)
|
| + throw new Error('Not suspended');
|
| + this._isSuspended = false;
|
| + this.dispatchEventToListeners(WebInspector.TargetManager.Events.SuspendStateChanged);
|
| +
|
| + var promises = [];
|
| + for (var i = 0; i < this._targets.length; ++i) {
|
| + for (var model of this._targets[i].models())
|
| + promises.push(model.resumeModel());
|
| + }
|
| + return Promise.all(promises);
|
| + }
|
| +
|
| + suspendAndResumeAllTargets() {
|
| + this.suspendAllTargets();
|
| + this.resumeAllTargets();
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + allTargetsSuspended() {
|
| + return this._isSuspended;
|
| + }
|
| +
|
| + /**
|
| + * @return {string}
|
| + */
|
| + inspectedURL() {
|
| + return this._targets[0] ? this._targets[0].inspectedURL() : '';
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.TargetManager.Events} eventName
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _redispatchEvent(eventName, event) {
|
| + this.dispatchEventToListeners(eventName, event.data);
|
| + }
|
| +
|
| + /**
|
| + * @param {boolean=} bypassCache
|
| + * @param {string=} injectedScript
|
| + */
|
| + reloadPage(bypassCache, injectedScript) {
|
| + if (!this._targets.length)
|
| + return;
|
| +
|
| + var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(this._targets[0]);
|
| + if (!resourceTreeModel)
|
| + return;
|
| +
|
| + resourceTreeModel.reloadPage(bypassCache, injectedScript);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Function} modelClass
|
| + * @param {symbol} eventType
|
| + * @param {function(!WebInspector.Event)} listener
|
| + * @param {!Object=} thisObject
|
| + */
|
| + addModelListener(modelClass, eventType, listener, thisObject) {
|
| + for (var i = 0; i < this._targets.length; ++i) {
|
| + var model = this._targets[i].model(modelClass);
|
| + if (model)
|
| + model.addEventListener(eventType, listener, thisObject);
|
| + }
|
| + if (!this._modelListeners.has(eventType))
|
| + this._modelListeners.set(eventType, []);
|
| + this._modelListeners.get(eventType).push({modelClass: modelClass, thisObject: thisObject, listener: listener});
|
| + }
|
| +
|
| + /**
|
| + * @param {!Function} modelClass
|
| + * @param {symbol} eventType
|
| + * @param {function(!WebInspector.Event)} listener
|
| + * @param {!Object=} thisObject
|
| + */
|
| + removeModelListener(modelClass, eventType, listener, thisObject) {
|
| + if (!this._modelListeners.has(eventType))
|
| + return;
|
| +
|
| + for (var i = 0; i < this._targets.length; ++i) {
|
| + var model = this._targets[i].model(modelClass);
|
| + if (model)
|
| + model.removeEventListener(eventType, listener, thisObject);
|
| + }
|
| +
|
| + var listeners = this._modelListeners.get(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)
|
| + this._modelListeners.delete(eventType);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.TargetManager.Observer} targetObserver
|
| + * @param {number=} capabilitiesMask
|
| + */
|
| + observeTargets(targetObserver, capabilitiesMask) {
|
| + if (this._observerCapabiliesMaskSymbol in targetObserver)
|
| + throw new Error('Observer can only be registered once');
|
| + targetObserver[this._observerCapabiliesMaskSymbol] = capabilitiesMask || 0;
|
| + this.targets(capabilitiesMask).forEach(targetObserver.targetAdded.bind(targetObserver));
|
| + this._observers.push(targetObserver);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.TargetManager.Observer} targetObserver
|
| + */
|
| + unobserveTargets(targetObserver) {
|
| + delete targetObserver[this._observerCapabiliesMaskSymbol];
|
| + this._observers.remove(targetObserver);
|
| + }
|
| +
|
| + /**
|
| + * @param {string} name
|
| + * @param {number} capabilitiesMask
|
| + * @param {!InspectorBackendClass.Connection.Factory} connectionFactory
|
| + * @param {?WebInspector.Target} parentTarget
|
| + * @return {!WebInspector.Target}
|
| + */
|
| + createTarget(name, capabilitiesMask, connectionFactory, parentTarget) {
|
| + var target = new WebInspector.Target(this, name, capabilitiesMask, connectionFactory, parentTarget);
|
| +
|
| + var logAgent = target.hasLogCapability() ? target.logAgent() : null;
|
| +
|
| + /** @type {!WebInspector.ConsoleModel} */
|
| + target.consoleModel = new WebInspector.ConsoleModel(target, logAgent);
|
| +
|
| + var networkManager = null;
|
| + var resourceTreeModel = null;
|
| + if (target.hasNetworkCapability())
|
| + networkManager = new WebInspector.NetworkManager(target);
|
| + if (networkManager && target.hasDOMCapability()) {
|
| + resourceTreeModel = new WebInspector.ResourceTreeModel(
|
| + target, networkManager, WebInspector.SecurityOriginManager.fromTarget(target));
|
| + new WebInspector.NetworkLog(target, resourceTreeModel, networkManager);
|
| + }
|
| +
|
| + /** @type {!WebInspector.RuntimeModel} */
|
| + target.runtimeModel = new WebInspector.RuntimeModel(target);
|
| +
|
| + if (target.hasJSCapability())
|
| + new WebInspector.DebuggerModel(target);
|
| +
|
| + if (resourceTreeModel) {
|
| + var domModel = new WebInspector.DOMModel(target);
|
| + // TODO(eostroukhov) CSSModel should not depend on RTM
|
| + new WebInspector.CSSModel(target, domModel);
|
| + }
|
| +
|
| + /** @type {?WebInspector.SubTargetsManager} */
|
| + target.subTargetsManager = target.hasTargetCapability() ? new WebInspector.SubTargetsManager(target) : null;
|
| + /** @type {!WebInspector.CPUProfilerModel} */
|
| + target.cpuProfilerModel = new WebInspector.CPUProfilerModel(target);
|
| + /** @type {!WebInspector.HeapProfilerModel} */
|
| + target.heapProfilerModel = new WebInspector.HeapProfilerModel(target);
|
| +
|
| + target.tracingManager = new WebInspector.TracingManager(target);
|
| +
|
| + if (target.subTargetsManager && target.hasBrowserCapability())
|
| + target.serviceWorkerManager = new WebInspector.ServiceWorkerManager(target, target.subTargetsManager);
|
| +
|
| + this.addTarget(target);
|
| + return target;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + * @return {!Array<!WebInspector.TargetManager.Observer>}
|
| + */
|
| + _observersForTarget(target) {
|
| + return this._observers.filter(
|
| + (observer) => target.hasAllCapabilities(observer[this._observerCapabiliesMaskSymbol] || 0));
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + addTarget(target) {
|
| + this._targets.push(target);
|
| + var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
|
| + if (this._targets.length === 1 && resourceTreeModel) {
|
| + resourceTreeModel[WebInspector.TargetManager._listenersSymbol] = [
|
| + setupRedispatch.call(
|
| + this, WebInspector.ResourceTreeModel.Events.MainFrameNavigated,
|
| + WebInspector.TargetManager.Events.MainFrameNavigated),
|
| + setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events.Load, WebInspector.TargetManager.Events.Load),
|
| + setupRedispatch.call(
|
| + this, WebInspector.ResourceTreeModel.Events.PageReloadRequested,
|
| + WebInspector.TargetManager.Events.PageReloadRequested),
|
| + setupRedispatch.call(
|
| + this, WebInspector.ResourceTreeModel.Events.WillReloadPage,
|
| + WebInspector.TargetManager.Events.WillReloadPage)
|
| + ];
|
| + }
|
| + var copy = this._observersForTarget(target);
|
| + for (var i = 0; i < copy.length; ++i)
|
| + copy[i].targetAdded(target);
|
| +
|
| + for (var pair of this._modelListeners) {
|
| + var listeners = pair[1];
|
| + for (var i = 0; i < listeners.length; ++i) {
|
| + var model = target.model(listeners[i].modelClass);
|
| + if (model)
|
| + model.addEventListener(/** @type {symbol} */ (pair[0]), listeners[i].listener, listeners[i].thisObject);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.ResourceTreeModel.Events} sourceEvent
|
| + * @param {!WebInspector.TargetManager.Events} targetEvent
|
| + * @return {!WebInspector.EventTarget.EventDescriptor}
|
| + * @this {WebInspector.TargetManager}
|
| + */
|
| + function setupRedispatch(sourceEvent, targetEvent) {
|
| + return resourceTreeModel.addEventListener(sourceEvent, this._redispatchEvent.bind(this, targetEvent));
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + removeTarget(target) {
|
| + if (!this._targets.includes(target))
|
| + return;
|
| + this._targets.remove(target);
|
| + var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
|
| + var treeModelListeners = resourceTreeModel && resourceTreeModel[WebInspector.TargetManager._listenersSymbol];
|
| + if (treeModelListeners)
|
| + WebInspector.EventTarget.removeEventListeners(treeModelListeners);
|
| +
|
| + var copy = this._observersForTarget(target);
|
| + for (var i = 0; i < copy.length; ++i)
|
| + copy[i].targetRemoved(target);
|
| +
|
| + for (var pair of this._modelListeners) {
|
| + var listeners = pair[1];
|
| + for (var i = 0; i < listeners.length; ++i) {
|
| + var model = target.model(listeners[i].modelClass);
|
| + if (model)
|
| + model.removeEventListener(/** @type {symbol} */ (pair[0]), listeners[i].listener, listeners[i].thisObject);
|
| + }
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {number=} capabilitiesMask
|
| + * @return {!Array.<!WebInspector.Target>}
|
| + */
|
| + targets(capabilitiesMask) {
|
| + if (!capabilitiesMask)
|
| + return this._targets.slice();
|
| + else
|
| + return this._targets.filter((target) => target.hasAllCapabilities(capabilitiesMask || 0));
|
| + }
|
| +
|
| + /**
|
| + *
|
| + * @param {number} id
|
| + * @return {?WebInspector.Target}
|
| + */
|
| + targetById(id) {
|
| + for (var i = 0; i < this._targets.length; ++i) {
|
| + if (this._targets[i].id() === id)
|
| + return this._targets[i];
|
| + }
|
| + return null;
|
| + }
|
| +
|
| + /**
|
| + * @return {?WebInspector.Target}
|
| + */
|
| + mainTarget() {
|
| + return this._targets[0] || null;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + suspendReload(target) {
|
| + var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
|
| + if (resourceTreeModel)
|
| + resourceTreeModel.suspendReload();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + resumeReload(target) {
|
| + var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
|
| + if (resourceTreeModel)
|
| + setImmediate(resourceTreeModel.resumeReload.bind(resourceTreeModel));
|
| + }
|
| +
|
| + /**
|
| + * @param {function()} webSocketConnectionLostCallback
|
| + */
|
| + connectToMainTarget(webSocketConnectionLostCallback) {
|
| + this._webSocketConnectionLostCallback = webSocketConnectionLostCallback;
|
| + this._connectAndCreateMainTarget();
|
| + }
|
| +
|
| + _connectAndCreateMainTarget() {
|
| + var capabilities = WebInspector.Target.Capability.Browser | WebInspector.Target.Capability.DOM |
|
| + WebInspector.Target.Capability.JS | WebInspector.Target.Capability.Log |
|
| + WebInspector.Target.Capability.Network | WebInspector.Target.Capability.Target;
|
| + if (Runtime.queryParam('isSharedWorker')) {
|
| + capabilities = WebInspector.Target.Capability.Browser | WebInspector.Target.Capability.Log |
|
| + WebInspector.Target.Capability.Network | WebInspector.Target.Capability.Target;
|
| + } else if (Runtime.queryParam('v8only')) {
|
| + capabilities = WebInspector.Target.Capability.JS;
|
| + }
|
| +
|
| + var target =
|
| + this.createTarget(WebInspector.UIString('Main'), capabilities, this._createMainConnection.bind(this), null);
|
| + target.runtimeAgent().runIfWaitingForDebugger();
|
| + }
|
| +
|
| + /**
|
| + * @param {!InspectorBackendClass.Connection.Params} params
|
| + * @return {!InspectorBackendClass.Connection}
|
| + */
|
| + _createMainConnection(params) {
|
| + if (Runtime.queryParam('ws')) {
|
| + var ws = 'ws://' + Runtime.queryParam('ws');
|
| + this._mainConnection = new WebInspector.WebSocketConnection(ws, this._webSocketConnectionLostCallback, params);
|
| + } else if (InspectorFrontendHost.isHostedMode()) {
|
| + this._mainConnection = new WebInspector.StubConnection(params);
|
| + } else {
|
| + this._mainConnection = new WebInspector.MainConnection(params);
|
| + }
|
| + return this._mainConnection;
|
| + }
|
| +
|
| + /**
|
| + * @param {function(string)} onMessage
|
| + * @return {!Promise<!InspectorBackendClass.Connection>}
|
| + */
|
| + interceptMainConnection(onMessage) {
|
| + var params = {onMessage: onMessage, onDisconnect: this._connectAndCreateMainTarget.bind(this)};
|
| + return this._mainConnection.disconnect().then(this._createMainConnection.bind(this, params));
|
| + }
|
| };
|
|
|
| /** @enum {symbol} */
|
| WebInspector.TargetManager.Events = {
|
| - InspectedURLChanged: Symbol("InspectedURLChanged"),
|
| - Load: Symbol("Load"),
|
| - MainFrameNavigated: Symbol("MainFrameNavigated"),
|
| - NameChanged: Symbol("NameChanged"),
|
| - PageReloadRequested: Symbol("PageReloadRequested"),
|
| - WillReloadPage: Symbol("WillReloadPage"),
|
| - TargetDisposed: Symbol("TargetDisposed"),
|
| - SuspendStateChanged: Symbol("SuspendStateChanged")
|
| + InspectedURLChanged: Symbol('InspectedURLChanged'),
|
| + Load: Symbol('Load'),
|
| + MainFrameNavigated: Symbol('MainFrameNavigated'),
|
| + NameChanged: Symbol('NameChanged'),
|
| + PageReloadRequested: Symbol('PageReloadRequested'),
|
| + WillReloadPage: Symbol('WillReloadPage'),
|
| + TargetDisposed: Symbol('TargetDisposed'),
|
| + SuspendStateChanged: Symbol('SuspendStateChanged')
|
| };
|
|
|
| -WebInspector.TargetManager._listenersSymbol = Symbol("WebInspector.TargetManager.Listeners");
|
| -
|
| -WebInspector.TargetManager.prototype = {
|
| - suspendAllTargets: function()
|
| - {
|
| - if (this._isSuspended)
|
| - return;
|
| - this._isSuspended = true;
|
| - this.dispatchEventToListeners(WebInspector.TargetManager.Events.SuspendStateChanged);
|
| -
|
| - for (var i = 0; i < this._targets.length; ++i) {
|
| - for (var model of this._targets[i].models())
|
| - model.suspendModel();
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @return {!Promise}
|
| - */
|
| - resumeAllTargets: function()
|
| - {
|
| - if (!this._isSuspended)
|
| - throw new Error("Not suspended");
|
| - this._isSuspended = false;
|
| - this.dispatchEventToListeners(WebInspector.TargetManager.Events.SuspendStateChanged);
|
| -
|
| - var promises = [];
|
| - for (var i = 0; i < this._targets.length; ++i) {
|
| - for (var model of this._targets[i].models())
|
| - promises.push(model.resumeModel());
|
| - }
|
| - return Promise.all(promises);
|
| - },
|
| -
|
| - suspendAndResumeAllTargets: function()
|
| - {
|
| - this.suspendAllTargets();
|
| - this.resumeAllTargets();
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - allTargetsSuspended: function()
|
| - {
|
| - return this._isSuspended;
|
| - },
|
| -
|
| - /**
|
| - * @return {string}
|
| - */
|
| - inspectedURL: function()
|
| - {
|
| - return this._targets[0] ? this._targets[0].inspectedURL() : "";
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.TargetManager.Events} eventName
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _redispatchEvent: function(eventName, event)
|
| - {
|
| - this.dispatchEventToListeners(eventName, event.data);
|
| - },
|
| -
|
| - /**
|
| - * @param {boolean=} bypassCache
|
| - * @param {string=} injectedScript
|
| - */
|
| - reloadPage: function(bypassCache, injectedScript)
|
| - {
|
| - if (!this._targets.length)
|
| - return;
|
| -
|
| - var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(this._targets[0]);
|
| - if (!resourceTreeModel)
|
| - return;
|
| -
|
| - resourceTreeModel.reloadPage(bypassCache, injectedScript);
|
| - },
|
| -
|
| - /**
|
| - * @param {!Function} modelClass
|
| - * @param {symbol} 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].model(modelClass);
|
| - if (model)
|
| - model.addEventListener(eventType, listener, thisObject);
|
| - }
|
| - if (!this._modelListeners.has(eventType))
|
| - this._modelListeners.set(eventType, []);
|
| - this._modelListeners.get(eventType).push({ modelClass: modelClass, thisObject: thisObject, listener: listener });
|
| - },
|
| -
|
| - /**
|
| - * @param {!Function} modelClass
|
| - * @param {symbol} eventType
|
| - * @param {function(!WebInspector.Event)} listener
|
| - * @param {!Object=} thisObject
|
| - */
|
| - removeModelListener: function(modelClass, eventType, listener, thisObject)
|
| - {
|
| - if (!this._modelListeners.has(eventType))
|
| - return;
|
| -
|
| - for (var i = 0; i < this._targets.length; ++i) {
|
| - var model = this._targets[i].model(modelClass);
|
| - if (model)
|
| - model.removeEventListener(eventType, listener, thisObject);
|
| - }
|
| -
|
| - var listeners = this._modelListeners.get(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)
|
| - this._modelListeners.delete(eventType);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.TargetManager.Observer} targetObserver
|
| - * @param {number=} capabilitiesMask
|
| - */
|
| - observeTargets: function(targetObserver, capabilitiesMask)
|
| - {
|
| - if (this._observerCapabiliesMaskSymbol in targetObserver)
|
| - throw new Error("Observer can only be registered once");
|
| - targetObserver[this._observerCapabiliesMaskSymbol] = capabilitiesMask || 0;
|
| - this.targets(capabilitiesMask).forEach(targetObserver.targetAdded.bind(targetObserver));
|
| - this._observers.push(targetObserver);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.TargetManager.Observer} targetObserver
|
| - */
|
| - unobserveTargets: function(targetObserver)
|
| - {
|
| - delete targetObserver[this._observerCapabiliesMaskSymbol];
|
| - this._observers.remove(targetObserver);
|
| - },
|
| -
|
| - /**
|
| - * @param {string} name
|
| - * @param {number} capabilitiesMask
|
| - * @param {!InspectorBackendClass.Connection.Factory} connectionFactory
|
| - * @param {?WebInspector.Target} parentTarget
|
| - * @return {!WebInspector.Target}
|
| - */
|
| - createTarget: function(name, capabilitiesMask, connectionFactory, parentTarget)
|
| - {
|
| - var target = new WebInspector.Target(this, name, capabilitiesMask, connectionFactory, parentTarget);
|
| -
|
| - var logAgent = target.hasLogCapability() ? target.logAgent() : null;
|
| -
|
| - /** @type {!WebInspector.ConsoleModel} */
|
| - target.consoleModel = new WebInspector.ConsoleModel(target, logAgent);
|
| -
|
| - var networkManager = null;
|
| - var resourceTreeModel = null;
|
| - if (target.hasNetworkCapability())
|
| - networkManager = new WebInspector.NetworkManager(target);
|
| - if (networkManager && target.hasDOMCapability()) {
|
| - resourceTreeModel = new WebInspector.ResourceTreeModel(target, networkManager, WebInspector.SecurityOriginManager.fromTarget(target));
|
| - new WebInspector.NetworkLog(target, resourceTreeModel, networkManager);
|
| - }
|
| -
|
| - /** @type {!WebInspector.RuntimeModel} */
|
| - target.runtimeModel = new WebInspector.RuntimeModel(target);
|
| -
|
| - if (target.hasJSCapability())
|
| - new WebInspector.DebuggerModel(target);
|
| -
|
| - if (resourceTreeModel) {
|
| - var domModel = new WebInspector.DOMModel(target);
|
| - // TODO(eostroukhov) CSSModel should not depend on RTM
|
| - new WebInspector.CSSModel(target, domModel);
|
| - }
|
| -
|
| - /** @type {?WebInspector.SubTargetsManager} */
|
| - target.subTargetsManager = target.hasTargetCapability() ? new WebInspector.SubTargetsManager(target) : null;
|
| - /** @type {!WebInspector.CPUProfilerModel} */
|
| - target.cpuProfilerModel = new WebInspector.CPUProfilerModel(target);
|
| - /** @type {!WebInspector.HeapProfilerModel} */
|
| - target.heapProfilerModel = new WebInspector.HeapProfilerModel(target);
|
| -
|
| - target.tracingManager = new WebInspector.TracingManager(target);
|
| -
|
| - if (target.subTargetsManager && target.hasBrowserCapability())
|
| - target.serviceWorkerManager = new WebInspector.ServiceWorkerManager(target, target.subTargetsManager);
|
| -
|
| - this.addTarget(target);
|
| - return target;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Target} target
|
| - * @return {!Array<!WebInspector.TargetManager.Observer>}
|
| - */
|
| - _observersForTarget: function(target)
|
| - {
|
| - return this._observers.filter((observer) => target.hasAllCapabilities(observer[this._observerCapabiliesMaskSymbol] || 0));
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - addTarget: function(target)
|
| - {
|
| - this._targets.push(target);
|
| - var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
|
| - if (this._targets.length === 1 && resourceTreeModel) {
|
| - resourceTreeModel[WebInspector.TargetManager._listenersSymbol] = [
|
| - setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events.MainFrameNavigated, WebInspector.TargetManager.Events.MainFrameNavigated),
|
| - setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events.Load, WebInspector.TargetManager.Events.Load),
|
| - setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events.PageReloadRequested, WebInspector.TargetManager.Events.PageReloadRequested),
|
| - setupRedispatch.call(this, WebInspector.ResourceTreeModel.Events.WillReloadPage, WebInspector.TargetManager.Events.WillReloadPage)
|
| - ];
|
| - }
|
| - var copy = this._observersForTarget(target);
|
| - for (var i = 0; i < copy.length; ++i)
|
| - copy[i].targetAdded(target);
|
| -
|
| - for (var pair of this._modelListeners) {
|
| - var listeners = pair[1];
|
| - for (var i = 0; i < listeners.length; ++i) {
|
| - var model = target.model(listeners[i].modelClass);
|
| - if (model)
|
| - model.addEventListener(/** @type {symbol} */ (pair[0]), listeners[i].listener, listeners[i].thisObject);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * @param {!WebInspector.ResourceTreeModel.Events} sourceEvent
|
| - * @param {!WebInspector.TargetManager.Events} targetEvent
|
| - * @return {!WebInspector.EventTarget.EventDescriptor}
|
| - * @this {WebInspector.TargetManager}
|
| - */
|
| - function setupRedispatch(sourceEvent, targetEvent)
|
| - {
|
| - return resourceTreeModel.addEventListener(sourceEvent, this._redispatchEvent.bind(this, targetEvent));
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - removeTarget: function(target)
|
| - {
|
| - if (!this._targets.includes(target))
|
| - return;
|
| - this._targets.remove(target);
|
| - var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
|
| - var treeModelListeners = resourceTreeModel && resourceTreeModel[WebInspector.TargetManager._listenersSymbol];
|
| - if (treeModelListeners)
|
| - WebInspector.EventTarget.removeEventListeners(treeModelListeners);
|
| -
|
| - var copy = this._observersForTarget(target);
|
| - for (var i = 0; i < copy.length; ++i)
|
| - copy[i].targetRemoved(target);
|
| -
|
| - for (var pair of this._modelListeners) {
|
| - var listeners = pair[1];
|
| - for (var i = 0; i < listeners.length; ++i) {
|
| - var model = target.model(listeners[i].modelClass);
|
| - if (model)
|
| - model.removeEventListener(/** @type {symbol} */ (pair[0]), listeners[i].listener, listeners[i].thisObject);
|
| - }
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {number=} capabilitiesMask
|
| - * @return {!Array.<!WebInspector.Target>}
|
| - */
|
| - targets: function(capabilitiesMask)
|
| - {
|
| - if (!capabilitiesMask)
|
| - return this._targets.slice();
|
| - else
|
| - return this._targets.filter((target) => target.hasAllCapabilities(capabilitiesMask || 0));
|
| - },
|
| -
|
| - /**
|
| - *
|
| - * @param {number} id
|
| - * @return {?WebInspector.Target}
|
| - */
|
| - targetById: function(id)
|
| - {
|
| - for (var i = 0; i < this._targets.length; ++i) {
|
| - if (this._targets[i].id() === id)
|
| - return this._targets[i];
|
| - }
|
| - return null;
|
| - },
|
| -
|
| - /**
|
| - * @return {?WebInspector.Target}
|
| - */
|
| - mainTarget: function()
|
| - {
|
| - return this._targets[0] || null;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - suspendReload: function(target)
|
| - {
|
| - var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
|
| - if (resourceTreeModel)
|
| - resourceTreeModel.suspendReload();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - resumeReload: function(target)
|
| - {
|
| - var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
|
| - if (resourceTreeModel)
|
| - setImmediate(resourceTreeModel.resumeReload.bind(resourceTreeModel));
|
| - },
|
| -
|
| - /**
|
| - * @param {function()} webSocketConnectionLostCallback
|
| - */
|
| - connectToMainTarget: function(webSocketConnectionLostCallback)
|
| - {
|
| - this._webSocketConnectionLostCallback = webSocketConnectionLostCallback;
|
| - this._connectAndCreateMainTarget();
|
| - },
|
| -
|
| - _connectAndCreateMainTarget: function()
|
| - {
|
| - var capabilities =
|
| - WebInspector.Target.Capability.Browser | WebInspector.Target.Capability.DOM |
|
| - WebInspector.Target.Capability.JS | WebInspector.Target.Capability.Log |
|
| - WebInspector.Target.Capability.Network | WebInspector.Target.Capability.Target;
|
| - if (Runtime.queryParam("isSharedWorker")) {
|
| - capabilities =
|
| - WebInspector.Target.Capability.Browser | WebInspector.Target.Capability.Log |
|
| - WebInspector.Target.Capability.Network | WebInspector.Target.Capability.Target;
|
| - } else if (Runtime.queryParam("v8only")) {
|
| - capabilities = WebInspector.Target.Capability.JS;
|
| - }
|
| -
|
| - var target = this.createTarget(WebInspector.UIString("Main"), capabilities, this._createMainConnection.bind(this), null);
|
| - target.runtimeAgent().runIfWaitingForDebugger();
|
| - },
|
| -
|
| - /**
|
| - * @param {!InspectorBackendClass.Connection.Params} params
|
| - * @return {!InspectorBackendClass.Connection}
|
| - */
|
| - _createMainConnection: function(params)
|
| - {
|
| - if (Runtime.queryParam("ws")) {
|
| - var ws = "ws://" + Runtime.queryParam("ws");
|
| - this._mainConnection = new WebInspector.WebSocketConnection(ws, this._webSocketConnectionLostCallback, params);
|
| - } else if (InspectorFrontendHost.isHostedMode()) {
|
| - this._mainConnection = new WebInspector.StubConnection(params);
|
| - } else {
|
| - this._mainConnection = new WebInspector.MainConnection(params);
|
| - }
|
| - return this._mainConnection;
|
| - },
|
| -
|
| - /**
|
| - * @param {function(string)} onMessage
|
| - * @return {!Promise<!InspectorBackendClass.Connection>}
|
| - */
|
| - interceptMainConnection: function(onMessage)
|
| - {
|
| - var params = {
|
| - onMessage: onMessage,
|
| - onDisconnect: this._connectAndCreateMainTarget.bind(this)
|
| - };
|
| - return this._mainConnection.disconnect().then(this._createMainConnection.bind(this, params));
|
| - },
|
| -
|
| - __proto__: WebInspector.Object.prototype
|
| -};
|
| +WebInspector.TargetManager._listenersSymbol = Symbol('WebInspector.TargetManager.Listeners');
|
|
|
| /**
|
| * @interface
|
| */
|
| -WebInspector.TargetManager.Observer = function()
|
| -{
|
| -};
|
| +WebInspector.TargetManager.Observer = function() {};
|
|
|
| WebInspector.TargetManager.Observer.prototype = {
|
| - /**
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - targetAdded: function(target) { },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - targetRemoved: function(target) { },
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + targetAdded: function(target) {},
|
| +
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + targetRemoved: function(target) {},
|
| };
|
|
|
| /**
|
|
|