summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/xpcshell/test_nodisable_hidden.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_nodisable_hidden.js')
-rw-r--r--toolkit/mozapps/extensions/test/xpcshell/test_nodisable_hidden.js99
1 files changed, 99 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_nodisable_hidden.js b/toolkit/mozapps/extensions/test/xpcshell/test_nodisable_hidden.js
new file mode 100644
index 0000000000..a7bd6f52bb
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_nodisable_hidden.js
@@ -0,0 +1,99 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// This test verifies that hidden add-ons cannot be user disabled.
+
+// for system add-ons
+const distroDir = FileUtils.getDir("ProfD", ["sysfeatures"], true);
+registerDirectory("XREAppFeat", distroDir);
+
+const NORMAL_ID = "normal@tests.mozilla.org";
+const SYSTEM_ID = "system@tests.mozilla.org";
+
+createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
+
+// normal add-ons can be user disabled.
+add_task(async function () {
+ await promiseStartupManager();
+
+ await promiseInstallWebExtension({
+ manifest: {
+ name: "Test disabling hidden add-ons, non-hidden add-on case.",
+ version: "1.0",
+ browser_specific_settings: { gecko: { id: NORMAL_ID } },
+ },
+ });
+
+ let addon = await promiseAddonByID(NORMAL_ID);
+ Assert.notEqual(addon, null);
+ Assert.equal(addon.version, "1.0");
+ Assert.equal(
+ addon.name,
+ "Test disabling hidden add-ons, non-hidden add-on case."
+ );
+ Assert.ok(addon.isCompatible);
+ Assert.ok(!addon.appDisabled);
+ Assert.ok(!addon.userDisabled);
+ Assert.ok(addon.isActive);
+ Assert.equal(addon.type, "extension");
+
+ // normal add-ons can be disabled by the user.
+ await addon.disable();
+
+ Assert.notEqual(addon, null);
+ Assert.equal(addon.version, "1.0");
+ Assert.equal(
+ addon.name,
+ "Test disabling hidden add-ons, non-hidden add-on case."
+ );
+ Assert.ok(addon.isCompatible);
+ Assert.ok(!addon.appDisabled);
+ Assert.ok(addon.userDisabled);
+ Assert.ok(!addon.isActive);
+ Assert.equal(addon.type, "extension");
+
+ await addon.uninstall();
+
+ await promiseShutdownManager();
+});
+
+// system add-ons can never be user disabled.
+add_task(async function () {
+ let xpi = createTempWebExtensionFile({
+ manifest: {
+ name: "Test disabling hidden add-ons, hidden system add-on case.",
+ version: "1.0",
+ browser_specific_settings: { gecko: { id: SYSTEM_ID } },
+ },
+ });
+ xpi.copyTo(distroDir, `${SYSTEM_ID}.xpi`);
+ await overrideBuiltIns({ system: [SYSTEM_ID] });
+
+ await promiseStartupManager();
+
+ let addon = await promiseAddonByID(SYSTEM_ID);
+ Assert.notEqual(addon, null);
+ Assert.equal(addon.version, "1.0");
+ Assert.equal(
+ addon.name,
+ "Test disabling hidden add-ons, hidden system add-on case."
+ );
+ Assert.ok(addon.isCompatible);
+ Assert.ok(!addon.appDisabled);
+ Assert.ok(!addon.userDisabled);
+ Assert.ok(addon.isActive);
+ Assert.equal(addon.type, "extension");
+
+ // system add-ons cannot be disabled by the user.
+ await Assert.rejects(
+ addon.disable(),
+ err => err.message == `Cannot disable system add-on ${SYSTEM_ID}`,
+ "disable() on a hidden add-on should fail"
+ );
+
+ Assert.ok(!addon.userDisabled);
+ Assert.ok(addon.isActive);
+
+ await promiseShutdownManager();
+});