Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

const PREF_SIGNATURES_GENERAL = "xpinstall.signatures.required";
const PREF_SIGNATURES_LANGPACKS = "extensions.langpacks.signatures.required";
// Disable "xpc::IsInAutomation()", since it would override the behavior
// we're testing for.
Services.prefs.setBoolPref(
"security.turn_off_all_security_so_that_viruses_can_take_over_this_computer",
false
);
// Try to install the given XPI file, and assert that the install
// succeeds. Uninstalls before returning.
async function installShouldSucceed(file) {
let install = await promiseInstallFile(file);
Assert.equal(install.state, AddonManager.STATE_INSTALLED);
Assert.notEqual(install.addon, null);
await install.addon.uninstall();
}
// Try to install the given XPI file, assert that the install fails
// due to lack of signing.
async function installShouldFail(file) {
let install;
try {
install = await AddonManager.getInstallForFile(file);
} catch (err) {}
Assert.equal(install.state, AddonManager.STATE_DOWNLOAD_FAILED);
Assert.equal(install.error, AddonManager.ERROR_SIGNEDSTATE_REQUIRED);
Assert.equal(install.addon, null);
}
// Test that the preference controlling langpack signing works properly
// (and that the general preference for addon signing does not affect
// language packs).
add_task(useAMOStageCert(), async function () {
AddonTestUtils.useRealCertChecks = true;
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
await promiseStartupManager();
Services.prefs.setBoolPref(PREF_SIGNATURES_GENERAL, true);
Services.prefs.setBoolPref(PREF_SIGNATURES_LANGPACKS, true);
// The signed langpack should always install.
let signedXPI = do_get_file("data/signing_checks/langpack_signed.xpi");
await installShouldSucceed(signedXPI);
// With signatures required, unsigned langpack should not install.
let unsignedXPI = do_get_file("data/signing_checks/langpack_unsigned.xpi");
await installShouldFail(unsignedXPI);
// Even with the general xpi signing pref off, an unsigned langapck
// should not install.
Services.prefs.setBoolPref(PREF_SIGNATURES_GENERAL, false);
await installShouldFail(unsignedXPI);
// But with the langpack signing pref off, unsigned langpack should
// install only on non-release builds.
Services.prefs.setBoolPref(PREF_SIGNATURES_LANGPACKS, false);
if (AppConstants.MOZ_REQUIRE_SIGNING) {
await installShouldFail(unsignedXPI);
} else {
await installShouldSucceed(unsignedXPI);
}
await promiseShutdownManager();
});