commit 25854fa1a7f3bfe514f27da5c7e4a5b128b4d77f
parent 65740bbfc05adb7e717cbf8561f2699588ecb7d4
Author: Harsheet <hsohaney@mozilla.com>
Date: Tue, 28 Oct 2025 15:48:24 +0000
Bug 1901640 - create a new backup when encryption is toggled. r=sthompson,cdupuis
Differential Revision: https://phabricator.services.mozilla.com/D269615
Diffstat:
3 files changed, 36 insertions(+), 16 deletions(-)
diff --git a/browser/components/backup/actors/BackupUIParent.sys.mjs b/browser/components/backup/actors/BackupUIParent.sys.mjs
@@ -74,6 +74,21 @@ export class BackupUIParent extends JSWindowActorParent {
}
/**
+ * Trigger a createBackup call.
+ *
+ * @returns {object} Result of the backup attempt.
+ */
+ async #triggerCreateBackup() {
+ try {
+ await this.#bs.createBackup();
+ return { success: true };
+ } catch (e) {
+ lazy.logConsole.error(`Failed to retrigger backup`, e);
+ return { success: false, errorCode: e.cause || lazy.ERRORS.UNKNOWN };
+ }
+ }
+
+ /**
* Handles messages sent by BackupUIChild.
*
* @param {ReceiveMessageArgument} message
@@ -89,12 +104,7 @@ export class BackupUIParent extends JSWindowActorParent {
if (message.name == "RequestState") {
this.sendState();
} else if (message.name == "TriggerCreateBackup") {
- try {
- await this.#bs.createBackup();
- } catch (e) {
- return { success: false, errorCode: e.cause || lazy.ERRORS.UNKNOWN };
- }
- return { success: true };
+ return await this.#triggerCreateBackup();
} else if (message.name == "EnableScheduledBackups") {
try {
let { parentDirPath, password } = message.data;
@@ -201,11 +211,8 @@ export class BackupUIParent extends JSWindowActorParent {
lazy.logConsole.error(`Failed to enable encryption`, e);
return { success: false, errorCode: e.cause || lazy.ERRORS.UNKNOWN };
}
- /**
- * TODO: (Bug 1901640) after enabling encryption, recreate the backup,
- * this time with sensitive data.
- */
- return { success: true };
+
+ return await this.#triggerCreateBackup();
} else if (message.name == "DisableEncryption") {
try {
await this.#bs.disableEncryption();
@@ -214,11 +221,8 @@ export class BackupUIParent extends JSWindowActorParent {
lazy.logConsole.error(`Failed to disable encryption`, e);
return { success: false, errorCode: e.cause || lazy.ERRORS.UNKNOWN };
}
- /**
- * TODO: (Bug 1901640) after disabling encryption, recreate the backup,
- * this time without sensitive data.
- */
- return { success: true };
+
+ return await this.#triggerCreateBackup();
} else if (message.name == "RerunEncryption") {
try {
let { password } = message.data;
diff --git a/browser/components/backup/tests/browser/browser_settings.js b/browser/components/backup/tests/browser/browser_settings.js
@@ -128,6 +128,9 @@ add_task(async function test_disable_backup_encryption_confirm() {
let disableEncryptionStub = sandbox
.stub(BackupService.prototype, "disableEncryption")
.resolves(true);
+ let createBackupStub = sandbox
+ .stub(BackupService.prototype, "createBackup")
+ .resolves(true);
Assert.ok(
Services.prefs.getBoolPref(BACKUP_RESTORE_ENABLED_PREF),
@@ -191,6 +194,11 @@ add_task(async function test_disable_backup_encryption_confirm() {
"BackupService was called to disable encryption"
);
+ Assert.ok(
+ createBackupStub.calledOnce,
+ "BackupService was called to create a new backup"
+ );
+
let legacyEvents = TelemetryTestUtils.getEvents(
{
category: "browser.backup",
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
@@ -18,6 +18,9 @@ add_task(async function test_enable_backup_encryption_checkbox_confirm() {
let enableEncryptionStub = sandbox
.stub(BackupService.prototype, "enableEncryption")
.resolves(true);
+ let createBackupStub = sandbox
+ .stub(BackupService.prototype, "createBackup")
+ .resolves(true);
await SpecialPowers.pushPrefEnv({
set: [[SCHEDULED_BACKUPS_ENABLED_PREF, true]],
@@ -105,6 +108,11 @@ add_task(async function test_enable_backup_encryption_checkbox_confirm() {
"BackupService was called to enable encryption with inputted password"
);
+ Assert.ok(
+ createBackupStub.calledOnce,
+ "BackupService was called to create a new backup"
+ );
+
let legacyEvents = TelemetryTestUtils.getEvents(
{
category: "browser.backup",