Use TargetManager.mainFrameTarget instead of mainTarget in CoveragePlugin and CoverageView.
The latter will be tests by layout tests under third_party/blink/web_tests/http/tests/devtools/coverage/
Bug: 1370050
Change-Id: Ide9d5bccaf536f749823e6aedf23e28713ad072c
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3999544
Reviewed-by: Wolfgang Beyer <wolfi@chromium.org>
Auto-Submit: Danil Somsikov <dsv@chromium.org>
Commit-Queue: Wolfgang Beyer <wolfi@chromium.org>
diff --git a/front_end/panels/coverage/CoverageView.ts b/front_end/panels/coverage/CoverageView.ts
index 682c8f3..9b6c58d 100644
--- a/front_end/panels/coverage/CoverageView.ts
+++ b/front_end/panels/coverage/CoverageView.ts
@@ -155,7 +155,7 @@
this.toggleRecordButton = UI.Toolbar.Toolbar.createActionButton(this.toggleRecordAction);
toolbar.appendToolbarItem(this.toggleRecordButton);
- const mainTarget = SDK.TargetManager.TargetManager.instance().mainTarget();
+ const mainTarget = SDK.TargetManager.TargetManager.instance().mainFrameTarget();
const mainTargetSupportsRecordOnReload = mainTarget && mainTarget.model(SDK.ResourceTreeModel.ResourceTreeModel);
this.inlineReloadButton = null;
if (mainTargetSupportsRecordOnReload) {
@@ -324,7 +324,7 @@
}
this.reset();
- const mainTarget = SDK.TargetManager.TargetManager.instance().mainTarget();
+ const mainTarget = SDK.TargetManager.TargetManager.instance().mainFrameTarget();
if (!mainTarget) {
return;
}
diff --git a/front_end/panels/sources/CoveragePlugin.ts b/front_end/panels/sources/CoveragePlugin.ts
index 5767aa0..5692102 100644
--- a/front_end/panels/sources/CoveragePlugin.ts
+++ b/front_end/panels/sources/CoveragePlugin.ts
@@ -55,7 +55,7 @@
void UI.ViewManager.ViewManager.instance().showView('coverage');
});
- const mainTarget = SDK.TargetManager.TargetManager.instance().mainTarget();
+ const mainTarget = SDK.TargetManager.TargetManager.instance().mainFrameTarget();
if (mainTarget) {
this.model = mainTarget.model(Coverage.CoverageModel.CoverageModel);
if (this.model) {
diff --git a/test/unittests/front_end/panels/sources/BUILD.gn b/test/unittests/front_end/panels/sources/BUILD.gn
index bcc904b..cc463bb 100644
--- a/test/unittests/front_end/panels/sources/BUILD.gn
+++ b/test/unittests/front_end/panels/sources/BUILD.gn
@@ -8,6 +8,7 @@
testonly = true
sources = [
"BreakpointsSidebarPane_test.ts",
+ "CoveragePlugin_test.ts",
"DebuggerPlugin_test.ts",
"FilePathScoreFunction_test.ts",
"OutlineQuickOpen_test.ts",
diff --git a/test/unittests/front_end/panels/sources/CoveragePlugin_test.ts b/test/unittests/front_end/panels/sources/CoveragePlugin_test.ts
new file mode 100644
index 0000000..7d75abe
--- /dev/null
+++ b/test/unittests/front_end/panels/sources/CoveragePlugin_test.ts
@@ -0,0 +1,83 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import * as SDK from '../../../../../front_end/core/sdk/sdk.js';
+import * as Bindings from '../../../../../front_end/models/bindings/bindings.js';
+import * as Workspace from '../../../../../front_end/models/workspace/workspace.js';
+import * as Coverage from '../../../../../front_end/panels/coverage/coverage.js';
+import * as Sources from '../../../../../front_end/panels/sources/sources.js';
+import {createTarget} from '../../helpers/EnvironmentHelpers.js';
+import {describeWithMockConnection} from '../../helpers/MockConnection.js';
+import {createContentProviderUISourceCode} from '../../helpers/UISourceCodeHelpers.js';
+
+import type * as Platform from '../../../../../front_end/core/platform/platform.js';
+
+describeWithMockConnection('CoveragePlugin', () => {
+ const tests = (targetFactory: () => SDK.Target.Target) => {
+ let target: SDK.Target.Target;
+ let uiSourceCode: Workspace.UISourceCode.UISourceCode;
+ let model: Coverage.CoverageModel.CoverageModel;
+ let coverageInfo: Coverage.CoverageModel.URLCoverageInfo;
+ const URL = 'test.js' as Platform.DevToolsPath.UrlString;
+
+ beforeEach(() => {
+ target = targetFactory();
+ const workspace = Workspace.Workspace.WorkspaceImpl.instance();
+ const targetManager = SDK.TargetManager.TargetManager.instance();
+ const resourceMapping = new Bindings.ResourceMapping.ResourceMapping(targetManager, workspace);
+ Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance({
+ forceNew: true,
+ resourceMapping,
+ targetManager,
+ });
+ Bindings.CSSWorkspaceBinding.CSSWorkspaceBinding.instance({
+ forceNew: true,
+ resourceMapping,
+ targetManager,
+ });
+
+ model = target.model(Coverage.CoverageModel.CoverageModel) as Coverage.CoverageModel.CoverageModel;
+ coverageInfo = new Coverage.CoverageModel.URLCoverageInfo(URL);
+ coverageInfo.addToSizes(9, 28);
+ sinon.stub(model, 'getCoverageForUrl').withArgs(URL).returns(coverageInfo);
+ ({uiSourceCode} = createContentProviderUISourceCode({url: URL, mimeType: 'text/javascript'}));
+ });
+
+ it('shows stats', async () => {
+ const coveragePlugin = new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode);
+ const toolbarItem = (await coveragePlugin.rightToolbarItems())[0];
+ assert.strictEqual('Show Details', toolbarItem.element.title);
+ assert.strictEqual(
+ 'Coverage: 32.1%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+ });
+
+ it('updates stats', async () => {
+ const coveragePlugin = new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode);
+ const toolbarItem = (await coveragePlugin.rightToolbarItems())[0];
+ assert.strictEqual(
+ 'Coverage: 32.1%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+
+ coverageInfo.addToSizes(10, 2);
+ assert.strictEqual(
+ 'Coverage: 63.3%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+ });
+
+ it('resets stats', async () => {
+ const coveragePlugin = new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode);
+ const toolbarItem = (await coveragePlugin.rightToolbarItems())[0];
+ assert.strictEqual(
+ 'Coverage: 32.1%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+
+ model.dispatchEventToListeners(Coverage.CoverageModel.Events.CoverageReset);
+ assert.strictEqual('Click to show Coverage Panel', toolbarItem.element.title);
+ assert.strictEqual('Coverage: n/a', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+ });
+ };
+ describe('without tab taget', () => tests(() => createTarget()));
+ describe('with tab taget', () => tests(() => {
+ const tabTarget = createTarget({type: SDK.Target.Type.Tab});
+ createTarget({parentTarget: tabTarget, subtype: 'prerender'});
+ return createTarget({parentTarget: tabTarget});
+ }));
+});