commit 4fd36a25bb8ca453b819ae0f3bf019ea7dece108
parent 7d6c3e772f2bf02724ae077ef0795c8565fa34b0
Author: Duncan McIntosh <dmcintosh@mozilla.com>
Date: Mon, 3 Nov 2025 21:53:03 +0000
Bug 1997391 - Part 2: Add internalReason and specific tests for archive and restore disable statuses. r=cdupuis
Differential Revision: https://phabricator.services.mozilla.com/D270720
Diffstat:
3 files changed, 92 insertions(+), 2 deletions(-)
diff --git a/browser/components/backup/BackupService.sys.mjs b/browser/components/backup/BackupService.sys.mjs
@@ -628,6 +628,7 @@ export class BackupService extends EventTarget {
return {
enabled: false,
reason: "Archiving a profile disabled by user pref.",
+ internalReason: "pref",
};
}
@@ -635,6 +636,7 @@ export class BackupService extends EventTarget {
return {
enabled: false,
reason: "Backup is disabled for users with sanitizeOnShutdown enabled.",
+ internalReason: "sanitizeOnShutdown",
};
}
@@ -643,6 +645,7 @@ export class BackupService extends EventTarget {
enabled: false,
reason:
"Archiving a profile is disabled because the user has created selectable profiles.",
+ internalReason: "selectable profiles",
};
}
@@ -662,6 +665,7 @@ export class BackupService extends EventTarget {
return {
enabled: false,
reason: "Restore from backup disabled remotely.",
+ internalReason: "nimbus",
};
}
@@ -669,6 +673,7 @@ export class BackupService extends EventTarget {
return {
enabled: false,
reason: "Restoring a profile disabled by user pref.",
+ internalReason: "pref",
};
}
@@ -676,6 +681,7 @@ export class BackupService extends EventTarget {
return {
enabled: false,
reason: "Backup is disabled for users with sanitizeOnShutdown enabled.",
+ internalReason: "sanitizeOnShutdown",
};
}
@@ -684,6 +690,7 @@ export class BackupService extends EventTarget {
enabled: false,
reason:
"Restoring a profile is disabled because the user has created selectable profiles.",
+ internalReason: "selectable profiles",
};
}
diff --git a/browser/components/backup/metrics.yaml b/browser/components/backup/metrics.yaml
@@ -680,7 +680,8 @@ browser.backup:
type: string
description: >
Only set if `browser.backup.enabled` is `false`. Possible reasons are
- "nimbus", "pref" (non-Nimbus), "policy", "managedProfiles".
+ "nimbus", "pref" (non-Nimbus), "policy", "sanitizeOnShutdown",
+ "selectable profiles".
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1992808
data_reviews:
diff --git a/browser/components/backup/tests/xpcshell/test_BackupService_enabled.js b/browser/components/backup/tests/xpcshell/test_BackupService_enabled.js
@@ -11,6 +11,10 @@ const { NimbusTestUtils } = ChromeUtils.importESModule(
);
const BACKUP_DIR_PREF_NAME = "browser.backup.location";
+const BACKUP_ARCHIVE_ENABLED_PREF_NAME = "browser.backup.archive.enabled";
+const BACKUP_RESTORE_ENABLED_PREF_NAME = "browser.backup.restore.enabled";
+const SANITIZE_ON_SHUTDOWN_PREF_NAME = "privacy.sanitize.sanitizeOnShutdown";
+const SELECTABLE_PROFILES_CREATED_PREF_NAME = "browser.profiles.created";
add_setup(async () => {
setupProfile();
@@ -59,9 +63,46 @@ add_task(async function test_archive_killswitch_enrollment() {
});
});
+add_task(async function test_archive_enabled_pref() {
+ await archiveTemplate({
+ internalReason: "pref",
+ async disable() {
+ Services.prefs.setBoolPref(BACKUP_ARCHIVE_ENABLED_PREF_NAME, false);
+ },
+ async enable() {
+ Services.prefs.setBoolPref(BACKUP_ARCHIVE_ENABLED_PREF_NAME, true);
+ },
+ });
+});
+
+add_task(async function test_archive_sanitize_on_shutdown() {
+ await archiveTemplate({
+ internalReason: "sanitizeOnShutdown",
+ async disable() {
+ Services.prefs.setBoolPref(SANITIZE_ON_SHUTDOWN_PREF_NAME, true);
+ },
+ async enable() {
+ Services.prefs.setBoolPref(SANITIZE_ON_SHUTDOWN_PREF_NAME, false);
+ },
+ });
+});
+
+add_task(async function test_archive_selectable_profiles() {
+ await archiveTemplate({
+ internalReason: "selectable profiles",
+ async disable() {
+ Services.prefs.setBoolPref(SELECTABLE_PROFILES_CREATED_PREF_NAME, true);
+ },
+ async enable() {
+ Services.prefs.setBoolPref(SELECTABLE_PROFILES_CREATED_PREF_NAME, false);
+ },
+ });
+});
+
add_task(async function test_restore_killswitch_enrollment() {
let cleanupExperiment;
await restoreTemplate({
+ internalReason: "nimbus",
async disable() {
cleanupExperiment = await NimbusTestUtils.enrollWithFeatureConfig({
featureId: "backupService",
@@ -74,6 +115,42 @@ add_task(async function test_restore_killswitch_enrollment() {
});
});
+add_task(async function test_restore_enabled_pref() {
+ await restoreTemplate({
+ internalReason: "pref",
+ async disable() {
+ Services.prefs.setBoolPref(BACKUP_RESTORE_ENABLED_PREF_NAME, false);
+ },
+ async enable() {
+ Services.prefs.setBoolPref(BACKUP_RESTORE_ENABLED_PREF_NAME, true);
+ },
+ });
+});
+
+add_task(async function test_restore_sanitize_on_shutdown() {
+ await restoreTemplate({
+ internalReason: "sanitizeOnShutdown",
+ async disable() {
+ Services.prefs.setBoolPref(SANITIZE_ON_SHUTDOWN_PREF_NAME, true);
+ },
+ async enable() {
+ Services.prefs.setBoolPref(SANITIZE_ON_SHUTDOWN_PREF_NAME, false);
+ },
+ });
+});
+
+add_task(async function test_restore_selectable_profiles() {
+ await restoreTemplate({
+ internalReason: "selectable profiles",
+ async disable() {
+ Services.prefs.setBoolPref(SELECTABLE_PROFILES_CREATED_PREF_NAME, true);
+ },
+ async enable() {
+ Services.prefs.setBoolPref(SELECTABLE_PROFILES_CREATED_PREF_NAME, false);
+ },
+ });
+});
+
async function archiveTemplate({ internalReason, disable, enable }) {
const bs = BackupService.get();
@@ -130,7 +207,7 @@ async function archiveTemplate({ internalReason, disable, enable }) {
await IOUtils.remove(backup.archivePath);
}
-async function restoreTemplate({ disable, enable }) {
+async function restoreTemplate({ internalReason, disable, enable }) {
const bs = BackupService.get();
const backup = await bs.createBackup();
@@ -150,6 +227,11 @@ async function restoreTemplate({ disable, enable }) {
!bs.restoreEnabledStatus.enabled,
"The backup service should report that restoring is now disabled."
);
+ Assert.equal(
+ bs.restoreEnabledStatus.internalReason,
+ internalReason,
+ "`archiveEnabledStatus` should report that it is disabled."
+ );
await Assert.rejects(
bs.recoverFromBackupArchive(