Commit 1c39a211 authored by Dmitry Gozman's avatar Dmitry Gozman Committed by Commit Bot

[DevTools] Get rid of target observers based on capabilities

We don't actually need these - we can use model observers instead.

Bug: 882467
Change-Id: If847fcf4f2968430821de316e3b346a25a2a3592
Reviewed-on: https://chromium-review.googlesource.com/c/1311916
Commit-Queue: Dmitry Gozman <dgozman@chromium.org>
Reviewed-by: default avatarJoel Einbinder <einbinder@chromium.org>
Cr-Commit-Position: refs/heads/master@{#604605}
parent 7ed64fb4
......@@ -197,7 +197,7 @@ InspectorMain.BackendSettingsSync = class {
this._emulatePageFocusSetting = Common.settings.moduleSetting('emulatePageFocus');
this._emulatePageFocusSetting.addChangeListener(this._update, this);
SDK.targetManager.observeTargets(this, SDK.Target.Capability.Browser);
SDK.targetManager.observeTargets(this);
}
/**
......@@ -215,7 +215,8 @@ InspectorMain.BackendSettingsSync = class {
}
_update() {
SDK.targetManager.targets(SDK.Target.Capability.Browser).forEach(this._updateTarget, this);
for (const target of SDK.targetManager.targets())
this._updateTarget(target);
}
/**
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @implements {SDK.TargetManager.Observer}
* @implements {SDK.SDKModelObserver<!SDK.RuntimeModel>}
* @unrestricted
*/
Main.ExecutionContextSelector = class {
......@@ -11,7 +11,6 @@ Main.ExecutionContextSelector = class {
* @param {!UI.Context} context
*/
constructor(targetManager, context) {
targetManager.observeTargets(this, SDK.Target.Capability.JS);
context.addFlavorChangeListener(SDK.ExecutionContext, this._executionContextChanged, this);
context.addFlavorChangeListener(SDK.Target, this._targetChanged, this);
......@@ -24,13 +23,14 @@ Main.ExecutionContextSelector = class {
this);
this._targetManager = targetManager;
this._context = context;
targetManager.observeModels(SDK.RuntimeModel, this);
}
/**
* @override
* @param {!SDK.Target} target
* @param {!SDK.RuntimeModel} runtimeModel
*/
targetAdded(target) {
modelAdded(runtimeModel) {
// Defer selecting default target since we need all clients to get their
// targetAdded notifications first.
setImmediate(deferred.bind(this));
......@@ -41,22 +41,22 @@ Main.ExecutionContextSelector = class {
function deferred() {
// We always want the second context for the service worker targets.
if (!this._context.flavor(SDK.Target))
this._context.setFlavor(SDK.Target, target);
this._context.setFlavor(SDK.Target, runtimeModel.target());
}
}
/**
* @override
* @param {!SDK.Target} target
* @param {!SDK.RuntimeModel} runtimeModel
*/
targetRemoved(target) {
modelRemoved(runtimeModel) {
const currentExecutionContext = this._context.flavor(SDK.ExecutionContext);
if (currentExecutionContext && currentExecutionContext.target() === target)
if (currentExecutionContext && currentExecutionContext.runtimeModel === runtimeModel)
this._currentExecutionContextGone();
const targets = this._targetManager.targets(SDK.Target.Capability.JS);
if (this._context.flavor(SDK.Target) === target && targets.length)
this._context.setFlavor(SDK.Target, targets[0]);
const models = this._targetManager.models(SDK.RuntimeModel);
if (this._context.flavor(SDK.Target) === runtimeModel.target() && models.length)
this._context.setFlavor(SDK.Target, models[0].target());
}
/**
......
......@@ -61,7 +61,7 @@ Resources.ClearStorageView = class extends UI.ThrottledWidget {
this._appendItem(caches, Common.UIString('Cache storage'), 'cache_storage');
this._appendItem(caches, Common.UIString('Application cache'), 'appcache');
SDK.targetManager.observeTargets(this, SDK.Target.Capability.Browser);
SDK.targetManager.observeTargets(this);
}
/**
......
......@@ -886,7 +886,7 @@ SDK.NetworkDispatcher = class {
};
/**
* @implements {SDK.TargetManager.Observer}
* @implements {SDK.SDKModelObserver<!SDK.NetworkManager>}
* @unrestricted
*/
SDK.MultitargetNetworkManager = class extends Common.Object {
......@@ -911,7 +911,7 @@ SDK.MultitargetNetworkManager = class extends Common.Object {
/** @type {!Multimap<!SDK.MultitargetNetworkManager.RequestInterceptor, !SDK.MultitargetNetworkManager.InterceptionPattern>} */
this._urlsForRequestInterceptor = new Multimap();
SDK.targetManager.observeTargets(this, SDK.Target.Capability.Network);
SDK.targetManager.observeModels(SDK.NetworkManager, this);
}
/**
......@@ -929,10 +929,10 @@ SDK.MultitargetNetworkManager = class extends Common.Object {
/**
* @override
* @param {!SDK.Target} target
* @param {!SDK.NetworkManager} networkManager
*/
targetAdded(target) {
const networkAgent = target.networkAgent();
modelAdded(networkManager) {
const networkAgent = networkManager.target().networkAgent();
if (this._extraHeaders)
networkAgent.setExtraHTTPHeaders(this._extraHeaders);
if (this._currentUserAgent())
......@@ -948,16 +948,16 @@ SDK.MultitargetNetworkManager = class extends Common.Object {
/**
* @override
* @param {!SDK.Target} target
* @param {!SDK.NetworkManager} networkManager
*/
targetRemoved(target) {
modelRemoved(networkManager) {
for (const entry of this._inflightMainResourceRequests) {
const manager = SDK.NetworkManager.forRequest(/** @type {!SDK.NetworkRequest} */ (entry[1]));
if (manager.target() !== target)
if (manager !== networkManager)
continue;
this._inflightMainResourceRequests.delete(/** @type {string} */ (entry[0]));
}
this._agents.delete(target.networkAgent());
this._agents.delete(networkManager.target().networkAgent());
}
/**
......
......@@ -11,7 +11,6 @@ SDK.TargetManager = class extends Common.Object {
this._targets = [];
/** @type {!Array.<!SDK.TargetManager.Observer>} */
this._observers = [];
this._observerCapabiliesMaskSymbol = Symbol('observerCapabilitiesMask');
/** @type {!Multimap<symbol, !{modelClass: !Function, thisObject: (!Object|undefined), listener: function(!Common.Event)}>} */
this._modelListeners = new Multimap();
/** @type {!Multimap<function(new:SDK.SDKModel, !SDK.Target), !SDK.SDKModelObserver>} */
......@@ -150,13 +149,12 @@ SDK.TargetManager = class extends Common.Object {
/**
* @param {!SDK.TargetManager.Observer} targetObserver
* @param {number=} capabilitiesMask
*/
observeTargets(targetObserver, capabilitiesMask) {
if (this._observerCapabiliesMaskSymbol in targetObserver)
observeTargets(targetObserver) {
if (this._observers.indexOf(targetObserver) !== -1)
throw new Error('Observer can only be registered once');
targetObserver[this._observerCapabiliesMaskSymbol] = capabilitiesMask || 0;
this.targets(capabilitiesMask).forEach(targetObserver.targetAdded.bind(targetObserver));
for (const target of this._targets)
targetObserver.targetAdded(target);
this._observers.push(targetObserver);
}
......@@ -164,7 +162,6 @@ SDK.TargetManager = class extends Common.Object {
* @param {!SDK.TargetManager.Observer} targetObserver
*/
unobserveTargets(targetObserver) {
delete targetObserver[this._observerCapabiliesMaskSymbol];
this._observers.remove(targetObserver);
}
......@@ -181,9 +178,9 @@ SDK.TargetManager = class extends Common.Object {
target.createModels(new Set(this._modelObservers.keysArray()));
this._targets.push(target);
const copy = this._observersForTarget(target);
for (let i = 0; i < copy.length; ++i)
copy[i].targetAdded(target);
const copy = this._observers.slice(0);
for (const observer of copy)
observer.targetAdded(target);
for (const modelClass of target.models().keys())
this.modelAdded(target, modelClass, target.models().get(modelClass));
......@@ -199,15 +196,6 @@ SDK.TargetManager = class extends Common.Object {
return target;
}
/**
* @param {!SDK.Target} target
* @return {!Array<!SDK.TargetManager.Observer>}
*/
_observersForTarget(target) {
return this._observers.filter(
observer => target.hasAllCapabilities(observer[this._observerCapabiliesMaskSymbol] || 0));
}
/**
* @param {!SDK.Target} target
*/
......@@ -219,9 +207,9 @@ SDK.TargetManager = class extends Common.Object {
for (const modelClass of target.models().keys())
this._modelRemoved(target, modelClass, target.models().get(modelClass));
const copy = this._observersForTarget(target);
for (let i = 0; i < copy.length; ++i)
copy[i].targetRemoved(target);
const copy = this._observers.slice(0);
for (const observer of copy)
observer.targetRemoved(target);
for (const key of this._modelListeners.keysArray()) {
for (const info of this._modelListeners.get(key)) {
......@@ -233,14 +221,10 @@ SDK.TargetManager = class extends Common.Object {
}
/**
* @param {number=} capabilitiesMask
* @return {!Array.<!SDK.Target>}
*/
targets(capabilitiesMask) {
if (!capabilitiesMask)
return this._targets.slice();
else
return this._targets.filter(target => target.hasAllCapabilities(capabilitiesMask || 0));
targets() {
return this._targets.slice();
}
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment