Skip to content

Commit ffe4138

Browse files
masnobleDevtools-frontend LUCI CQ
authored andcommitted
Add view memory to security panel
The security panel now has "memory" for which tool was last used rather than always opening to the security overview view. Bug: 352364594, b/382253571 Change-Id: I0825a912349cec574ed2205b482378009f913c2c Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6182444 Reviewed-by: Danil Somsikov <[email protected]> Reviewed-by: Shuran Huang <[email protected]> Commit-Queue: Shuran Huang <[email protected]>
1 parent 87be7c1 commit ffe4138

File tree

7 files changed

+62
-20
lines changed

7 files changed

+62
-20
lines changed

front_end/panels/security/CookieControlsTreeElement.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ export class CookieControlsTreeElement extends SecurityPanelSidebarTreeElement {
1111
this.setLeadingIcons([IconButton.Icon.create('gear', 'cookie-icon')]);
1212
}
1313

14-
override onselect(): boolean {
14+
override get elemId(): string {
15+
return 'controls';
16+
}
17+
18+
override showElement(): void {
1519
this.listItemElement.dispatchEvent(new CustomEvent('showFlagControls', {bubbles: true, composed: true}));
16-
return true;
1720
}
1821
}

front_end/panels/security/CookieReportTreeElement.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ export class CookieReportTreeElement extends SecurityPanelSidebarTreeElement {
1111
this.setLeadingIcons([IconButton.Icon.create('cookie', 'cookie-icon')]);
1212
}
1313

14-
override onselect(): boolean {
14+
override get elemId(): string {
15+
return 'report';
16+
}
17+
18+
override showElement(): void {
1519
this.listItemElement.dispatchEvent(new CustomEvent('showCookieReport', {bubbles: true, composed: true}));
16-
return true;
1720
}
1821
}

front_end/panels/security/OriginTreeElement.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,8 @@ export class OriginTreeElement extends SecurityPanelSidebarTreeElement {
4848
return this.#originInternal;
4949
}
5050

51-
override onselect(): boolean {
51+
override showElement(): void {
5252
this.listItemElement.dispatchEvent(new ShowOriginEvent(this.#originInternal));
53-
return true;
5453
}
5554
}
5655

front_end/panels/security/SecurityPanel.ts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -655,11 +655,6 @@ export class SecurityPanel extends UI.Panel.Panel implements SDK.TargetManager.S
655655
this.updateVisibleSecurityState(data);
656656
}
657657

658-
selectAndSwitchToMainView(): void {
659-
// The sidebar element will trigger displaying the main view. Rather than making a redundant call to display the main view, we rely on this.
660-
this.sidebar.securityOverviewElement.select(true);
661-
}
662-
663658
showOrigin(origin: Platform.DevToolsPath.UrlString): void {
664659
const originState = this.origins.get(origin);
665660
if (!originState) {
@@ -675,7 +670,7 @@ export class SecurityPanel extends UI.Panel.Panel implements SDK.TargetManager.S
675670
override wasShown(): void {
676671
super.wasShown();
677672
if (!this.visibleView) {
678-
this.selectAndSwitchToMainView();
673+
this.sidebar.showLastSelectedElement();
679674
}
680675
}
681676

@@ -827,9 +822,7 @@ export class SecurityPanel extends UI.Panel.Panel implements SDK.TargetManager.S
827822
const {frame} = event.data;
828823
const request = this.lastResponseReceivedForLoaderId.get(frame.loaderId);
829824

830-
if (!(this.visibleView instanceof CookieReportView) && !(this.visibleView instanceof CookieControlsView)) {
831-
this.selectAndSwitchToMainView();
832-
}
825+
this.sidebar.showLastSelectedElement();
833826
this.sidebar.clearOrigins();
834827
this.origins.clear();
835828
this.lastResponseReceivedForLoaderId.clear();
@@ -852,8 +845,8 @@ export class SecurityPanel extends UI.Panel.Panel implements SDK.TargetManager.S
852845
private onInterstitialShown(): void {
853846
// The panel might have been displaying the origin view on the
854847
// previously loaded page. When showing an interstitial, switch
855-
// back to the Overview view.
856-
this.selectAndSwitchToMainView();
848+
// back to the sidebar's last shown view.
849+
this.sidebar.showLastSelectedElement();
857850
this.sidebar.toggleOriginsList(true /* hidden */);
858851
}
859852

front_end/panels/security/SecurityPanelSidebar.ts

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,22 @@ const str_ = i18n.i18n.registerUIStrings('panels/security/SecurityPanelSidebar.t
7676
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
7777

7878
export class SecurityPanelSidebar extends UI.Widget.VBox {
79+
readonly #securitySidebarLastItemSetting: Common.Settings.Setting<string>;
7980
readonly sidebarTree: UI.TreeOutline.TreeOutlineInShadow;
8081
readonly #originGroupTitles: Map<OriginGroup, string>;
8182
#originGroups: Map<OriginGroup, UI.TreeOutline.TreeElement>;
8283
securityOverviewElement: OriginTreeElement;
84+
readonly #cookieControlsTreeElement: CookieControlsTreeElement|undefined;
85+
readonly #cookieReportTreeElement: CookieReportTreeElement|undefined;
8386
readonly #elementsByOrigin: Map<string, OriginTreeElement>;
8487
readonly #mainViewReloadMessage: UI.TreeOutline.TreeElement;
8588
#mainOrigin: string|null;
8689

8790
constructor(element?: HTMLElement) {
8891
super(undefined, undefined, element);
8992

93+
this.#securitySidebarLastItemSetting =
94+
Common.Settings.Settings.instance().createSetting('security-last-selected-element-path', 'overview');
9095
this.#mainOrigin = null;
9196

9297
this.sidebarTree = new UI.TreeOutline.TreeOutlineInShadow(UI.TreeOutline.TreeVariant.NAVIGATION_TREE);
@@ -95,9 +100,11 @@ export class SecurityPanelSidebar extends UI.Widget.VBox {
95100

96101
if (Common.Settings.Settings.instance().getHostConfig().devToolsPrivacyUI?.enabled) {
97102
const privacyTreeSection = this.#addSidebarSection(i18nString(UIStrings.privacy), 'privacy');
98-
privacyTreeSection.appendChild(
99-
new CookieControlsTreeElement(i18nString(UIStrings.flagControls), 'cookie-flag-controls'));
100-
privacyTreeSection.appendChild(new CookieReportTreeElement(i18nString(UIStrings.cookieReport), 'cookie-report'));
103+
this.#cookieControlsTreeElement =
104+
new CookieControlsTreeElement(i18nString(UIStrings.flagControls), 'cookie-flag-controls');
105+
privacyTreeSection.appendChild(this.#cookieControlsTreeElement);
106+
this.#cookieReportTreeElement = new CookieReportTreeElement(i18nString(UIStrings.cookieReport), 'cookie-report');
107+
privacyTreeSection.appendChild(this.#cookieReportTreeElement);
101108
}
102109

103110
const securitySectionTitle = i18nString(UIStrings.security);
@@ -131,6 +138,25 @@ export class SecurityPanelSidebar extends UI.Widget.VBox {
131138
this.#clearOriginGroups();
132139

133140
this.#elementsByOrigin = new Map();
141+
142+
this.element.addEventListener('update-sidebar-selection', (event: Event) => {
143+
const id: string = (event as CustomEvent).detail.id;
144+
this.#securitySidebarLastItemSetting.set(id);
145+
});
146+
this.showLastSelectedElement();
147+
}
148+
149+
showLastSelectedElement(): void {
150+
if (this.#cookieControlsTreeElement &&
151+
this.#securitySidebarLastItemSetting.get() === this.#cookieControlsTreeElement.elemId) {
152+
this.#cookieControlsTreeElement.showElement();
153+
} else if (
154+
this.#cookieReportTreeElement &&
155+
this.#securitySidebarLastItemSetting.get() === this.#cookieReportTreeElement.elemId) {
156+
this.#cookieReportTreeElement.showElement();
157+
} else {
158+
this.securityOverviewElement.showElement();
159+
}
134160
}
135161

136162
#addSidebarSection(title: string, jslogContext: string): UI.TreeOutline.TreeElement {

front_end/panels/security/SecurityPanelSidebarTreeElement.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,21 @@ export class SecurityPanelSidebarTreeElement extends UI.TreeOutline.TreeElement
88
super(title, expandable, jslogContext);
99
UI.ARIAUtils.setLabel(this.listItemElement, title);
1010
}
11+
12+
get elemId(): string {
13+
// default landing spot for the security panel
14+
return 'overview';
15+
}
16+
17+
showElement(): void {
18+
throw new Error('Unimplemented Method');
19+
}
20+
21+
override onselect(): boolean {
22+
const id = this.elemId;
23+
this.listItemElement.dispatchEvent(
24+
new CustomEvent('update-sidebar-selection', {bubbles: true, composed: true, detail: {id}}));
25+
this.showElement();
26+
return false;
27+
}
1128
}

front_end/ui/visual_logging/KnownContextValues.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2967,6 +2967,7 @@ export const knownContextValues = new Set([
29672967
'second-col',
29682968
'secure',
29692969
'security',
2970+
'security-last-selected-element-path',
29702971
'security.main-view',
29712972
'security.origin-view',
29722973
'security.toggle-san-truncation',

0 commit comments

Comments
 (0)