mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-06-03 23:19:50 +00:00
327 lines
8.1 KiB
JavaScript
327 lines
8.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
// This verifies that add-ons URIs can be mapped to add-on IDs
|
|
//
|
|
Components.utils.import("resource://gre/modules/Services.jsm");
|
|
|
|
// Enable loading extensions from the user scopes
|
|
Services.prefs.setIntPref("extensions.enabledScopes",
|
|
AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER);
|
|
|
|
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
|
|
|
|
const profileDir = gProfD.clone();
|
|
profileDir.append("extensions");
|
|
const userExtDir = gProfD.clone();
|
|
userExtDir.append("extensions2");
|
|
userExtDir.append(gAppInfo.ID);
|
|
registerDirectory("XREUSysExt", userExtDir.parent);
|
|
|
|
function TestProvider(result) {
|
|
this.result = result;
|
|
}
|
|
TestProvider.prototype = {
|
|
uri: Services.io.newURI("hellow://world", null, null),
|
|
id: "valid@id",
|
|
startup: function() {},
|
|
shutdown: function() {},
|
|
mapURIToAddonID: function(aURI) {
|
|
if (aURI.spec === this.uri.spec) {
|
|
return this.id;
|
|
}
|
|
throw Components.Exception("Not mapped", result);
|
|
}
|
|
};
|
|
|
|
function TestProviderNoMap() {}
|
|
TestProviderNoMap.prototype = {
|
|
startup: function() {},
|
|
shutdown: function() {}
|
|
};
|
|
|
|
function check_mapping(uri, id) {
|
|
do_check_eq(AddonManager.mapURIToAddonID(uri), id);
|
|
let svc = Components.classes["@mozilla.org/addons/integration;1"].
|
|
getService(Components.interfaces.amIAddonManager);
|
|
let val = {};
|
|
do_check_true(svc.mapURIToAddonID(uri, val));
|
|
do_check_eq(val.value, id);
|
|
}
|
|
|
|
function resetPrefs() {
|
|
Services.prefs.setIntPref("bootstraptest.active_version", -1);
|
|
}
|
|
|
|
function waitForPref(aPref, aCallback) {
|
|
function prefChanged() {
|
|
Services.prefs.removeObserver(aPref, prefChanged);
|
|
aCallback();
|
|
}
|
|
Services.prefs.addObserver(aPref, prefChanged, false);
|
|
}
|
|
|
|
function getActiveVersion() {
|
|
return Services.prefs.getIntPref("bootstraptest.active_version");
|
|
}
|
|
|
|
function run_test() {
|
|
do_test_pending();
|
|
|
|
resetPrefs();
|
|
|
|
run_test_early();
|
|
}
|
|
|
|
function run_test_early() {
|
|
startupManager();
|
|
|
|
installAllFiles([do_get_addon("test_chromemanifest_1")], function() {
|
|
restartManager();
|
|
AddonManager.getAddonByID("addon1@tests.mozilla.org", function(addon) {
|
|
let uri = addon.getResourceURI(".");
|
|
let id = addon.id;
|
|
check_mapping(uri, id);
|
|
|
|
shutdownManager();
|
|
|
|
// Force an early call, to check that mappings will get correctly
|
|
// initialized when the manager actually starts up.
|
|
// See bug 957089
|
|
|
|
// First force-initialize the XPIProvider.
|
|
let s = Components.utils.import(
|
|
"resource://gre/modules/addons/XPIProvider.jsm", {});
|
|
|
|
// Make the early API call.
|
|
do_check_null(s.XPIProvider.mapURIToAddonID(uri));
|
|
do_check_null(AddonManager.mapURIToAddonID(uri));
|
|
|
|
// Actually start up the manager.
|
|
startupManager(false);
|
|
|
|
// Check that the mapping is there now.
|
|
check_mapping(uri, id);
|
|
do_check_eq(s.XPIProvider.mapURIToAddonID(uri), id);
|
|
|
|
run_test_nomapping();
|
|
});
|
|
});
|
|
}
|
|
|
|
function run_test_nomapping() {
|
|
do_check_eq(AddonManager.mapURIToAddonID(TestProvider.prototype.uri), null);
|
|
try {
|
|
let svc = Components.classes["@mozilla.org/addons/integration;1"].
|
|
getService(Components.interfaces.amIAddonManager);
|
|
let val = {};
|
|
do_check_false(svc.mapURIToAddonID(TestProvider.prototype.uri, val));
|
|
}
|
|
catch (ex) {
|
|
do_throw(ex);
|
|
}
|
|
|
|
run_test_1();
|
|
}
|
|
|
|
|
|
// Tests that add-on URIs are mappable after an install
|
|
function run_test_1() {
|
|
prepare_test({ }, [
|
|
"onNewInstall"
|
|
]);
|
|
|
|
AddonManager.getInstallForFile(do_get_addon("test_bootstrap1_1"), function(install) {
|
|
ensure_test_completed();
|
|
|
|
let addon = install.addon;
|
|
prepare_test({
|
|
"bootstrap1@tests.mozilla.org": [
|
|
["onInstalling", false],
|
|
"onInstalled"
|
|
]
|
|
}, [
|
|
"onInstallStarted",
|
|
"onInstallEnded",
|
|
], function() {
|
|
let uri = addon.getResourceURI(".");
|
|
check_mapping(uri, addon.id);
|
|
|
|
waitForPref("bootstraptest.active_version", function() {
|
|
run_test_2(uri);
|
|
});
|
|
});
|
|
install.install();
|
|
});
|
|
}
|
|
|
|
// Tests that add-on URIs are still mappable, even after the add-on gets
|
|
// disabled in-session.
|
|
function run_test_2(uri) {
|
|
AddonManager.getAddonByID("bootstrap1@tests.mozilla.org", function(b1) {
|
|
prepare_test({
|
|
"bootstrap1@tests.mozilla.org": [
|
|
["onDisabling", false],
|
|
"onDisabled"
|
|
]
|
|
});
|
|
|
|
b1.userDisabled = true;
|
|
ensure_test_completed();
|
|
|
|
AddonManager.getAddonByID("bootstrap1@tests.mozilla.org", function(newb1) {
|
|
do_check_true(newb1.userDisabled);
|
|
check_mapping(uri, newb1.id);
|
|
|
|
do_execute_soon(() => run_test_3(uri));
|
|
});
|
|
});
|
|
}
|
|
|
|
// Tests that add-on URIs are mappable if the add-on was never started in a
|
|
// session
|
|
function run_test_3(uri) {
|
|
restartManager();
|
|
|
|
check_mapping(uri, "bootstrap1@tests.mozilla.org");
|
|
|
|
run_test_4();
|
|
}
|
|
|
|
// Tests that add-on URIs are mappable after a restart + reenable
|
|
function run_test_4() {
|
|
restartManager();
|
|
|
|
AddonManager.getAddonByID("bootstrap1@tests.mozilla.org", function(b1) {
|
|
prepare_test({
|
|
"bootstrap1@tests.mozilla.org": [
|
|
["onEnabling", false],
|
|
"onEnabled"
|
|
]
|
|
});
|
|
|
|
b1.userDisabled = false;
|
|
ensure_test_completed();
|
|
|
|
AddonManager.getAddonByID("bootstrap1@tests.mozilla.org", function(newb1) {
|
|
let uri = newb1.getResourceURI(".");
|
|
check_mapping(uri, newb1.id);
|
|
|
|
do_execute_soon(run_test_5);
|
|
});
|
|
});
|
|
}
|
|
|
|
// Tests that add-on URIs are mappable after a restart
|
|
function run_test_5() {
|
|
restartManager();
|
|
|
|
AddonManager.getAddonByID("bootstrap1@tests.mozilla.org", function(b1) {
|
|
let uri = b1.getResourceURI(".");
|
|
check_mapping(uri, b1.id);
|
|
|
|
do_execute_soon(run_test_6);
|
|
});
|
|
}
|
|
|
|
// Tests that add-on URIs are mappable after being uninstalled
|
|
function run_test_6() {
|
|
AddonManager.getAddonByID("bootstrap1@tests.mozilla.org", function(b1) {
|
|
prepare_test({
|
|
"bootstrap1@tests.mozilla.org": [
|
|
["onUninstalling", false],
|
|
"onUninstalled"
|
|
]
|
|
});
|
|
|
|
let uri = b1.getResourceURI(".");
|
|
b1.uninstall();
|
|
ensure_test_completed();
|
|
|
|
check_mapping(uri, b1.id);
|
|
|
|
restartManager();
|
|
do_execute_soon(run_test_7);
|
|
});
|
|
}
|
|
|
|
// Tests that add-on URIs are mappable for add-ons detected at startup
|
|
function run_test_7() {
|
|
shutdownManager();
|
|
|
|
manuallyInstall(do_get_addon("test_bootstrap1_1"), profileDir, "bootstrap1@tests.mozilla.org");
|
|
|
|
startupManager();
|
|
|
|
AddonManager.getAddonByID("bootstrap1@tests.mozilla.org", function(b1) {
|
|
let uri = b1.getResourceURI(".");
|
|
check_mapping(uri, b1.id);
|
|
|
|
do_execute_soon(run_test_invalidarg);
|
|
});
|
|
}
|
|
|
|
// Tests that the AddonManager will bail when mapURIToAddonID is called with an
|
|
// invalid argument
|
|
function run_test_invalidarg() {
|
|
restartManager();
|
|
|
|
let tests = [undefined,
|
|
null,
|
|
1,
|
|
"string",
|
|
"chrome://global/content/",
|
|
function() {}
|
|
];
|
|
for (var test of tests) {
|
|
try {
|
|
AddonManager.mapURIToAddonID(test);
|
|
throw new Error("Shouldn't be able to map the URI in question");
|
|
}
|
|
catch (ex if ex.result) {
|
|
do_check_eq(ex.result, Components.results.NS_ERROR_INVALID_ARG);
|
|
}
|
|
catch (ex) {
|
|
do_throw(ex);
|
|
}
|
|
}
|
|
|
|
run_test_provider();
|
|
}
|
|
|
|
// Tests that custom providers are correctly handled
|
|
function run_test_provider() {
|
|
restartManager();
|
|
|
|
const provider = new TestProvider(Components.results.NS_ERROR_NOT_AVAILABLE);
|
|
AddonManagerPrivate.registerProvider(provider);
|
|
|
|
check_mapping(provider.uri, provider.id);
|
|
|
|
let u2 = provider.uri.clone();
|
|
u2.path = "notmapped";
|
|
do_check_eq(AddonManager.mapURIToAddonID(u2), null);
|
|
|
|
AddonManagerPrivate.unregisterProvider(provider);
|
|
|
|
run_test_provider_nomap();
|
|
}
|
|
|
|
// Tests that custom providers are correctly handled, even not implementing
|
|
// mapURIToAddonID
|
|
function run_test_provider_nomap() {
|
|
restartManager();
|
|
|
|
const provider = new TestProviderNoMap();
|
|
AddonManagerPrivate.registerProvider(provider);
|
|
|
|
do_check_eq(AddonManager.mapURIToAddonID(TestProvider.prototype.uri), null);
|
|
|
|
AddonManagerPrivate.unregisterProvider(provider);
|
|
|
|
do_test_finished();
|
|
}
|
|
|
|
|