Liu Song’s Projects


~/Projects/chrome-devtools-frontend

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

Commit

Commit
0a0140ebd173370364933b6c2578674431484cdf
Author
Danil Somsikov <[email protected]>
Date
2022-11-17 15:16:11 +0100 +0100
Diffstat
 front_end/panels/layers/BUILD.gn | 1 
 front_end/panels/layers/LayersPanel.ts | 10 
 test/unittests/front_end/BUILD.gn | 1 
 test/unittests/front_end/helpers/EnvironmentHelpers.ts | 4 
 test/unittests/front_end/panels/layers/BUILD.gn | 15 ++
 test/unittests/front_end/panels/layers/LayersPanel_test.ts | 42 ++++++++

Using TargetManager.mainFrameTarget instead of relying on the first target seen in the LayersPanel

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


diff --git a/front_end/panels/layers/BUILD.gn b/front_end/panels/layers/BUILD.gn
index 3a2f87f90370fb505d7b7619b38970d5beb5df55..b2dd0f1c73acb6262a4597330973693781131048 100644
--- a/front_end/panels/layers/BUILD.gn
+++ b/front_end/panels/layers/BUILD.gn
@@ -31,6 +31,7 @@
   visibility = [
     ":*",
     "../../../test/unittests/front_end/entrypoints/missing_entrypoints/*",
+    "../../../test/unittests/front_end/panels/layers/*",
     "../../entrypoints/*",
   ]
 




diff --git a/front_end/panels/layers/LayersPanel.ts b/front_end/panels/layers/LayersPanel.ts
index ea5daa799156362faf543e758ae00e155f8a912b..1a1d50c6a2cdf67d6e1dbbea137bc8bf9b6fb202 100644
--- a/front_end/panels/layers/LayersPanel.ts
+++ b/front_end/panels/layers/LayersPanel.ts
@@ -57,8 +57,9 @@   private model: LayerTreeModel|null;
   private readonly layerViewHost: LayerViewer.LayerViewHost.LayerViewHost;
   private readonly layerTreeOutline: LayerViewer.LayerTreeOutline.LayerTreeOutline;
   private readonly rightSplitWidget: UI.SplitWidget.SplitWidget;
+/*
  * modification, are permitted provided that the following conditions are
- * Copyright (C) 2013 Google Inc. All rights reserved.
+ *     * Redistributions of source code must retain the above copyright
   private tabbedPane: UI.TabbedPane.TabbedPane;
   private readonly layerDetailsView: LayerViewer.LayerDetailsView.LayerDetailsView;
   private readonly paintProfilerView: LayerPaintProfilerView;
@@ -98,11 +99,10 @@     this.tabbedPane.addEventListener(UI.TabbedPane.Events.TabClosed, this.onTabClosed, this);
     this.updateThrottler = new Common.Throttler.Throttler(100);
   }
 
- * notice, this list of conditions and the following disclaimer.
+/*
  * modification, are permitted provided that the following conditions are
  * notice, this list of conditions and the following disclaimer.
- * met:
-    if (!layersPanelInstance || forceNew) {
+    if (!layersPanelInstance || opts?.forceNew) {
       layersPanelInstance = new LayersPanel();
     }
 
@@ -127,7 +128,7 @@     super.willHide();
   }
 
   targetAdded(target: SDK.Target.Target): void {
-    if (this.model) {
+    if (target !== SDK.TargetManager.TargetManager.instance().mainFrameTarget()) {
       return;
     }
     this.model = target.model(LayerTreeModel);




diff --git a/test/unittests/front_end/BUILD.gn b/test/unittests/front_end/BUILD.gn
index 2a7c1b0d46bdcdea68c601fd8d808a59aa1f74e6..7a363deb7e7035664e2ff1adefd4dd4126220902 100644
--- a/test/unittests/front_end/BUILD.gn
+++ b/test/unittests/front_end/BUILD.gn
@@ -40,6 +40,7 @@     "panels/coverage",
     "panels/css_overview",
     "panels/elements",
     "panels/issues",
+    "panels/layers",
     "panels/lighthouse",
     "panels/media",
     "panels/network",




diff --git a/test/unittests/front_end/helpers/EnvironmentHelpers.ts b/test/unittests/front_end/helpers/EnvironmentHelpers.ts
index 68deb193385d23104dc7ae108c9d1f2e43aedcae..7ffca36a1c2edb4ee80344601842b67c194ad3e1 100644
--- a/test/unittests/front_end/helpers/EnvironmentHelpers.ts
+++ b/test/unittests/front_end/helpers/EnvironmentHelpers.ts
@@ -65,6 +65,8 @@       set: () => {},
       addChangeListener: () => {},
       removeChangeListener: () => {},
       setDisabled: () => {},
+      setTitle: () => {},
+      title: () => {},
     }),
     moduleSetting: () => ({
       get: () => [],
@@ -72,6 +74,8 @@       set: () => {},
       addChangeListener: () => {},
       removeChangeListener: () => {},
       setDisabled: () => {},
+      setTitle: () => {},
+      title: () => {},
     }),
   } as unknown as Common.Settings.Settings);
 }




diff --git a/test/unittests/front_end/panels/layers/BUILD.gn b/test/unittests/front_end/panels/layers/BUILD.gn
new file mode 100644
index 0000000000000000000000000000000000000000..c201b00581060bf84d899f02c01f1e0e154ab53f
--- /dev/null
+++ b/test/unittests/front_end/panels/layers/BUILD.gn
@@ -0,0 +1,15 @@
+# Copyright 2021 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("../../../../../third_party/typescript/typescript.gni")
+
+ts_library("layers") {
+  testonly = true
+  sources = [ "LayersPanel_test.ts" ]
+
+  deps = [
+    "../../../../../front_end/panels/layers:bundle",
+    "../../helpers",
+  ]
+}




diff --git a/test/unittests/front_end/panels/layers/LayersPanel_test.ts b/test/unittests/front_end/panels/layers/LayersPanel_test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4ebb95acb1ee081892a25125f0fbb73e374277df
--- /dev/null
+++ b/test/unittests/front_end/panels/layers/LayersPanel_test.ts
@@ -0,0 +1,42 @@
+// 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.
+
+const {assert} = chai;
+
+import * as Layers from '../../../../../front_end/panels/layers/layers.js';
+import * as SDK from '../../../../../front_end/core/sdk/sdk.js';
+import * as UI from '../../../../../front_end/ui/legacy/legacy.js';
+import {assertNotNullOrUndefined} from '../../../../../front_end/core/platform/platform.js';
+import {createTarget, stubNoopSettings} from '../../helpers/EnvironmentHelpers.js';
+import {describeWithMockConnection} from '../../helpers/MockConnection.js';
+
+describeWithMockConnection('LayersPanel', async () => {
+  const tests = (targetFactory: () => SDK.Target.Target) => {
+    let target: SDK.Target.Target;
+
+    beforeEach(async () => {
+      target = targetFactory();
+      const actionRegistryInstance = UI.ActionRegistry.ActionRegistry.instance({forceNew: true});
+      UI.ShortcutRegistry.ShortcutRegistry.instance({forceNew: true, actionRegistry: actionRegistryInstance});
+      stubNoopSettings();
+    });
+
+    it('udpates 3d view when layer painted', async () => {
+      const panel = Layers.LayersPanel.LayersPanel.instance({forceNew: true});
+      const layerTreeModel = target.model(Layers.LayerTreeModel.LayerTreeModel);
+      assertNotNullOrUndefined(layerTreeModel);
+      const updateLayerSnapshot = sinon.stub(panel.layers3DView, 'updateLayerSnapshot');
+      const LAYER = {id: () => 'TEST_LAYER'} as Layers.LayerTreeModel.AgentLayer;
+      layerTreeModel.dispatchEventToListeners(Layers.LayerTreeModel.Events.LayerPainted, LAYER);
+      assert.isTrue(updateLayerSnapshot.calledOnceWith(LAYER));
+    });
+  };
+
+  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});
+                             }));
+});