summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/webextensions/test/xpcshell/test_reload.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/webextensions/test/xpcshell/test_reload.js')
-rw-r--r--toolkit/mozapps/webextensions/test/xpcshell/test_reload.js235
1 files changed, 0 insertions, 235 deletions
diff --git a/toolkit/mozapps/webextensions/test/xpcshell/test_reload.js b/toolkit/mozapps/webextensions/test/xpcshell/test_reload.js
deleted file mode 100644
index 5873d1980..000000000
--- a/toolkit/mozapps/webextensions/test/xpcshell/test_reload.js
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
-
-const sampleAddon = {
- id: "webextension1@tests.mozilla.org",
- name: "webextension_1",
-}
-
-const manifestSample = {
- id: "bootstrap1@tests.mozilla.org",
- version: "1.0",
- bootstrap: true,
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }],
-};
-
-const { Management } = Components.utils.import("resource://gre/modules/Extension.jsm", {});
-
-function promiseAddonStartup() {
- return new Promise(resolve => {
- let listener = (extension) => {
- Management.off("startup", listener);
- resolve(extension);
- };
-
- Management.on("startup", listener);
- });
-}
-
-function* installAddon(fixtureName, addonID) {
- yield promiseInstallAllFiles([do_get_addon(fixtureName)]);
- return promiseAddonByID(addonID);
-}
-
-function* tearDownAddon(addon) {
- addon.uninstall();
- yield promiseShutdownManager();
-}
-
-add_task(function* test_reloading_a_temp_addon() {
- yield promiseRestartManager();
- yield AddonManager.installTemporaryAddon(do_get_addon(sampleAddon.name));
- const addon = yield promiseAddonByID(sampleAddon.id)
-
- var receivedOnUninstalled = false;
- var receivedOnUninstalling = false;
- var receivedOnInstalled = false;
- var receivedOnInstalling = false;
-
- const onReload = new Promise(resolve => {
- const listener = {
- onUninstalling: (addonObj) => {
- if (addonObj.id === sampleAddon.id) {
- receivedOnUninstalling = true;
- }
- },
- onUninstalled: (addonObj) => {
- if (addonObj.id === sampleAddon.id) {
- receivedOnUninstalled = true;
- }
- },
- onInstalling: (addonObj) => {
- receivedOnInstalling = true;
- equal(addonObj.id, sampleAddon.id);
- },
- onInstalled: (addonObj) => {
- receivedOnInstalled = true;
- equal(addonObj.id, sampleAddon.id);
- // This should be the last event called.
- AddonManager.removeAddonListener(listener);
- resolve();
- },
- }
- AddonManager.addAddonListener(listener);
- });
-
- yield addon.reload();
- yield onReload;
-
- // Make sure reload() doesn't trigger uninstall events.
- equal(receivedOnUninstalled, false, "reload should not trigger onUninstalled");
- equal(receivedOnUninstalling, false, "reload should not trigger onUninstalling");
-
- // Make sure reload() triggers install events, like an upgrade.
- equal(receivedOnInstalling, true, "reload should trigger onInstalling");
- equal(receivedOnInstalled, true, "reload should trigger onInstalled");
-
- yield tearDownAddon(addon);
-});
-
-add_task(function* test_can_reload_permanent_addon() {
- yield promiseRestartManager();
- const addon = yield installAddon(sampleAddon.name, sampleAddon.id);
-
- let disabledCalled = false;
- let enabledCalled = false;
- AddonManager.addAddonListener({
- onDisabled: (aAddon) => {
- do_check_false(enabledCalled);
- disabledCalled = true
- },
- onEnabled: (aAddon) => {
- do_check_true(disabledCalled);
- enabledCalled = true
- }
- })
-
- yield addon.reload();
-
- do_check_true(disabledCalled);
- do_check_true(enabledCalled);
-
- notEqual(addon, null);
- equal(addon.appDisabled, false);
- equal(addon.userDisabled, false);
-
- yield tearDownAddon(addon);
-});
-
-add_task(function* test_reload_to_invalid_version_fails() {
- yield promiseRestartManager();
- let tempdir = gTmpD.clone();
-
- // The initial version of the add-on will be compatible, and will therefore load
- const addonId = "invalid_version_cannot_be_reloaded@tests.mozilla.org";
- let manifest = {
- name: "invalid_version_cannot_be_reloaded",
- description: "test invalid_version_cannot_be_reloaded",
- manifest_version: 2,
- version: "1.0",
- applications: {
- gecko: {
- id: addonId,
- }
- },
- };
-
- let addonDir = yield promiseWriteWebManifestForExtension(manifest, tempdir, "invalid_version");
- yield AddonManager.installTemporaryAddon(addonDir);
- yield promiseAddonStartup();
-
- let addon = yield promiseAddonByID(addonId);
- notEqual(addon, null);
- equal(addon.id, addonId);
- equal(addon.version, "1.0");
- equal(addon.appDisabled, false);
- equal(addon.userDisabled, false);
- addonDir.remove(true);
-
- // update the manifest to make the add-on version incompatible, so the reload will reject
- manifest.applications.gecko.strict_min_version = "1";
- manifest.applications.gecko.strict_max_version = "1";
- manifest.version = "2.0";
-
- addonDir = yield promiseWriteWebManifestForExtension(manifest, tempdir, "invalid_version", false);
- let expectedMsg = new RegExp("Add-on invalid_version_cannot_be_reloaded@tests.mozilla.org is not compatible with application version. " +
- "add-on minVersion: 1. add-on maxVersion: 1.");
-
- yield Assert.rejects(addon.reload(),
- expectedMsg,
- "Reload rejects when application version does not fall between minVersion and maxVersion");
-
- let reloadedAddon = yield promiseAddonByID(addonId);
- notEqual(reloadedAddon, null);
- equal(reloadedAddon.id, addonId);
- equal(reloadedAddon.version, "1.0");
- equal(reloadedAddon.appDisabled, false);
- equal(reloadedAddon.userDisabled, false);
-
- yield tearDownAddon(reloadedAddon);
- addonDir.remove(true);
-});
-
-add_task(function* test_manifest_changes_are_refreshed() {
- yield promiseRestartManager();
- let tempdir = gTmpD.clone();
-
- const unpackedAddon = writeInstallRDFToDir(
- Object.assign({}, manifestSample, {
- name: "Test Bootstrap 1",
- }), tempdir, manifestSample.id, "bootstrap.js");
-
- yield AddonManager.installTemporaryAddon(unpackedAddon);
- const addon = yield promiseAddonByID(manifestSample.id);
- notEqual(addon, null);
- equal(addon.name, "Test Bootstrap 1");
-
- writeInstallRDFToDir(Object.assign({}, manifestSample, {
- name: "Test Bootstrap 1 (reloaded)",
- }), tempdir, manifestSample.id);
-
- yield addon.reload();
-
- const reloadedAddon = yield promiseAddonByID(manifestSample.id);
- notEqual(reloadedAddon, null);
- equal(reloadedAddon.name, "Test Bootstrap 1 (reloaded)");
-
- yield tearDownAddon(reloadedAddon);
- unpackedAddon.remove(true);
-});
-
-add_task(function* test_reload_fails_on_installation_errors() {
- yield promiseRestartManager();
- let tempdir = gTmpD.clone();
-
- const unpackedAddon = writeInstallRDFToDir(
- Object.assign({}, manifestSample, {
- name: "Test Bootstrap 1",
- }), tempdir, manifestSample.id, "bootstrap.js");
-
- yield AddonManager.installTemporaryAddon(unpackedAddon);
- const addon = yield promiseAddonByID(manifestSample.id);
- notEqual(addon, null);
-
- // Trigger an installation error with an empty manifest.
- writeInstallRDFToDir({}, tempdir, manifestSample.id);
-
- yield Assert.rejects(addon.reload(), /No ID in install manifest/);
-
- // The old add-on should be active. I.E. the broken reload will not
- // disturb it.
- const oldAddon = yield promiseAddonByID(manifestSample.id);
- notEqual(oldAddon, null);
- equal(oldAddon.isActive, true);
- equal(oldAddon.name, "Test Bootstrap 1");
-
- yield tearDownAddon(addon);
- unpackedAddon.remove(true);
-});