tor-browser

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

commit bb8afd2479ca12c0fa9c7924be14c97c19461045
parent e2eb31eb2dff0f76121e2f930803d69f9ee2ca12
Author: Harsheet <hsohaney@mozilla.com>
Date:   Wed, 19 Nov 2025 13:15:50 +0000

Bug 1996070 - (part 2) Update tests to reflect BackupServiceState changes. r=cdupuis

Differential Revision: https://phabricator.services.mozilla.com/D272693

Diffstat:
Mbrowser/components/backup/BackupService.sys.mjs | 4++--
Mbrowser/components/backup/tests/browser/browser_password_validation_inputs.js | 11++++++-----
Mbrowser/components/backup/tests/browser/browser_settings.js | 55+++++++++++++++++++++++++++++++++++++------------------
Mbrowser/components/backup/tests/browser/browser_settings_turn_off_scheduled_backups.js | 20++++++++++----------
Mbrowser/components/backup/tests/chrome/chrome.toml | 1+
Mbrowser/components/backup/tests/chrome/head.js | 20++++++++++++++++++++
Mbrowser/components/backup/tests/chrome/test_backup_settings.html | 98++++++++++++++++++++-----------------------------------------------------------
Mbrowser/components/backup/tests/chrome/test_trigger_create_backup.html | 25+++++++------------------
Mbrowser/components/backup/tests/xpcshell/test_BackupService_retryHeuristic.js | 24+++++++++++++-----------
Mbrowser/components/backup/tests/xpcshell/test_BackupService_wrongPassword.js | 3++-
10 files changed, 122 insertions(+), 139 deletions(-)

diff --git a/browser/components/backup/BackupService.sys.mjs b/browser/components/backup/BackupService.sys.mjs @@ -193,9 +193,9 @@ XPCOMUtils.defineLazyPreferenceGetter( lazy, "backupErrorCode", BACKUP_ERROR_CODE_PREF_NAME, - ERRORS.NONE, + 0, function onUpdateBackupErrorCode(_pref, _prevVal, newVal) { - let bs = BackupService.init(); + let bs = BackupService.get(); if (bs) { bs.onUpdateBackupErrorCode(newVal); } diff --git a/browser/components/backup/tests/browser/browser_password_validation_inputs.js b/browser/components/backup/tests/browser/browser_password_validation_inputs.js @@ -10,14 +10,14 @@ const SCHEDULED_BACKUPS_ENABLED_PREF = "browser.backup.scheduled.enabled"; * as expected. */ add_task(async function password_validation() { + await SpecialPowers.pushPrefEnv({ + set: [[SCHEDULED_BACKUPS_ENABLED_PREF, true]], + }); + await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => { let sandbox = sinon.createSandbox(); let settings = browser.contentDocument.querySelector("backup-settings"); - await SpecialPowers.pushPrefEnv({ - set: [[SCHEDULED_BACKUPS_ENABLED_PREF, true]], - }); - settings.backupServiceState.encryptionEnabled = true; await settings.requestUpdate(); await settings.updateComplete; @@ -141,7 +141,8 @@ add_task(async function password_validation() { ); Assert.ok(true, "Password rules tooltip should be hidden"); - await SpecialPowers.popPrefEnv(); sandbox.restore(); }); + + await SpecialPowers.popPrefEnv(); }); diff --git a/browser/components/backup/tests/browser/browser_settings.js b/browser/components/backup/tests/browser/browser_settings.js @@ -20,11 +20,11 @@ add_setup(async () => { /** * Tests that the section for controlling backup in about:preferences#sync is - * visible, but can also be hidden via a pref. + * visible, but can also be hidden via a pref. We need to close and open the + * pages since we need a page refresh to see the pref change in effect. */ add_task(async function test_preferences_visibility() { await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => { - const sandbox = sinon.createSandbox(); let settings = browser.contentDocument.querySelector("backup-settings"); // Our mochitest-browser tests are configured to have the section visible @@ -34,48 +34,61 @@ add_task(async function test_preferences_visibility() { BrowserTestUtils.isVisible(settings.archiveSectionEl), "Backup section is visible" ); + }); - await SpecialPowers.pushPrefEnv({ - set: [["privacy.sanitize.sanitizeOnShutdown", true]], - }); + await SpecialPowers.pushPrefEnv({ + set: [["privacy.sanitize.sanitizeOnShutdown", true]], + }); + + await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => { + let settings = browser.contentDocument.querySelector("backup-settings"); Assert.ok( !settings.restoreSectionEl && !settings.archiveSectionEl, "Backup section is not available when sanitizeOnShutdown is enabled" ); + }); - await SpecialPowers.popPrefEnv(); + await SpecialPowers.popPrefEnv(); + + await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => { + let settings = browser.contentDocument.querySelector("backup-settings"); Assert.ok( BrowserTestUtils.isVisible(settings.restoreSectionEl) && BrowserTestUtils.isVisible(settings.archiveSectionEl), "Backup section is visible now" ); + }); - await SpecialPowers.pushPrefEnv({ - set: [[BACKUP_ARCHIVE_ENABLED_PREF, false]], - }); + await SpecialPowers.pushPrefEnv({ + set: [[BACKUP_ARCHIVE_ENABLED_PREF, false]], + }); + + await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => { + let settings = browser.contentDocument.querySelector("backup-settings"); Assert.ok( BrowserTestUtils.isVisible(settings.restoreSectionEl) && !settings.archiveSectionEl, "Backup section is still visible since restore is enabled" ); + }); - await SpecialPowers.pushPrefEnv({ - set: [[BACKUP_RESTORE_ENABLED_PREF, false]], - }); + await SpecialPowers.pushPrefEnv({ + set: [[BACKUP_RESTORE_ENABLED_PREF, false]], + }); + + await BrowserTestUtils.withNewTab("about:preferences#sync", async browser => { + let settings = browser.contentDocument.querySelector("backup-settings"); Assert.ok( !settings.restoreSectionEl && !settings.archiveSectionEl, "Backup section is not available anymore after both archive and restore are disabled" ); - - await SpecialPowers.popPrefEnv(); - await SpecialPowers.popPrefEnv(); - - sandbox.restore(); }); + await SpecialPowers.popPrefEnv(); + await SpecialPowers.popPrefEnv(); }); /** @@ -413,6 +426,13 @@ add_task(async function test_last_backup_info_and_location() { let newBackupParent = await IOUtils.getDirectory( TEST_NEW_BACKUP_PARENT_PATH ); + registerCleanupFunction(async function () { + try { + await IOUtils.remove(TEST_NEW_BACKUP_PARENT_PATH, { recursive: true }); + } catch (e) { + Assert.ok(false, "Had some trouble cleaning up the backup directory"); + } + }); stateUpdated = BrowserTestUtils.waitForEvent( bs, @@ -435,7 +455,6 @@ add_task(async function test_last_backup_info_and_location() { await filePickerShownPromise; await stateUpdated; - await IOUtils.remove(TEST_NEW_BACKUP_PARENT_PATH); await SpecialPowers.popPrefEnv(); sandbox.restore(); }); diff --git a/browser/components/backup/tests/browser/browser_settings_turn_off_scheduled_backups.js b/browser/components/backup/tests/browser/browser_settings_turn_off_scheduled_backups.js @@ -50,6 +50,16 @@ async function turnOffScheduledBackupsHelper(browser, taskFn) { await taskFn(); } +add_setup(async () => { + await SpecialPowers.pushPrefEnv({ + set: [[SCHEDULED_BACKUPS_ENABLED_PREF, true]], + }); + + registerCleanupFunction(async () => { + await SpecialPowers.popPrefEnv(); + }); +}); + /** * Tests that the turn off scheduled backups dialog can set * browser.backup.scheduled.enabled to false from the settings page @@ -65,10 +75,6 @@ add_task(async function test_turn_off_scheduled_backups_confirm() { .stub(BackupService.prototype, "deleteLastBackup") .resolves(true); - await SpecialPowers.pushPrefEnv({ - set: [[SCHEDULED_BACKUPS_ENABLED_PREF, true]], - }); - await turnOffScheduledBackupsHelper(browser, () => { let scheduledPrefVal = Services.prefs.getBoolPref( SCHEDULED_BACKUPS_ENABLED_PREF @@ -93,7 +99,6 @@ add_task(async function test_turn_off_scheduled_backups_confirm() { let events = Glean.browserBackup.toggleOff.testGetValue(); Assert.equal(events.length, 1, "Found the toggleOff Glean event."); - await SpecialPowers.popPrefEnv(); sandbox.restore(); }); }); @@ -126,10 +131,6 @@ add_task(async function test_turn_off_scheduled_backups_disables_encryption() { }; }); - await SpecialPowers.pushPrefEnv({ - set: [[SCHEDULED_BACKUPS_ENABLED_PREF, true]], - }); - await turnOffScheduledBackupsHelper(browser, () => { Assert.ok( disableEncryptionStub.calledOnce, @@ -141,7 +142,6 @@ add_task(async function test_turn_off_scheduled_backups_disables_encryption() { ); }); - await SpecialPowers.popPrefEnv(); sandbox.restore(); }); }); diff --git a/browser/components/backup/tests/chrome/chrome.toml b/browser/components/backup/tests/chrome/chrome.toml @@ -3,6 +3,7 @@ prefs = [ "browser.backup.scheduled.enabled=false", "browser.backup.archive.enabled=true", "browser.backup.restore.enabled=true", + "privacy.sanitize.sanitizeOnShutdown=false" ] support-files = ["head.js"] diff --git a/browser/components/backup/tests/chrome/head.js b/browser/components/backup/tests/chrome/head.js @@ -6,6 +6,26 @@ const MOCK_PASSWORD = "mckP@ss3x2 fake_password"; /** + * Creates a default backupServiceState object with common properties. + * This is used in tests to avoid repetition of the defaultParent structure. + * + * @param {object} overrides - Properties to override or add to the default state + * @returns {object} The complete backupServiceState object + */ +function createBackupServiceState(overrides = {}) { + const testDefaultName = "test-default-path"; + return { + defaultParent: { + path: PathUtils.join(PathUtils.tempDir, testDefaultName), + fileName: testDefaultName, + }, + archiveEnabledStatus: true, + restoreEnabledStatus: true, + ...overrides, + }; +} + +/** * Dispatches a custom event "ValidPasswordsDetected" or "InvalidPasswordsDetected" from * the password-validation-inputs element within a parent element. * Pass "ValidPasswordsDetected" to simulate when a user meets password requirements diff --git a/browser/components/backup/tests/chrome/test_backup_settings.html b/browser/components/backup/tests/chrome/test_backup_settings.html @@ -5,6 +5,7 @@ <title>Tests for the BackupSettings component</title> <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> + <script type="application/javascript" src="head.js"></script> <script src="chrome://browser/content/backup/backup-settings.mjs" type="module" @@ -17,7 +18,6 @@ const { BrowserTestUtils } = ChromeUtils.importESModule( "resource://testing-common/BrowserTestUtils.sys.mjs" ); - const testDefaultName = "test-default-path"; /** * Tests that adding a backup-settings element to the DOM causes it to @@ -42,15 +42,9 @@ add_task(async function test_turnOnScheduledBackupsDialog() { let settings = document.getElementById("test-backup-settings"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - } - } + settings.backupServiceState = createBackupServiceState(); await settings.updateComplete; - let turnOnButton = settings.scheduledBackupsButtonEl; let dialog = settings.turnOnScheduledBackupsDialogEl; @@ -80,13 +74,9 @@ */ add_task(async function test_turnOffScheduledBackupsDialog() { let settings = document.getElementById("test-backup-settings"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ scheduledBackupsEnabled: true, - } + }); await settings.updateComplete; @@ -119,14 +109,10 @@ */ add_task(async function test_disableBackupEncryptionDialog() { let settings = document.getElementById("test-backup-settings"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ scheduledBackupsEnabled: true, encryptionEnabled: true, - } + }); await settings.updateComplete; @@ -160,28 +146,20 @@ add_task(async function test_lastBackupTimestamp() { let settings = document.getElementById("test-backup-settings"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ lastBackupDate: null, lastBackupFileName: "", - }; + }); await settings.updateComplete; let backupInfo = settings.shadowRoot.querySelector("#last-backup-info"); ok(!backupInfo, "Last backup info was not rendered."); const lastBackupTimestamp = 1719769205; const lastBackupFileName = "SomeBackup.html" - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ lastBackupDate: lastBackupTimestamp, lastBackupFileName, - }; + }); await settings.updateComplete; backupInfo = settings.shadowRoot.querySelector("#last-backup-info"); @@ -208,28 +186,20 @@ add_task(async function test_backupLocation() { let settings = document.getElementById("test-backup-settings"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ lastBackupDate: null, lastBackupFileName: "", scheduledBackupsEnabled: false, - }; + }); await settings.updateComplete; let backupLocationControl = settings.shadowRoot.querySelector("#last-backup-location-control"); ok(!backupLocationControl, "Last backup location control was not rendered."); const backupDirPath = "Some/Expected/Path"; - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ scheduledBackupsEnabled: true, backupDirPath, - }; + }); await settings.updateComplete; backupLocationControl = settings.shadowRoot.querySelector("#last-backup-location-control"); @@ -247,14 +217,10 @@ let content = document.getElementById("content"); const backupDirPath = "Some/Expected/Path"; - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ scheduledBackupsEnabled: true, backupDirPath, - }; + }); let locationShowButton = settings.shadowRoot.querySelector("#backup-location-show"); ok(locationShowButton, "Backup location show button exists."); @@ -272,14 +238,10 @@ let content = document.getElementById("content"); const backupDirPath = "Some/Expected/Path"; - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ scheduledBackupsEnabled: true, backupDirPath, - }; + }); let locationEditButton = settings.shadowRoot.querySelector("#backup-location-edit"); ok(locationEditButton, "Backup location edit button exists."); @@ -297,13 +259,9 @@ let settings = document.getElementById("test-backup-settings"); // First check visibility when scheduled backups are disabled - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ scheduledBackupsEnabled: false, - } + }); await settings.updateComplete; ok( @@ -352,13 +310,9 @@ add_task(async function test_content_when_scheduled_backups_disabled() { let settings = document.getElementById("test-backup-settings"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ scheduledBackupsEnabled: false, - } + }); await settings.updateComplete; ok( @@ -384,13 +338,9 @@ add_task(async function test_content_when_scheduled_backups_enabled() { let settings = document.getElementById("test-backup-settings"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, testDefaultName), - fileName: testDefaultName, - }, + settings.backupServiceState = createBackupServiceState({ scheduledBackupsEnabled: true, - } + }); await settings.updateComplete; ok( diff --git a/browser/components/backup/tests/chrome/test_trigger_create_backup.html b/browser/components/backup/tests/chrome/test_trigger_create_backup.html @@ -5,6 +5,7 @@ <title>Tests for the BackupSettings component</title> <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> + <script type="application/javascript" src="head.js"></script> <script src="chrome://browser/content/backup/backup-settings.mjs" type="module" @@ -23,38 +24,26 @@ add_task(async function test_backupTriggerStateChange() { let settings = document.getElementById("test-backup-settings"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, "test-default-path"), - fileName: "test-default-path", - }, + settings.backupServiceState = createBackupServiceState({ backupInProgress: true, scheduledBackupsEnabled: false, - } + }); await settings.updateComplete; ok(!settings.triggerBackupButtonEl, "Trigger backup button is not visible when backup is off"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, "test-default-path"), - fileName: "test-default-path", - }, + settings.backupServiceState = createBackupServiceState({ backupInProgress: true, scheduledBackupsEnabled: true, - } + }); await settings.updateComplete; ok(settings.triggerBackupButtonEl.disabled, "Trigger backup button should be disabled when backing up"); - settings.backupServiceState = { - defaultParent: { - path: PathUtils.join(PathUtils.tempDir, "test-default-path"), - fileName: "test-default-path", - }, + settings.backupServiceState = createBackupServiceState({ backupInProgress: false, scheduledBackupsEnabled: true, - } + }); await settings.updateComplete; ok(!settings.triggerBackupButtonEl.enabled, "Trigger backup button should be enabled"); diff --git a/browser/components/backup/tests/xpcshell/test_BackupService_retryHeuristic.js b/browser/components/backup/tests/xpcshell/test_BackupService_retryHeuristic.js @@ -19,18 +19,20 @@ const BACKUP_DEBUG_INFO_PREF_NAME = "browser.backup.backup-debug-info"; const BACKUP_DEFAULT_LOCATION_PREF_NAME = "browser.backup.location"; function bsInProgressStateUpdate(bs, isBackupInProgress) { + // Check if already in desired state + if (bs.state.backupInProgress === isBackupInProgress) { + return Promise.resolve(); + } + return new Promise(resolve => { - bs.addEventListener( - "BackupService:StateUpdate", - () => { - if (bs.state.backupInProgress == isBackupInProgress) { - resolve(); - } else { - Assert.ok(false, "Failure in waiting for state updates"); - } - }, - { once: true } - ); + const listener = () => { + if (bs.state.backupInProgress === isBackupInProgress) { + bs.removeEventListener("BackupService:StateUpdate", listener); + resolve(); + } + }; + + bs.addEventListener("BackupService:StateUpdate", listener); }); } diff --git a/browser/components/backup/tests/xpcshell/test_BackupService_wrongPassword.js b/browser/components/backup/tests/xpcshell/test_BackupService_wrongPassword.js @@ -7,7 +7,7 @@ ChromeUtils.defineESModuleGetters(this, { ERRORS: "chrome://browser/content/backup/backup-constants.mjs", }); -const bs = new BackupService({ FakeBackupResource1 }); +let bs; const correctPassword = "correcthorsebatterystaple"; const incorrectPassword = "Tr0ub4dor&3"; let testBackupDirPath; @@ -16,6 +16,7 @@ let testBackupPath; add_setup(async function () { setupProfile(); + bs = new BackupService({ FakeBackupResource1 }); let sandbox = sinon.createSandbox(); let fakeManifestEntry = { fake: "test" }; sandbox