tor-browser

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

commit 7d3fe10ccdec4ac856bb0aba27b8e8ebd86128ed
parent 803cd3c7617fd38eba1b454b55d308d9609ee164
Author: Duncan McIntosh <dmcintosh@mozilla.com>
Date:   Tue, 28 Oct 2025 19:29:01 +0000

Bug 1992982 - Reset backup password value and visibility when containing preference dialogs close. r=hsohaney

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

Diffstat:
Mbrowser/components/backup/content/backup-settings.mjs | 10++++++++++
Mbrowser/components/backup/content/enable-backup-encryption.mjs | 1-
Mbrowser/components/backup/content/password-validation-inputs.mjs | 2++
Mbrowser/components/backup/content/turn-on-scheduled-backups.mjs | 2--
Mbrowser/components/backup/tests/browser/browser_settings_enable_backup_encryption.js | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mbrowser/components/backup/tests/browser/browser_settings_turn_on_scheduled_backups.js | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 144 insertions(+), 3 deletions(-)

diff --git a/browser/components/backup/content/backup-settings.mjs b/browser/components/backup/content/backup-settings.mjs @@ -256,6 +256,7 @@ export default class BackupSettings extends MozLitElement { return html`<dialog id="turn-on-scheduled-backups-dialog" class="backup-dialog" + @close=${this.handleTurnOnScheduledBackupsDialogClose} > <turn-on-scheduled-backups defaultlabel=${fileName} @@ -330,10 +331,19 @@ export default class BackupSettings extends MozLitElement { ); } + handleTurnOnScheduledBackupsDialogClose() { + this.turnOnScheduledBackupsEl.reset(); + } + + handleEnableBackupEncryptionDialogClose() { + this.enableBackupEncryptionEl.reset(); + } + enableBackupEncryptionDialogTemplate() { return html`<dialog id="enable-backup-encryption-dialog" class="backup-dialog" + @close=${this.handleEnableBackupEncryptionDialogClose} > <enable-backup-encryption type=${this._enableEncryptionTypeAttr} diff --git a/browser/components/backup/content/enable-backup-encryption.mjs b/browser/components/backup/content/enable-backup-encryption.mjs @@ -111,7 +111,6 @@ export default class EnableBackupEncryption extends MozLitElement { composed: true, }) ); - this.reset(); } reset() { diff --git a/browser/components/backup/content/password-validation-inputs.mjs b/browser/components/backup/content/password-validation-inputs.mjs @@ -51,6 +51,8 @@ export default class PasswordValidationInputs extends MozLitElement { reset() { this.formEl.reset(); + this.inputNewPasswordEl.revealPassword = false; + this.inputRepeatPasswordEl.revealPassword = false; this._showRules = false; this._hasEmail = false; this._tooShort = true; diff --git a/browser/components/backup/content/turn-on-scheduled-backups.mjs b/browser/components/backup/content/turn-on-scheduled-backups.mjs @@ -182,8 +182,6 @@ export default class TurnOnScheduledBackups extends MozLitElement { composed: true, }) ); - - this.reset(); } handleConfirm() { diff --git a/browser/components/backup/tests/browser/browser_settings_enable_backup_encryption.js b/browser/components/backup/tests/browser/browser_settings_enable_backup_encryption.js @@ -262,3 +262,65 @@ add_task( ); } ); + +/** + * Tests that the password boxes are cleared if the dialog is closed by JS. + */ +add_task(async function test_turn_on_scheduled_backups_encryption_error() { + await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => { + let settings = browser.contentDocument.querySelector("backup-settings"); + + await SpecialPowers.pushPrefEnv({ + set: [[SCHEDULED_BACKUPS_ENABLED_PREF, true]], + }); + + settings.backupServiceState.encryptionEnabled = false; + await settings.requestUpdate(); + await settings.updateComplete; + + let turnOnButton = settings.sensitiveDataCheckboxInputEl; + turnOnButton.click(); + await settings.updateComplete; + + let enableBackupEncryption = settings.enableBackupEncryptionEl; + let passwordOptionsExpanded = enableBackupEncryption.passwordInputsEl; + + Assert.ok( + passwordOptionsExpanded, + "Passwords expanded options should be found" + ); + + passwordOptionsExpanded.inputNewPasswordEl.value = "firefox"; // secret!! + passwordOptionsExpanded.inputNewPasswordEl.revealPassword = true; + passwordOptionsExpanded.inputRepeatPasswordEl.value = "www1989"; + passwordOptionsExpanded.inputRepeatPasswordEl.revealPassword = true; + + let dialog = settings.enableBackupEncryptionDialogEl; + let closedPromise = BrowserTestUtils.waitForEvent(dialog, "close"); + dialog.close(); + await closedPromise; + + is( + passwordOptionsExpanded.inputNewPasswordEl.value, + "", + "New password field should be cleared" + ); + is( + passwordOptionsExpanded.inputRepeatPasswordEl.value, + "", + "Repeat password field should be cleared" + ); + is( + passwordOptionsExpanded.inputNewPasswordEl.revealPassword, + false, + "New password field should not be revealed" + ); + is( + passwordOptionsExpanded.inputRepeatPasswordEl.revealPassword, + false, + "Repeat password field should not be revealed" + ); + + await SpecialPowers.popPrefEnv(); + }); +}); diff --git a/browser/components/backup/tests/browser/browser_settings_turn_on_scheduled_backups.js b/browser/components/backup/tests/browser/browser_settings_turn_on_scheduled_backups.js @@ -443,3 +443,73 @@ add_task(async function test_turn_on_scheduled_backups_encryption_error() { Services.prefs.clearUserPref(SCHEDULED_BACKUPS_ENABLED_PREF); }); }); + +/** + * Tests that the password boxes are cleared if the dialog is closed by JS. + */ +add_task(async function test_turn_on_scheduled_backups_encryption_error() { + await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => { + let settings = browser.contentDocument.querySelector("backup-settings"); + + await settings.updateComplete; + + let turnOnButton = settings.scheduledBackupsButtonEl; + Assert.ok( + turnOnButton, + "Button to turn on scheduled backups should be found" + ); + + turnOnButton.click(); + await settings.updateComplete; + + let turnOnScheduledBackups = settings.turnOnScheduledBackupsEl; + Assert.ok( + turnOnScheduledBackups, + "turn-on-scheduled-backups should be found" + ); + + // Enable passwords + let passwordsCheckbox = turnOnScheduledBackups.passwordOptionsCheckboxEl; + passwordsCheckbox.click(); + await turnOnScheduledBackups.updateComplete; + + let passwordOptionsExpanded = + turnOnScheduledBackups.passwordOptionsExpandedEl; + + Assert.ok( + passwordOptionsExpanded, + "Passwords expanded options should be found" + ); + + passwordOptionsExpanded.inputNewPasswordEl.value = "firefox"; // secret!! + passwordOptionsExpanded.inputNewPasswordEl.revealPassword = true; + passwordOptionsExpanded.inputRepeatPasswordEl.value = "www1989"; + passwordOptionsExpanded.inputRepeatPasswordEl.revealPassword = true; + + let dialog = settings.turnOnScheduledBackupsDialogEl; + let closedPromise = BrowserTestUtils.waitForEvent(dialog, "close"); + dialog.close(); + await closedPromise; + + is( + passwordOptionsExpanded.inputNewPasswordEl.value, + "", + "New password field should be cleared" + ); + is( + passwordOptionsExpanded.inputRepeatPasswordEl.value, + "", + "Repeat password field should be cleared" + ); + is( + passwordOptionsExpanded.inputNewPasswordEl.revealPassword, + false, + "New password field should not be revealed" + ); + is( + passwordOptionsExpanded.inputRepeatPasswordEl.revealPassword, + false, + "Repeat password field should not be revealed" + ); + }); +});