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:
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"
+ );
+ });
+});