tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 8274119837796e046299777ba0b328bd390836c7
parent 1b9dd39952e5451b12cc1423e1ca28e24ef0a232
Author: Benjamin VanderSloot <bvandersloot@mozilla.com>
Date:   Mon, 29 Dec 2025 13:28:34 +0000

Bug 2004041 - Restructure the security-privacy-card to be easier to use in the config-based design - r=fluent-reviewers,mkennedy,bolsson

Differential Revision: https://phabricator.services.mozilla.com/D275503

Diffstat:
Mbrowser/components/preferences/main.js | 22+++++++++++++++++++---
Mbrowser/components/preferences/privacy.inc.xhtml | 4+++-
Mbrowser/components/preferences/privacy.js | 32+++++++++++++++++++++++++-------
Mbrowser/components/preferences/widgets/security-privacy/security-privacy-card/security-privacy-card.mjs | 30++++++++++++++++++++++--------
Mbrowser/locales-preview/privacyPreferences.ftl | 5+++++
5 files changed, 74 insertions(+), 19 deletions(-)

diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js @@ -2704,17 +2704,33 @@ SettingGroupManager.registerGroups({ ], }, securityPrivacyStatus: { + inProgress: true, items: [ { id: "privacyCard", control: "security-privacy-card", }, + ], + }, + securityPrivacyWarnings: { + inProgress: true, + items: [ { - id: "securityWarningsGroup", - control: "moz-box-group", + id: "warningCard", + l10nId: "security-privacy-issue-card", + control: "moz-card", controlAttrs: { - type: "list", + type: "accordion", }, + items: [ + { + id: "securityWarningsGroup", + control: "moz-box-group", + controlAttrs: { + type: "list", + }, + }, + ], }, ], }, diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml @@ -14,13 +14,15 @@ <html:h1 data-l10n-id="privacy-header"/> </hbox> +<html:setting-group hidden="true" groupid="securityPrivacyStatus" data-category="panePrivacy" /> +<html:setting-group hidden="true" groupid="securityPrivacyWarnings" data-category="panePrivacy" /> + <!-- Enhanced Tracking Protection Status Section --> <html:setting-group groupid="etpStatus" data-category="panePrivacy" data-subcategory="etpStatus" hidden="true"></html:setting-group> <!-- Tracking / Content Blocking --> <groupbox id="trackingGroup" data-category="panePrivacy" data-srd-groupid="etpBanner" hidden="true" aria-describedby="contentBlockingDescription" class="highlighting-group"> <label id="contentBlockingHeader"><html:h2 data-l10n-id="content-blocking-enhanced-tracking-protection"/></label> - <html:setting-group groupid="securityPrivacyStatus"/> <vbox data-subcategory="trackingprotection"> <hbox align="start"> <image id="trackingProtectionShield"/> diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js @@ -883,7 +883,7 @@ class WarningSettingConfig { } } -if (Services.prefs.getBoolPref("privacy.ui.status_card", false)) { +if (SECURITY_PRIVACY_STATUS_CARD_ENABLED) { Preferences.addSetting( new WarningSettingConfig( "warningTest", @@ -1314,9 +1314,24 @@ const SECURITY_WARNINGS = [ { l10nId: "security-privacy-issue-warning-crlite", id: "warningCRLite", - }, - { - l10nId: "security-privacy-issue-warning-certificate-pinning", + Preferences.addSetting({ + id: "privacyCard", + deps: [ + "appUpdateStatus", + "trackerCount", + "etpStrictEnabled", + ...SECURITY_WARNINGS.map(warning => warning.id), + ], + }); + + Preferences.addSetting({ + id: "warningCard", + deps: SECURITY_WARNINGS.map(warning => warning.id), + visible: deps => { + return Object.values(deps).some(depSetting => depSetting.visible); + }, + }); +} id: "warningCertificatePinning", }, { @@ -1412,6 +1427,10 @@ Preferences.addSetting({ }); Preferences.addSetting({ + id: "warningCard", +}); + +Preferences.addSetting({ id: "ipProtectionVisible", pref: "browser.ipProtection.enabled", }); @@ -3719,9 +3738,8 @@ var gPrivacyPane = { */ init() { initSettingGroup("nonTechnicalPrivacy"); - if (Services.prefs.getBoolPref("privacy.ui.status_card", false)) { - initSettingGroup("securityPrivacyStatus"); - } + initSettingGroup("securityPrivacyStatus"); + initSettingGroup("securityPrivacyWarnings"); initSettingGroup("httpsOnly"); initSettingGroup("browsingProtection"); initSettingGroup("cookiesAndSiteData"); diff --git a/browser/components/preferences/widgets/security-privacy/security-privacy-card/security-privacy-card.mjs b/browser/components/preferences/widgets/security-privacy/security-privacy-card/security-privacy-card.mjs @@ -112,11 +112,28 @@ export default class SecurityPrivacyCard extends MozLitElement { }; } - getStatusImageSrc() { + #openWarningCardAndScroll() { + let accordion = document.getElementById("warningCard"); + if (!accordion) { + return; + } + accordion.expanded = true; + this.#scrollToTargetOnPanel("#privacy", "warningCard")(); + } + + getStatusImage() { if (this.configIssueCount > 0) { - return "chrome://global/skin/illustrations/kit-looking-left.svg"; + return html`<img + class="status-image" + src="chrome://global/skin/illustrations/kit-looking-left.svg" + data-l10n-id="security-privacy-image-warning" + />`; } - return "chrome://global/skin/illustrations/kit-looking-forward.svg"; + return html`<img + class="status-image" + src="chrome://global/skin/illustrations/kit-looking-forward.svg" + data-l10n-id="security-privacy-image-ok" + />`; } /** @@ -149,10 +166,7 @@ export default class SecurityPrivacyCard extends MozLitElement { <small ><a href="" - @click=${this.#scrollToTargetOnPanel( - "#privacy", - "securityWarningsGroup" - )} + @click=${() => this.#openWarningCardAndScroll()} data-l10n-id=${L10N_IDS.problemHelperLabel} ></a ></small> @@ -329,7 +343,7 @@ export default class SecurityPrivacyCard extends MozLitElement { ${this.buildIssuesElement()} ${this.buildTrackersElement()} ${this.buildUpdateElement()} </div> - <img class="status-image" src=${this.getStatusImageSrc()} /> + ${this.getStatusImage()} </div> </moz-card> `; diff --git a/browser/locales-preview/privacyPreferences.ftl b/browser/locales-preview/privacyPreferences.ftl @@ -32,6 +32,11 @@ security-privacy-status-update-needed-description = Update { -brand-short-name } security-privacy-status-update-button-label = .label = Update { -brand-short-name } +security-privacy-image-warning = + .alt = The { -brand-short-name } mascot, expressing concern over your security warnings +security-privacy-image-ok = + .alt = The { -brand-short-name } mascot, pleased that you have no outstanding security issues + security-privacy-issue-card = .heading = Security warnings issue-card-reset-button =