Liu Song’s Projects


~/Projects/chrome-devtools-frontend

git clone https://code.lsong.org/chrome-devtools-frontend

Commit

Commit
aeb9b655acc9155a9efca5a30f7c733b543f3c8f
Author
Danil Somsikov <[email protected]>
Date
2022-11-21 15:24:46 +0100 +0100
Diffstat
 front_end/panels/application/ServiceWorkersView.ts | 5 
 test/unittests/front_end/panels/application/BUILD.gn | 1 
 test/unittests/front_end/panels/application/ServiceWorkersView_test.ts | 56 

Using TargetManager.mainFrameTarget instead of relying on the first model seen in the ServiceWorkersView.

Bug: 1370050
Change-Id: I43d0538397fced62f51d7b525b6e6fed97b2eb72
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4042941
Commit-Queue: Wolfgang Beyer <[email protected]>
Auto-Submit: Danil Somsikov <[email protected]>
Reviewed-by: Wolfgang Beyer <[email protected]>
Commit-Queue: Danil Somsikov <[email protected]>


diff --git a/front_end/panels/application/ServiceWorkersView.ts b/front_end/panels/application/ServiceWorkersView.ts
index a6d3a9ee429a04c230d7a1a0ca8481114c4779a8..31a214820ea8ddd349390b601b064f505b36923b 100644
--- a/front_end/panels/application/ServiceWorkersView.ts
+++ b/front_end/panels/application/ServiceWorkersView.ts
@@ -184,7 +184,7 @@ };
 
 export class ServiceWorkersView extends UI.Widget.VBox implements
     SDK.TargetManager.SDKModelObserver<SDK.ServiceWorkerManager.ServiceWorkerManager> {
-  private currentWorkersView: UI.ReportView.ReportView;
+  currentWorkersView: UI.ReportView.ReportView;
   private readonly toolbar: UI.Toolbar.Toolbar;
   private readonly sections: Map<SDK.ServiceWorkerManager.ServiceWorkerRegistration, Section>;
   private manager: SDK.ServiceWorkerManager.ServiceWorkerManager|null;
@@ -277,9 +277,8 @@     document.body.addEventListener(UI.InspectorView.Events.DrawerChange, drawerChangeHandler);
   }
 
   modelAdded(serviceWorkerManager: SDK.ServiceWorkerManager.ServiceWorkerManager): void {
-// Copyright (c) 2015 The Chromium Authors. All rights reserved.
+  *@description Placeholder text for the input box where a user is asked for a test tag to sync. This is used as a compound noun, not as a verb.
 import * as SDK from '../../core/sdk/sdk.js';
-// Copyright (c) 2015 The Chromium Authors. All rights reserved.
       return;
     }
     this.manager = serviceWorkerManager;




diff --git a/test/unittests/front_end/panels/application/BUILD.gn b/test/unittests/front_end/panels/application/BUILD.gn
index 51061a1272d40bb0359d0a175056bc55bb89a796..1f49b69673197a339f455d5e5345f6145a96f56f 100644
--- a/test/unittests/front_end/panels/application/BUILD.gn
+++ b/test/unittests/front_end/panels/application/BUILD.gn
@@ -16,6 +16,7 @@     "InterestGroupTreeElement_test.ts",
     "ReportingApiReportsView_test.ts",
     "ReportingApiView_test.ts",
     "ServiceWorkerUpdateCycleView_test.ts",
+    "ServiceWorkersView_test.ts",
     "SharedStorageEventsView_test.ts",
     "SharedStorageModel_test.ts",
     "StorageView_test.ts",




diff --git a/test/unittests/front_end/panels/application/ServiceWorkersView_test.ts b/test/unittests/front_end/panels/application/ServiceWorkersView_test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..287bc3e6dd9ba3f1c76ae57e4af5fbc1c21d3b3e
--- /dev/null
+++ b/test/unittests/front_end/panels/application/ServiceWorkersView_test.ts
@@ -0,0 +1,56 @@
+// 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 {assertNotNullOrUndefined} from '../../../../../front_end/core/platform/platform.js';
+import * as SDK from '../../../../../front_end/core/sdk/sdk.js';
+import * as Application from '../../../../../front_end/panels/application/application.js';
+import {createTarget} from '../../helpers/EnvironmentHelpers.js';
+import {describeWithMockConnection} from '../../helpers/MockConnection.js';
+
+const {assert} = chai;
+
+describeWithMockConnection('ServiceWorkersView', () => {
+  const tests = (targetFactory: () => SDK.Target.Target) => {
+    let target: SDK.Target.Target;
+    let view: Application.ServiceWorkersView.ServiceWorkersView;
+
+    beforeEach(() => {
+      target = targetFactory();
+    });
+
+    afterEach(() => {
+      view.detach();
+    });
+
+    it('shows service worker registrations', async () => {
+      view = new Application.ServiceWorkersView.ServiceWorkersView();
+      view.markAsRoot();
+      view.show(document.body);
+      const serviceWorkersManager = target.model(SDK.ServiceWorkerManager.ServiceWorkerManager);
+      assertNotNullOrUndefined(serviceWorkersManager);
+      const securityOriginManager = target.model(SDK.SecurityOriginManager.SecurityOriginManager);
+      assertNotNullOrUndefined(securityOriginManager);
+      const ORIGIN = 'example.com';
+      sinon.stub(securityOriginManager, 'securityOrigins').returns([ORIGIN]);
+      const SCOPE_URL = 'SCOPE_URL';
+      serviceWorkersManager.dispatchEventToListeners(SDK.ServiceWorkerManager.Events.RegistrationUpdated, {
+        scopeURL: SCOPE_URL,
+        securityOrigin: ORIGIN,
+        versionsByMode: () => new Map(),
+        fingerprint: () => {},
+      } as SDK.ServiceWorkerManager.ServiceWorkerRegistration);
+
+      const sectionTitle = view.currentWorkersView.contentElement.querySelector('.report-section-title');
+      assertNotNullOrUndefined(sectionTitle);
+      assert.strictEqual(sectionTitle.textContent, SCOPE_URL);
+    });
+  };
+
+  describe('without tab target', () => tests(createTarget));
+  describe('with tab target', () => tests(() => {
+                                const tabTarget = createTarget({type: SDK.Target.Type.Tab});
+                                createTarget({parentTarget: tabTarget, subtype: 'prerender'});
+                                return createTarget({parentTarget: tabTarget});
+                              }));
+});