commit 686ce3b4a3d0cdcdda26395df2cfb41628f9e493
parent ef6d47f01dadd7a13f3e6add1eecb9c271289df3
Author: Harsheet <hsohaney@mozilla.com>
Date: Sun, 16 Nov 2025 21:14:13 +0000
Bug 1996070 - (part 2) Update tests to reflect BackupServiceState changes. r=cdupuis
Differential Revision: https://phabricator.services.mozilla.com/D272693
Diffstat:
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