summaryrefslogtreecommitdiffstats
path: root/toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtasksutils.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtasksutils.js
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtasksutils.js')
-rw-r--r--toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtasksutils.js197
1 files changed, 197 insertions, 0 deletions
diff --git a/toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtasksutils.js b/toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtasksutils.js
new file mode 100644
index 0000000000..93ff0466b6
--- /dev/null
+++ b/toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtasksutils.js
@@ -0,0 +1,197 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * vim: sw=4 ts=4 sts=4 et
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const { BackgroundTasksUtils } = ChromeUtils.importESModule(
+ "resource://gre/modules/BackgroundTasksUtils.sys.mjs"
+);
+
+const lazy = {};
+ChromeUtils.defineESModuleGetters(lazy, {
+ ASRouterTargeting: "resource:///modules/asrouter/ASRouterTargeting.sys.mjs",
+});
+
+setupProfileService();
+
+add_task(async function test_withProfileLock() {
+ let profileService = Cc["@mozilla.org/toolkit/profile-service;1"].getService(
+ Ci.nsIToolkitProfileService
+ );
+
+ let profilePath = do_get_profile();
+ profilePath.append(`test_withProfileLock`);
+ let profile = profileService.createUniqueProfile(
+ profilePath,
+ "test_withProfileLock"
+ );
+
+ await BackgroundTasksUtils.withProfileLock(async lock => {
+ BackgroundTasksUtils._throwIfNotLocked(lock);
+ }, profile);
+
+ // In debug builds, an unlocked lock crashes via `NS_ERROR` when
+ // `.directory` is invoked. There's no way to check that the lock
+ // is unlocked, so we can't realistically test this scenario in
+ // debug builds.
+ if (!AppConstants.DEBUG) {
+ await Assert.rejects(
+ BackgroundTasksUtils.withProfileLock(async lock => {
+ lock.unlock();
+ BackgroundTasksUtils._throwIfNotLocked(lock);
+ }, profile),
+ /Profile is not locked/
+ );
+ }
+});
+
+add_task(async function test_readPreferences() {
+ let profileService = Cc["@mozilla.org/toolkit/profile-service;1"].getService(
+ Ci.nsIToolkitProfileService
+ );
+
+ let profilePath = do_get_profile();
+ profilePath.append(`test_readPreferences`);
+ let profile = profileService.createUniqueProfile(
+ profilePath,
+ "test_readPreferences"
+ );
+
+ // Before we write any preferences, we fail to read.
+ await Assert.rejects(
+ BackgroundTasksUtils.withProfileLock(
+ lock => BackgroundTasksUtils.readPreferences(null, lock),
+ profile
+ ),
+ /NotFoundError/
+ );
+
+ let s = `user_pref("testPref.bool1", true);
+ user_pref("testPref.bool2", false);
+ user_pref("testPref.int1", 23);
+ user_pref("testPref.int2", -1236);
+ `;
+
+ let prefsFile = profile.rootDir.clone();
+ prefsFile.append("prefs.js");
+ await IOUtils.writeUTF8(prefsFile.path, s);
+
+ // Now we can read all the prefs.
+ let prefs = await BackgroundTasksUtils.withProfileLock(
+ lock => BackgroundTasksUtils.readPreferences(null, lock),
+ profile
+ );
+ let expected = {
+ "testPref.bool1": true,
+ "testPref.bool2": false,
+ "testPref.int1": 23,
+ "testPref.int2": -1236,
+ };
+ Assert.deepEqual(prefs, expected, "Prefs read are correct");
+
+ // And we can filter the read as well.
+ prefs = await BackgroundTasksUtils.withProfileLock(
+ lock =>
+ BackgroundTasksUtils.readPreferences(name => name.endsWith("1"), lock),
+ profile
+ );
+ expected = {
+ "testPref.bool1": true,
+ "testPref.int1": 23,
+ };
+ Assert.deepEqual(prefs, expected, "Filtered prefs read are correct");
+});
+
+add_task(async function test_readTelemetryClientID() {
+ let profileService = Cc["@mozilla.org/toolkit/profile-service;1"].getService(
+ Ci.nsIToolkitProfileService
+ );
+
+ let profilePath = do_get_profile();
+ profilePath.append(`test_readTelemetryClientID`);
+ let profile = profileService.createUniqueProfile(
+ profilePath,
+ "test_readTelemetryClientID"
+ );
+
+ // Before we write any state, we fail to read.
+ await Assert.rejects(
+ BackgroundTasksUtils.withProfileLock(
+ lock => BackgroundTasksUtils.readTelemetryClientID(lock),
+ profile
+ ),
+ /NotFoundError/
+ );
+
+ let expected = {
+ clientID: "9cc75672-6830-4cb6-a7fd-089d6c7ce34c",
+ ecosystemClientID: "752f9d53-73fc-4006-a93c-d3e2e427f238",
+ };
+ let prefsFile = profile.rootDir.clone();
+ prefsFile.append("datareporting");
+ prefsFile.append("state.json");
+ await IOUtils.writeUTF8(prefsFile.path, JSON.stringify(expected));
+
+ // Now we can read the state.
+ let state = await BackgroundTasksUtils.withProfileLock(
+ lock => BackgroundTasksUtils.readTelemetryClientID(lock),
+ profile
+ );
+ Assert.deepEqual(state, expected.clientID, "State read is correct");
+});
+
+add_task(
+ {
+ skip_if: () => AppConstants.MOZ_BUILD_APP !== "browser", // ASRouter is Firefox-only.
+ },
+ async function test_readFirefoxMessagingSystemTargetingSnapshot() {
+ let profileService = Cc[
+ "@mozilla.org/toolkit/profile-service;1"
+ ].getService(Ci.nsIToolkitProfileService);
+
+ let profilePath = do_get_profile();
+ profilePath.append(`test_readFirefoxMessagingSystemTargetingSnapshot`);
+ let profile = profileService.createUniqueProfile(
+ profilePath,
+ "test_readFirefoxMessagingSystemTargetingSnapshot"
+ );
+
+ // Before we write any state, we fail to read.
+ await Assert.rejects(
+ BackgroundTasksUtils.withProfileLock(
+ lock =>
+ BackgroundTasksUtils.readFirefoxMessagingSystemTargetingSnapshot(
+ lock
+ ),
+ profile
+ ),
+ /NotFoundError/
+ );
+
+ // We can't take a full environment snapshot under `xpcshell`. Select a few
+ // items that do work.
+ let target = {
+ // `Date` instances and strings do not `deepEqual` each other.
+ currentDate: JSON.stringify(
+ await lazy.ASRouterTargeting.Environment.currentDate
+ ),
+ firefoxVersion: lazy.ASRouterTargeting.Environment.firefoxVersion,
+ };
+ let expected = await lazy.ASRouterTargeting.getEnvironmentSnapshot({
+ targets: [target],
+ });
+
+ let snapshotFile = profile.rootDir.clone();
+ snapshotFile.append("targeting.snapshot.json");
+ await IOUtils.writeUTF8(snapshotFile.path, JSON.stringify(expected));
+
+ // Now we can read the state.
+ let state = await BackgroundTasksUtils.withProfileLock(
+ lock =>
+ BackgroundTasksUtils.readFirefoxMessagingSystemTargetingSnapshot(lock),
+ profile
+ );
+ Assert.deepEqual(state, expected, "State read is correct");
+ }
+);