tenfourfox/toolkit/mozapps/extensions/test/xpcshell/test_webextension.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

261 lines
6.9 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
const ID = "webextension1@tests.mozilla.org";
const PREF_SELECTED_LOCALE = "general.useragent.locale";
const profileDir = gProfD.clone();
profileDir.append("extensions");
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
startupManager();
const { GlobalManager, 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);
});
}
add_task(function*() {
do_check_eq(GlobalManager.count, 0);
do_check_false(GlobalManager.extensionMap.has(ID));
yield Promise.all([
promiseInstallAllFiles([do_get_addon("webextension_1")], true),
promiseAddonStartup()
]);
do_check_eq(GlobalManager.count, 1);
do_check_true(GlobalManager.extensionMap.has(ID));
let chromeReg = AM_Cc["@mozilla.org/chrome/chrome-registry;1"].
getService(AM_Ci.nsIChromeRegistry);
try {
chromeReg.convertChromeURL(NetUtil.newURI("chrome://webex/content/webex.xul"));
do_throw("Chrome manifest should not have been registered");
}
catch (e) {
// Expected the chrome url to not be registered
}
let addon = yield promiseAddonByID(ID);
do_check_neq(addon, null);
do_check_eq(addon.version, "1.0");
do_check_eq(addon.name, "Web Extension Name");
do_check_true(addon.isCompatible);
do_check_false(addon.appDisabled);
do_check_true(addon.isActive);
do_check_eq(addon.type, "extension");
do_check_eq(addon.signedState, mozinfo.addon_signing ? AddonManager.SIGNEDSTATE_MISSING : AddonManager.SIGNEDSTATE_NOT_REQUIRED);
let uri = do_get_addon_root_uri(profileDir, ID);
do_check_eq(addon.iconURL, uri + "icon48.png");
do_check_eq(addon.icon64URL, uri + "icon64.png");
// Should persist through a restart
yield promiseShutdownManager();
do_check_eq(GlobalManager.count, 0);
do_check_false(GlobalManager.extensionMap.has(ID));
startupManager();
yield promiseAddonStartup();
do_check_eq(GlobalManager.count, 1);
do_check_true(GlobalManager.extensionMap.has(ID));
addon = yield promiseAddonByID(ID);
do_check_neq(addon, null);
do_check_eq(addon.version, "1.0");
do_check_eq(addon.name, "Web Extension Name");
do_check_true(addon.isCompatible);
do_check_false(addon.appDisabled);
do_check_true(addon.isActive);
do_check_eq(addon.type, "extension");
do_check_eq(addon.signedState, mozinfo.addon_signing ? AddonManager.SIGNEDSTATE_MISSING : AddonManager.SIGNEDSTATE_NOT_REQUIRED);
let file = getFileForAddon(profileDir, ID);
do_check_true(file.exists());
uri = do_get_addon_root_uri(profileDir, ID);
do_check_eq(addon.iconURL, uri + "icon48.png");
do_check_eq(addon.icon64URL, uri + "icon64.png");
addon.userDisabled = true;
do_check_eq(GlobalManager.count, 0);
do_check_false(GlobalManager.extensionMap.has(ID));
addon.userDisabled = false;
yield promiseAddonStartup();
do_check_eq(GlobalManager.count, 1);
do_check_true(GlobalManager.extensionMap.has(ID));
addon.uninstall();
do_check_eq(GlobalManager.count, 0);
do_check_false(GlobalManager.extensionMap.has(ID));
yield promiseShutdownManager();
});
// Writing the manifest direct to the profile should work
add_task(function*() {
writeWebManifestForExtension({
name: "Web Extension Name",
version: "1.0",
manifest_version: 2,
applications: {
gecko: {
id: ID
}
}
}, profileDir);
startupManager();
let addon = yield promiseAddonByID(ID);
do_check_neq(addon, null);
do_check_eq(addon.version, "1.0");
do_check_eq(addon.name, "Web Extension Name");
do_check_true(addon.isCompatible);
do_check_false(addon.appDisabled);
do_check_true(addon.isActive);
do_check_eq(addon.type, "extension");
do_check_eq(addon.signedState, mozinfo.addon_signing ? AddonManager.SIGNEDSTATE_MISSING : AddonManager.SIGNEDSTATE_NOT_REQUIRED);
let file = getFileForAddon(profileDir, ID);
do_check_true(file.exists());
addon.uninstall();
yield promiseRestartManager();
});
add_task(function* test_manifest_localization() {
const ID = "webextension3@tests.mozilla.org";
yield promiseInstallAllFiles([do_get_addon("webextension_3")], true);
let addon = yield promiseAddonByID(ID);
equal(addon.name, "Web Extension foo");
equal(addon.description, "Descripton bar of add-on");
Services.prefs.setCharPref(PREF_SELECTED_LOCALE, "fr-FR");
yield promiseRestartManager();
addon = yield promiseAddonByID(ID);
equal(addon.name, "Web Extension le foo");
equal(addon.description, "Descripton le bar of add-on");
Services.prefs.setCharPref(PREF_SELECTED_LOCALE, "de");
yield promiseRestartManager();
addon = yield promiseAddonByID(ID);
equal(addon.name, "Web Extension foo");
equal(addon.description, "Descripton bar of add-on");
});
// Missing ID should cause a failure
add_task(function*() {
writeWebManifestForExtension({
name: "Web Extension Name",
version: "1.0",
manifest_version: 2,
}, profileDir, ID);
yield promiseRestartManager();
let addon = yield promiseAddonByID(ID);
do_check_eq(addon, null);
let file = getFileForAddon(profileDir, ID);
do_check_false(file.exists());
yield promiseRestartManager();
});
// Missing version should cause a failure
add_task(function*() {
writeWebManifestForExtension({
name: "Web Extension Name",
manifest_version: 2,
applications: {
gecko: {
id: ID
}
}
}, profileDir);
yield promiseRestartManager();
let addon = yield promiseAddonByID(ID);
do_check_eq(addon, null);
let file = getFileForAddon(profileDir, ID);
do_check_false(file.exists());
yield promiseRestartManager();
});
// Incorrect manifest version should cause a failure
add_task(function*() {
writeWebManifestForExtension({
name: "Web Extension Name",
version: "1.0",
manifest_version: 1,
applications: {
gecko: {
id: ID
}
}
}, profileDir);
yield promiseRestartManager();
let addon = yield promiseAddonByID(ID);
do_check_eq(addon, null);
let file = getFileForAddon(profileDir, ID);
do_check_false(file.exists());
yield promiseRestartManager();
});
// install.rdf should be read before manifest.json
add_task(function*() {
yield Promise.all([
promiseInstallAllFiles([do_get_addon("webextension_2")], true)
]);
yield promiseRestartManager();
let installrdf_id = "first-webextension2@tests.mozilla.org";
let first_addon = yield promiseAddonByID(installrdf_id);
do_check_neq(first_addon, null);
do_check_false(first_addon.appDisabled);
do_check_true(first_addon.isActive);
let manifestjson_id= "last-webextension2@tests.mozilla.org";
let last_addon = yield promiseAddonByID(manifestjson_id);
do_check_eq(last_addon, null);
yield promiseRestartManager();
});