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