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});
+                             }));
+});