tor-browser

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

commit b4b15b854d83bf32f3307b3f80de415794a1cef4
parent d5812f45707d08f89e3de960685b9154e94f9f52
Author: Duncan McIntosh <dmcintosh@mozilla.com>
Date:   Fri,  5 Dec 2025 18:55:07 +0000

Bug 1996904 - Still show the backup status as long as the error was just an invalid password. r=kpatenio

The test is intentionally very general so it's easier to test similar
cases in future.

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

Diffstat:
Mbrowser/components/backup/content/restore-from-backup.mjs | 8++++++--
Mbrowser/components/backup/tests/browser/browser_settings_restore_from_backup.js | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/browser/components/backup/content/restore-from-backup.mjs b/browser/components/backup/content/restore-from-backup.mjs @@ -354,7 +354,11 @@ export default class RestoreFromBackup extends MozLitElement { const { backupFileInfo, recoveryErrorCode } = this.backupServiceState || {}; // We have errors and are embedded in about:welcome - if (recoveryErrorCode && this.aboutWelcomeEmbedded) { + if ( + recoveryErrorCode && + !this.isIncorrectPassword && + this.aboutWelcomeEmbedded + ) { return this.genericFileErrorTemplate(); } @@ -420,7 +424,7 @@ export default class RestoreFromBackup extends MozLitElement { const { backupFileInfo, recoveryErrorCode } = this.backupServiceState || {}; if (this.aboutWelcomeEmbedded) { - if (recoveryErrorCode) { + if (recoveryErrorCode && !this.isIncorrectPassword) { describedBy = "backup-generic-file-error"; } else if (!backupFileInfo) { describedBy = "restore-from-backup-no-backup-file-link"; diff --git a/browser/components/backup/tests/browser/browser_settings_restore_from_backup.js b/browser/components/backup/tests/browser/browser_settings_restore_from_backup.js @@ -634,3 +634,61 @@ add_task(async function test_support_links_non_embedded() { assertNonEmbeddedSupportLink(passwordErrorLink, "Password error link"); }); }); + +add_task(async function test_error_about_welcome() { + await checkVisibleStatusTemplate({ + status: "error", + aboutWelcome: true, + visible: ["error message"], + }); +}); + +add_task(async function test_invalid_password_about_welcome() { + await checkVisibleStatusTemplate({ + status: "wrong password", + aboutWelcome: true, + visible: ["size", "password error"], + }); +}); + +async function checkVisibleStatusTemplate({ status, aboutWelcome, visible }) { + await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => { + let { restoreFromBackup } = await initializedBackupWidgets(browser); + restoreFromBackup.aboutWelcomeEmbedded = aboutWelcome; + restoreFromBackup.backupServiceState = { + ...restoreFromBackup.backupServiceState, + recoveryErrorCode: + { + "wrong password": ERRORS.UNAUTHORIZED, + }[status] ?? ERRORS.RECOVERY_FAILED, + backupFileInfo: { + date: new Date("2025-11-06T15:37-0500"), + isEncrypted: true, + }, + defaultParent: {}, + backupFileToRestore: "", + }; + await restoreFromBackup.updateComplete; + + const idIsVisible = id => { + const element = restoreFromBackup.shadowRoot.querySelector(`#${id}`); + return element ? BrowserTestUtils.isVisible(element) : false; + }; + + Assert.equal( + await idIsVisible("backup-generic-file-error"), + visible.includes("error message"), + `Error message is ${visible.includes("error message") ? "" : "not "}visible` + ); + Assert.equal( + await idIsVisible("restore-from-backup-backup-found-info"), + visible.includes("size"), + `Size info is ${visible.includes("size") ? "" : "not "}visible` + ); + Assert.equal( + await idIsVisible("backup-password-error"), + visible.includes("password error"), + `Password error is ${visible.includes("password error") ? "" : "not "}visible` + ); + }); +}