commit 8a727550756a43f4a8bb3745e616f25705d660b8
parent 483b8505236bb03e3da03dc180a54c08ca85e3cd
Author: Harsheet <hsohaney@mozilla.com>
Date: Fri, 24 Oct 2025 21:22:53 +0000
Bug 1995651 - Disable backup for users who have sanitizeOnShutdown turned on. r=fchasen
Differential Revision: https://phabricator.services.mozilla.com/D269500
Diffstat:
2 files changed, 80 insertions(+), 25 deletions(-)
diff --git a/browser/components/backup/BackupService.sys.mjs b/browser/components/backup/BackupService.sys.mjs
@@ -629,6 +629,13 @@ export class BackupService extends EventTarget {
};
}
+ if (Services.prefs.getBoolPref("privacy.sanitize.sanitizeOnShutdown")) {
+ return {
+ enabled: false,
+ reason: "Backup is disabled for users with sanitizeOnShutdown enabled.",
+ };
+ }
+
return { enabled: true };
}
@@ -655,6 +662,13 @@ export class BackupService extends EventTarget {
};
}
+ if (Services.prefs.getBoolPref("privacy.sanitize.sanitizeOnShutdown")) {
+ return {
+ enabled: false,
+ reason: "Backup is disabled for users with sanitizeOnShutdown enabled.",
+ };
+ }
+
return { enabled: true };
}
@@ -3882,6 +3896,10 @@ export class BackupService extends EventTarget {
BACKUP_RESTORE_ENABLED_PREF_NAME,
this.#notifyStatusObservers
);
+ Services.prefs.addObserver(
+ "privacy.sanitize.sanitizeOnShutdown",
+ this.#notifyStatusObservers
+ );
lazy.NimbusFeatures.backupService.onUpdate(this.#notifyStatusObservers);
}
@@ -3894,6 +3912,10 @@ export class BackupService extends EventTarget {
BACKUP_RESTORE_ENABLED_PREF_NAME,
this.#notifyStatusObservers
);
+ Services.prefs.removeObserver(
+ "privacy.sanitize.sanitizeOnShutdown",
+ this.#notifyStatusObservers
+ );
}
/**
diff --git a/browser/components/backup/tests/browser/browser_settings.js b/browser/components/backup/tests/browser/browser_settings.js
@@ -24,33 +24,62 @@ add_setup(async () => {
*/
add_task(async function test_preferences_visibility() {
await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => {
+ const sandbox = sinon.createSandbox();
let backupSection =
- browser.contentDocument.querySelector("#dataBackupGroup");
+ browser.contentDocument.querySelector("#dataBackupSection");
+ let syncPane = gBrowser.contentWindow.gSyncPane;
+ let settings = browser.contentDocument.querySelector("backup-settings");
+
+ const spy = sandbox.spy(syncPane, "updateBackupUIVisibility");
+ Services.obs.addObserver(
+ syncPane.updateBackupUIVisibility,
+ "backup-service-status-updated"
+ );
+
Assert.ok(backupSection, "Found backup preferences section");
+ const waitForCall = () =>
+ BrowserTestUtils.waitForCondition(
+ () => spy.callCount >= 1,
+ `Waiting for updateBackupUIVisibility() to be called 1 time`
+ );
+
// Our mochitest-browser tests are configured to have the section visible
// by default.
Assert.ok(
BrowserTestUtils.isVisible(backupSection),
"Backup section is visible"
);
- });
- await SpecialPowers.pushPrefEnv({
- set: [[BACKUP_ARCHIVE_ENABLED_PREF, false]],
- });
+ await SpecialPowers.pushPrefEnv({
+ set: [["privacy.sanitize.sanitizeOnShutdown", true]],
+ });
- await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => {
- let backupSection =
- browser.contentDocument.querySelector("#dataBackupGroup");
- Assert.ok(backupSection, "Found backup preferences section");
+ await waitForCall();
+
+ Assert.ok(
+ BrowserTestUtils.isHidden(backupSection),
+ "Backup section is not available"
+ );
+
+ await SpecialPowers.popPrefEnv();
+
+ await waitForCall();
Assert.ok(
BrowserTestUtils.isVisible(backupSection),
- "Backup section is still visible"
+ "Backup section is visible"
+ );
+
+ await SpecialPowers.pushPrefEnv({
+ set: [[BACKUP_ARCHIVE_ENABLED_PREF, false]],
+ });
+
+ Assert.ok(
+ BrowserTestUtils.isVisible(backupSection),
+ "Backup section is now visible"
);
- let settings = browser.contentDocument.querySelector("backup-settings");
let backupArchiveSection = settings.querySelector("#scheduled-backups");
Assert.ok(!backupArchiveSection, "Backup archive section is not available");
@@ -59,27 +88,31 @@ add_task(async function test_preferences_visibility() {
settings.restoreFromBackupEl,
"Backup restore section is available"
);
- });
- await SpecialPowers.pushPrefEnv({
- set: [[BACKUP_RESTORE_ENABLED_PREF, false]],
- });
- await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => {
- let settings = browser.contentDocument.querySelector("backup-settings");
+
+ await SpecialPowers.pushPrefEnv({
+ set: [[BACKUP_RESTORE_ENABLED_PREF, false]],
+ });
+
+ await settings.updateComplete;
+
+ Assert.ok(
+ BrowserTestUtils.isHidden(backupSection),
+ "Backup section is not available"
+ );
+
Assert.ok(
!settings.restoreFromBackupEl,
"Backup Restore section is not available"
);
- let backupSection =
- browser.contentDocument.querySelector("#dataBackupGroup");
- Assert.ok(
- BrowserTestUtils.isHidden(backupSection),
- "Backup section is now hidden"
+ await SpecialPowers.popPrefEnv();
+ await SpecialPowers.popPrefEnv();
+
+ Services.obs.removeObserver(
+ gBrowser.contentWindow.gSyncPane.updateBackupUIVisibility,
+ "backup-service-status-updated"
);
});
-
- await SpecialPowers.popPrefEnv();
- await SpecialPowers.popPrefEnv();
});
/**