Skip to content

Commit 99fe351

Browse files
jalonthomasDevtools-frontend LUCI CQ
authored andcommitted
Add devToolsThirdPartyCookieControls to host config
These fields will be used to control which cards and checkboxes are displayed, toggled, or disabled in CookieControlsView.ts. Corresponding chromium CL: https://crrev.com/c/5960720 Bug: 375352611 Change-Id: I06b6ab4dd8551714eb7f3579e2bba277dbfa1bc9 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6062300 Reviewed-by: Alina Varkki <[email protected]> Commit-Queue: Jalon Thomas <[email protected]> Reviewed-by: Danil Somsikov <[email protected]>
1 parent 13548c8 commit 99fe351

File tree

6 files changed

+64
-46
lines changed

6 files changed

+64
-46
lines changed

front_end/core/host/InspectorFrontendHost.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,12 @@ export class InspectorFrontendHostStub implements InspectorFrontendHostAPI {
438438
enabled: false,
439439
},
440440
isOffTheRecord: false,
441+
thirdPartyCookieControls: {
442+
thirdPartyCookieRestrictionEnabled: false,
443+
thirdPartyCookieMetadataEnabled: true,
444+
thirdPartyCookieHeuristicsEnabled: true,
445+
managedBlockThirdPartyCookies: 'Unset',
446+
},
441447
};
442448
if ('hostConfigForTesting' in globalThis) {
443449
const {hostConfigForTesting} = (globalThis as unknown as {hostConfigForTesting: Root.Runtime.HostConfig});

front_end/core/root/Runtime.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,13 @@ export interface HostConfigAnimationStylesInStylesTab {
378378
enabled: boolean;
379379
}
380380

381+
export interface HostConfigThirdPartyCookieControls {
382+
thirdPartyCookieRestrictionEnabled: boolean;
383+
thirdPartyCookieMetadataEnabled: boolean;
384+
thirdPartyCookieHeuristicsEnabled: boolean;
385+
managedBlockThirdPartyCookies: string|boolean;
386+
}
387+
381388
// We use `RecursivePartial` here to enforce that DevTools code is able to
382389
// handle `HostConfig` objects of an unexpected shape. This can happen if
383390
// the implementation in the Chromium backend is changed without correctly
@@ -401,6 +408,7 @@ export type HostConfig = Platform.TypeScriptUtilities.RecursivePartial<{
401408
isOffTheRecord: boolean,
402409
devToolsEnableOriginBoundCookies: HostConfigEnableOriginBoundCookies,
403410
devToolsAnimationStylesInStylesTab: HostConfigAnimationStylesInStylesTab,
411+
thirdPartyCookieControls: HostConfigThirdPartyCookieControls,
404412
}>;
405413

406414
/**

front_end/core/sdk/sdk-meta.ts

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,33 +1050,6 @@ Common.Settings.registerSettingExtension({
10501050
},
10511051
});
10521052

1053-
Common.Settings.registerSettingExtension({
1054-
category: Common.Settings.SettingCategory.PRIVACY,
1055-
title: i18nLazyString(UIStrings.disableCache),
1056-
settingName: 'cookie-control-override-enabled',
1057-
settingType: Common.Settings.SettingType.BOOLEAN,
1058-
storageType: Common.Settings.SettingStorageType.GLOBAL,
1059-
defaultValue: false,
1060-
});
1061-
1062-
Common.Settings.registerSettingExtension({
1063-
category: Common.Settings.SettingCategory.PRIVACY,
1064-
title: i18nLazyString(UIStrings.disableCache),
1065-
settingName: 'grace-period-mitigation-disabled',
1066-
settingType: Common.Settings.SettingType.BOOLEAN,
1067-
storageType: Common.Settings.SettingStorageType.GLOBAL,
1068-
defaultValue: false,
1069-
});
1070-
1071-
Common.Settings.registerSettingExtension({
1072-
category: Common.Settings.SettingCategory.PRIVACY,
1073-
title: i18nLazyString(UIStrings.disableCache),
1074-
settingName: 'heuristic-mitigation-disabled',
1075-
settingType: Common.Settings.SettingType.BOOLEAN,
1076-
storageType: Common.Settings.SettingStorageType.GLOBAL,
1077-
defaultValue: false,
1078-
});
1079-
10801053
Common.Settings.registerSettingExtension({
10811054
category: Common.Settings.SettingCategory.RENDERING,
10821055
title: i18nLazyString(UIStrings.emulateAutoDarkMode),

front_end/panels/security/CookieControlsView.ts

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,35 @@ export class CookieControlsView extends UI.Widget.VBox {
107107
#view: View;
108108

109109
constructor(element?: HTMLElement, view: View = (input, output, target) => {
110-
// TODO(crbug.com/365737493): Determine whether the enterprise is present based on UI bindings
111-
const enterprisePresent = false;
110+
const thirdPartyControlsDict = Common.Settings.Settings.instance().getHostConfig().thirdPartyCookieControls;
112111

113-
const toggleSetting = Common.Settings.Settings.instance().moduleSetting('cookie-control-override-enabled');
114-
const gracePeriodSetting = Common.Settings.Settings.instance().moduleSetting('grace-period-mitigation-disabled');
115-
const heuristicSetting = Common.Settings.Settings.instance().moduleSetting('heuristic-mitigation-disabled');
112+
// createSetting() allows us to initialize the settings with the UI binding values the first
113+
// time that the browser starts, and use the existing setting value for all subsequent uses.
114+
const enterpriseEnabledSetting = Common.Settings.Settings.instance().createSetting(
115+
'enterprise-enabled',
116+
thirdPartyControlsDict && thirdPartyControlsDict.managedBlockThirdPartyCookies &&
117+
typeof thirdPartyControlsDict.managedBlockThirdPartyCookies === 'boolean' ?
118+
thirdPartyControlsDict.managedBlockThirdPartyCookies :
119+
false,
120+
Common.Settings.SettingStorageType.GLOBAL);
121+
const toggleEnabledSetting = Common.Settings.Settings.instance().createSetting(
122+
'cookie-control-override-enabled',
123+
thirdPartyControlsDict && thirdPartyControlsDict.thirdPartyCookieRestrictionEnabled ?
124+
thirdPartyControlsDict.thirdPartyCookieRestrictionEnabled :
125+
false,
126+
Common.Settings.SettingStorageType.GLOBAL);
127+
const gracePeriodDisabledSetting = Common.Settings.Settings.instance().createSetting(
128+
'grace-period-mitigation-disabled',
129+
thirdPartyControlsDict && thirdPartyControlsDict.thirdPartyCookieMetadataEnabled ?
130+
thirdPartyControlsDict.thirdPartyCookieMetadataEnabled :
131+
true,
132+
Common.Settings.SettingStorageType.GLOBAL);
133+
const heuristicsDisabledSetting = Common.Settings.Settings.instance().createSetting(
134+
'heuristic-mitigation-disabled',
135+
thirdPartyControlsDict && thirdPartyControlsDict.thirdPartyCookieHeuristicsEnabled ?
136+
thirdPartyControlsDict.thirdPartyCookieHeuristicsEnabled :
137+
true,
138+
Common.Settings.SettingStorageType.GLOBAL);
116139

117140
// clang-format off
118141
const cardHeader = html `
@@ -122,7 +145,7 @@ export class CookieControlsView extends UI.Widget.VBox {
122145
<div class="card-title">${i18nString(UIStrings.cardTitle)}</div>
123146
<div class="body">${i18nString(UIStrings.cardDisclaimer)}</div>
124147
</div>
125-
${enterprisePresent ? html `
148+
${Boolean(enterpriseEnabledSetting.get()) ? html `
126149
<devtools-icon
127150
.name=${'domain'}
128151
${LitHtml.Directives.ref((el: Element|undefined) => {
@@ -133,10 +156,10 @@ export class CookieControlsView extends UI.Widget.VBox {
133156
</div>
134157
<div>
135158
<devtools-switch
136-
.checked=${Boolean(toggleSetting.get())}
137-
.disabled=${enterprisePresent}
159+
.checked=${Boolean(toggleEnabledSetting.get())}
160+
.disabled=${Boolean(enterpriseEnabledSetting.get())}
138161
@switchchange=${(e: Event)=>{
139-
input.inputChanged((e.target as HTMLInputElement).checked, toggleSetting);
162+
input.inputChanged((e.target as HTMLInputElement).checked, toggleEnabledSetting);
140163
}}>
141164
</devtools-switch>
142165
</div>
@@ -147,17 +170,17 @@ export class CookieControlsView extends UI.Widget.VBox {
147170
<div class="card-row">
148171
<label class='checkbox-label'>
149172
<input type='checkbox'
150-
?disabled=${enterprisePresent || !Boolean(toggleSetting.get())}
151-
?checked=${!Boolean(gracePeriodSetting.get())}
173+
.disabled=${Boolean(enterpriseEnabledSetting.get()) || !Boolean(toggleEnabledSetting.get())}
174+
.checked=${Boolean(toggleEnabledSetting.get()) && !Boolean(gracePeriodDisabledSetting.get())}
152175
@change=${(e: Event)=>{
153-
input.inputChanged(!(e.target as HTMLInputElement).checked, gracePeriodSetting);
176+
input.inputChanged((e.target as HTMLInputElement).checked, gracePeriodDisabledSetting);
154177
}}
155178
>
156179
<div class="text">
157180
<div class="body">${i18nString(UIStrings.gracePeriodTitle)}</div>
158181
<div class="body">
159182
${i18nFormatString(UIStrings.gracePeriodExplanation, {
160-
PH1: enterprisePresent ? i18nString(UIStrings.gracePeriod) : UI.Fragment.html`<x-link class="x-link" href="https://developers.google.com/privacy-sandbox/cookies/temporary-exceptions/grace-period" jslog=${VisualLogging.link('grace-period-link').track({click: true})}>${i18nString(UIStrings.gracePeriod)}</x-link>`,
183+
PH1: Boolean(enterpriseEnabledSetting.get()) ? i18nString(UIStrings.gracePeriod) : UI.Fragment.html`<x-link class="x-link" href="https://developers.google.com/privacy-sandbox/cookies/temporary-exceptions/grace-period" jslog=${VisualLogging.link('grace-period-link').track({click: true})}>${i18nString(UIStrings.gracePeriod)}</x-link>`,
161184
})}
162185
</div>
163186
</div>
@@ -169,17 +192,17 @@ export class CookieControlsView extends UI.Widget.VBox {
169192
<div class="card-row">
170193
<label class='checkbox-label'>
171194
<input type='checkbox'
172-
?disabled=${enterprisePresent || !Boolean(toggleSetting.get())}
173-
?checked=${!Boolean(heuristicSetting.get())}
195+
.disabled=${Boolean(enterpriseEnabledSetting.get()) || !Boolean(toggleEnabledSetting.get())}
196+
.checked=${Boolean(toggleEnabledSetting.get() && !Boolean(heuristicsDisabledSetting.get()))}
174197
@change=${(e: Event)=>{
175-
input.inputChanged(!(e.target as HTMLInputElement).checked, heuristicSetting);
198+
input.inputChanged((e.target as HTMLInputElement).checked, heuristicsDisabledSetting);
176199
}}
177200
>
178201
<div class="text">
179202
<div class="body">${i18nString(UIStrings.heuristicTitle)}</div>
180203
<div class="body">
181204
${i18nFormatString(UIStrings.heuristicExplanation, {
182-
PH1: enterprisePresent ? i18nString(UIStrings.scenarios) : UI.Fragment.html`<x-link class="x-link" href="https://developers.google.com/privacy-sandbox/cookies/temporary-exceptions/heuristics-based-exceptions" jslog=${VisualLogging.link('heuristic-link').track({click: true})}>${i18nString(UIStrings.scenarios)}</x-link>`,
205+
PH1: Boolean(enterpriseEnabledSetting.get()) ? i18nString(UIStrings.scenarios) : UI.Fragment.html`<x-link class="x-link" href="https://developers.google.com/privacy-sandbox/cookies/temporary-exceptions/heuristics-based-exceptions" jslog=${VisualLogging.link('heuristic-link').track({click: true})}>${i18nString(UIStrings.scenarios)}</x-link>`,
183206
})}
184207
</div>
185208
</div>
@@ -211,7 +234,7 @@ export class CookieControlsView extends UI.Widget.VBox {
211234
<div class="body">${i18nString(UIStrings.viewExplanation)}</div>
212235
</div>
213236
<devtools-card>
214-
<div slot="content" class=${enterprisePresent ? 'card enterprise-disabled' : 'card'}>
237+
<div slot="content" class=${Boolean(enterpriseEnabledSetting.get()) ? 'card enterprise-disabled' : 'card'}>
215238
${cardHeader}
216239
<div>
217240
<div class="card-row text">
@@ -223,7 +246,7 @@ export class CookieControlsView extends UI.Widget.VBox {
223246
</div>
224247
</div>
225248
</devtools-card>
226-
${enterprisePresent ? enterpriseDisclaimer : LitHtml.nothing}
249+
${Boolean(enterpriseEnabledSetting.get()) ? enterpriseDisclaimer : LitHtml.nothing}
227250
</div>
228251
</div>
229252
`, target, {host: this});

front_end/testing/EnvironmentHelpers.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,5 +556,12 @@ export function getGetHostConfigStub(config: Root.Runtime.HostConfig): sinon.Sin
556556
...config.devToolsAnimationStylesInStylesTab,
557557
} as Root.Runtime.HostConfigAnimationStylesInStylesTab,
558558
isOffTheRecord: false,
559+
thirdPartyCookieControls: {
560+
thirdPartyCookieRestrictionEnabled: false,
561+
thirdPartyCookieMetadataEnabled: true,
562+
thirdPartyCookieHeuristicsEnabled: true,
563+
managedBlockThirdPartyCookies: 'Unset',
564+
...config.thirdPartyCookieControls,
565+
} as Root.Runtime.HostConfigThirdPartyCookieControls,
559566
});
560567
}

front_end/ui/visual_logging/KnownContextValues.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,6 +1330,7 @@ export const knownContextValues = new Set([
13301330
'endpoints',
13311331
'enter',
13321332
'enterpictureinpicture',
1333+
'enterprise-enabled',
13331334
'error',
13341335
'error-message',
13351336
'errors-and-warnings',

0 commit comments

Comments
 (0)