tor-browser

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

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:
Mbrowser/components/backup/actors/BackupUIParent.sys.mjs | 36++++++++++++++++++++----------------
Mbrowser/components/backup/tests/browser/browser_settings.js | 8++++++++
Mbrowser/components/backup/tests/browser/browser_settings_enable_backup_encryption.js | 8++++++++
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",