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(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(); });