summaryrefslogtreecommitdiffstats
path: root/browser/components/enterprisepolicies/tests/xpcshell/test_addon_update.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/enterprisepolicies/tests/xpcshell/test_addon_update.js')
-rw-r--r--browser/components/enterprisepolicies/tests/xpcshell/test_addon_update.js156
1 files changed, 156 insertions, 0 deletions
diff --git a/browser/components/enterprisepolicies/tests/xpcshell/test_addon_update.js b/browser/components/enterprisepolicies/tests/xpcshell/test_addon_update.js
new file mode 100644
index 0000000000..0133aa3a40
--- /dev/null
+++ b/browser/components/enterprisepolicies/tests/xpcshell/test_addon_update.js
@@ -0,0 +1,156 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { AddonTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/AddonTestUtils.sys.mjs"
+);
+const { AddonManager } = ChromeUtils.importESModule(
+ "resource://gre/modules/AddonManager.sys.mjs"
+);
+const { ExtensionTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/ExtensionXPCShellUtils.sys.mjs"
+);
+
+AddonTestUtils.init(this);
+AddonTestUtils.overrideCertDB();
+AddonTestUtils.appInfo = getAppInfo();
+ExtensionTestUtils.init(this);
+
+const server = AddonTestUtils.createHttpServer({ hosts: ["example.com"] });
+const BASE_URL = `http://example.com/data`;
+
+let TEST_NAME = "updatable.xpi";
+
+/* Test that when a local file addon is updated,
+ the new version gets installed. */
+add_task(async function test_local_addon_update() {
+ await AddonTestUtils.promiseStartupManager();
+
+ let tmpDir = Services.dirsvc.get("TmpD", Ci.nsIFile);
+ let id = "updatable1@test";
+ let xpi1 = AddonTestUtils.createTempWebExtensionFile({
+ manifest: {
+ version: "1.0",
+ browser_specific_settings: {
+ gecko: { id },
+ },
+ },
+ });
+ xpi1.copyTo(tmpDir, TEST_NAME);
+ let extension = ExtensionTestUtils.expectExtension(id);
+ await Promise.all([
+ extension.awaitStartup(),
+ setupPolicyEngineWithJson({
+ policies: {
+ ExtensionSettings: {
+ "updatable1@test": {
+ installation_mode: "force_installed",
+ install_url: Services.io.newFileURI(tmpDir).spec + "/" + TEST_NAME,
+ },
+ },
+ },
+ }),
+ ]);
+ let addon = await AddonManager.getAddonByID(id);
+ notEqual(addon, null, "Addon should not be null");
+ equal(addon.version, "1.0", "Addon 1.0 installed");
+
+ let xpi2 = AddonTestUtils.createTempWebExtensionFile({
+ manifest: {
+ version: "2.0",
+ browser_specific_settings: {
+ gecko: { id },
+ },
+ },
+ });
+ // overwrite the test file
+ xpi2.copyTo(tmpDir, TEST_NAME);
+
+ extension = ExtensionTestUtils.expectExtension(id);
+ await Promise.all([
+ extension.awaitStartup(),
+ setupPolicyEngineWithJson({
+ policies: {
+ ExtensionSettings: {
+ "updatable1@test": {
+ installation_mode: "force_installed",
+ install_url: Services.io.newFileURI(tmpDir).spec + "/" + TEST_NAME,
+ },
+ },
+ },
+ }),
+ ]);
+
+ addon = await AddonManager.getAddonByID(id);
+ equal(addon.version, "2.0", "Addon 2.0 installed");
+
+ let xpifile = tmpDir.clone();
+ xpifile.append(TEST_NAME);
+ xpifile.remove(false);
+});
+
+/* Test that when the url changes,
+ the new version gets installed. */
+add_task(async function test_newurl_addon_update() {
+ let id = "updatable2@test";
+
+ let xpi1 = AddonTestUtils.createTempWebExtensionFile({
+ manifest: {
+ version: "1.0",
+ browser_specific_settings: {
+ gecko: { id },
+ },
+ },
+ });
+ server.registerFile("/data/policy_test1.xpi", xpi1);
+
+ let xpi2 = AddonTestUtils.createTempWebExtensionFile({
+ manifest: {
+ version: "2.0",
+ browser_specific_settings: {
+ gecko: { id },
+ },
+ },
+ });
+ server.registerFile("/data/policy_test2.xpi", xpi2);
+
+ let extension = ExtensionTestUtils.expectExtension(id);
+ await Promise.all([
+ extension.awaitStartup(),
+ setupPolicyEngineWithJson({
+ policies: {
+ ExtensionSettings: {
+ "updatable2@test": {
+ installation_mode: "force_installed",
+ install_url: `${BASE_URL}/policy_test1.xpi`,
+ },
+ },
+ },
+ }),
+ ]);
+ let addon = await AddonManager.getAddonByID(id);
+ notEqual(addon, null, "Addon should not be null");
+ equal(addon.version, "1.0", "Addon 1.0 installed");
+
+ extension = ExtensionTestUtils.expectExtension(id);
+ await Promise.all([
+ extension.awaitStartup(),
+ setupPolicyEngineWithJson({
+ policies: {
+ ExtensionSettings: {
+ "updatable2@test": {
+ installation_mode: "force_installed",
+ install_url: `${BASE_URL}/policy_test2.xpi`,
+ },
+ },
+ },
+ }),
+ ]);
+
+ addon = await AddonManager.getAddonByID(id);
+ equal(addon.version, "2.0", "Addon 2.0 installed");
+
+ await AddonTestUtils.promiseShutdownManager();
+});