summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/update/tests/unit_background_update/test_backgroundupdate_reason_schedule.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/update/tests/unit_background_update/test_backgroundupdate_reason_schedule.js')
-rw-r--r--toolkit/mozapps/update/tests/unit_background_update/test_backgroundupdate_reason_schedule.js136
1 files changed, 136 insertions, 0 deletions
diff --git a/toolkit/mozapps/update/tests/unit_background_update/test_backgroundupdate_reason_schedule.js b/toolkit/mozapps/update/tests/unit_background_update/test_backgroundupdate_reason_schedule.js
new file mode 100644
index 0000000000..277ea993ec
--- /dev/null
+++ b/toolkit/mozapps/update/tests/unit_background_update/test_backgroundupdate_reason_schedule.js
@@ -0,0 +1,136 @@
+/* -*- 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/. */
+
+"use strict";
+
+const { BackgroundUpdate } = ChromeUtils.importESModule(
+ "resource://gre/modules/BackgroundUpdate.sys.mjs"
+);
+let reasons = () => BackgroundUpdate._reasonsToNotScheduleUpdates();
+let REASON = BackgroundUpdate.REASON;
+
+const { AddonTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/AddonTestUtils.sys.mjs"
+);
+const { ExtensionTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/ExtensionXPCShellUtils.sys.mjs"
+);
+
+setupProfileService();
+
+// Setup that allows to install a langpack.
+ExtensionTestUtils.init(this);
+
+AddonTestUtils.init(this);
+AddonTestUtils.overrideCertDB();
+
+AddonTestUtils.createAppInfo(
+ "xpcshell@tests.mozilla.org",
+ "XPCShell",
+ "42",
+ "42"
+);
+
+add_setup(function test_setup() {
+ // FOG needs a profile directory to put its data in.
+ do_get_profile();
+
+ // We need to initialize it once, otherwise operations will be stuck in the pre-init queue.
+ Services.fog.initializeFOG();
+
+ setupProfileService();
+});
+
+add_task(
+ {
+ skip_if: () => !AppConstants.MOZ_BACKGROUNDTASKS,
+ },
+ async function test_reasons_schedule_langpacks() {
+ await AddonTestUtils.promiseStartupManager();
+
+ Services.prefs.setBoolPref("app.update.langpack.enabled", true);
+
+ let result = await reasons();
+ Assert.ok(
+ !result.includes(REASON.LANGPACK_INSTALLED),
+ "Reasons does not include LANGPACK_INSTALLED"
+ );
+
+ // Install a langpack.
+ let langpack = {
+ "manifest.json": {
+ name: "test Language Pack",
+ version: "1.0",
+ manifest_version: 2,
+ browser_specific_settings: {
+ gecko: {
+ id: "@test-langpack",
+ strict_min_version: "42.0",
+ strict_max_version: "42.0",
+ },
+ },
+ langpack_id: "fr",
+ languages: {
+ fr: {
+ chrome_resources: {
+ global: "chrome/fr/locale/fr/global/",
+ },
+ version: "20171001190118",
+ },
+ },
+ sources: {
+ browser: {
+ base_path: "browser/",
+ },
+ },
+ },
+ };
+
+ await Promise.all([
+ TestUtils.topicObserved("webextension-langpack-startup"),
+ AddonTestUtils.promiseInstallXPI(langpack),
+ ]);
+
+ result = await reasons();
+ Assert.ok(
+ result.includes(REASON.LANGPACK_INSTALLED),
+ "Reasons include LANGPACK_INSTALLED"
+ );
+ result = await checkGleanPing();
+ Assert.ok(
+ result.includes(REASON.LANGPACK_INSTALLED),
+ "Recognizes a language pack is installed."
+ );
+
+ // Now turn off langpack updating.
+ Services.prefs.setBoolPref("app.update.langpack.enabled", false);
+
+ result = await reasons();
+ Assert.ok(
+ !result.includes(REASON.LANGPACK_INSTALLED),
+ "Reasons does not include LANGPACK_INSTALLED"
+ );
+ result = await checkGleanPing();
+ Assert.ok(
+ !result.includes(REASON.LANGPACK_INSTALLED),
+ "No Glean metric when no language pack is installed."
+ );
+ }
+);
+
+add_task(
+ {
+ skip_if: () => !AppConstants.MOZ_BACKGROUNDTASKS,
+ },
+ async function test_reasons_schedule_default_profile() {
+ // It's difficult to arrange a default profile in a testing environment, so
+ // this is not as thorough as we'd like.
+ let result = await reasons();
+
+ Assert.ok(result.includes(REASON.NO_DEFAULT_PROFILE_EXISTS));
+ Assert.ok(result.includes(REASON.NOT_DEFAULT_PROFILE));
+ }
+);