Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: toolkit/mozapps/extensions/test/xpcshell/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
*/
// Tests that extensions installed through the registry work as expected
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
// Enable loading extensions from the user and system scopes
Services.prefs.setIntPref(
"extensions.enabledScopes",
AddonManager.SCOPE_PROFILE +
AddonManager.SCOPE_USER +
AddonManager.SCOPE_SYSTEM
);
Services.prefs.setIntPref("extensions.sideloadScopes", AddonManager.SCOPE_ALL);
const ID1 = "addon1@tests.mozilla.org";
const ID2 = "addon2@tests.mozilla.org";
let xpi1, xpi2;
let registry;
add_task(async function setup() {
xpi1 = await createTempWebExtensionFile({
manifest: { browser_specific_settings: { gecko: { id: ID1 } } },
});
xpi2 = await createTempWebExtensionFile({
manifest: { browser_specific_settings: { gecko: { id: ID2 } } },
});
registry = new MockRegistry();
registerCleanupFunction(() => {
registry.shutdown();
});
});
// Tests whether basic registry install works
add_task(async function test_1() {
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID1,
xpi1.path
);
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID2,
xpi2.path
);
await promiseStartupManager();
let [a1, a2] = await AddonManager.getAddonsByIDs([ID1, ID2]);
notEqual(a1, null);
ok(a1.isActive);
ok(!hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
equal(a1.scope, AddonManager.SCOPE_SYSTEM);
notEqual(a2, null);
ok(a2.isActive);
ok(!hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
equal(a2.scope, AddonManager.SCOPE_USER);
});
// Tests whether uninstalling from the registry works
add_task(async function test_2() {
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID1,
null
);
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID2,
null
);
await promiseRestartManager();
let [a1, a2] = await AddonManager.getAddonsByIDs([ID1, ID2]);
equal(a1, null);
equal(a2, null);
});
// Checks that the ID in the registry must match that in the install manifest
add_task(async function test_3() {
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID1,
xpi2.path
);
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID2,
xpi1.path
);
await promiseRestartManager();
let [a1, a2] = await AddonManager.getAddonsByIDs([ID1, ID2]);
equal(a1, null);
equal(a2, null);
});
// Tests whether an extension's ID can change without its directory changing
add_task(async function test_4() {
// Restarting with bad items in the registry should not force an EM restart
await promiseRestartManager();
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID1,
null
);
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID2,
null
);
await promiseRestartManager();
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID1,
xpi1.path
);
await promiseShutdownManager();
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID1,
null
);
registry.setValue(
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
"SOFTWARE\\Mozilla\\XPCShell\\Extensions",
ID2,
xpi1.path
);
xpi2.copyTo(xpi1.parent, xpi1.leafName);
await promiseStartupManager();
let [a1, a2] = await AddonManager.getAddonsByIDs([ID1, ID2]);
equal(a1, null);
notEqual(a2, null);
});