mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-08-10 13:29:05 +00:00
172 lines
6.5 KiB
JavaScript
172 lines
6.5 KiB
JavaScript
|
/* Any copyright is dedicated to the Public Domain.
|
||
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
||
|
*/
|
||
|
|
||
|
const PREF_EM_HOTFIX_ID = "extensions.hotfix.id";
|
||
|
const PREF_EM_HOTFIX_LASTVERSION = "extensions.hotfix.lastVersion";
|
||
|
const PREF_EM_HOTFIX_URL = "extensions.hotfix.url";
|
||
|
const PREF_EM_HOTFIX_CERTS = "extensions.hotfix.certs.";
|
||
|
const PREF_EM_CERT_CHECKATTRIBUTES = "extensions.hotfix.cert.checkAttributes";
|
||
|
|
||
|
const PREF_INSTALL_REQUIREBUILTINCERTS = "extensions.install.requireBuiltInCerts";
|
||
|
const PREF_UPDATE_REQUIREBUILTINCERTS = "extensions.update.requireBuiltInCerts";
|
||
|
|
||
|
const PREF_APP_UPDATE_ENABLED = "app.update.enabled";
|
||
|
const PREF_APP_UPDATE_URL = "app.update.url";
|
||
|
|
||
|
const HOTFIX_ID = "hotfix@tests.mozilla.org";
|
||
|
|
||
|
/*
|
||
|
* Register an addon install listener and return a promise that:
|
||
|
* resolves with the AddonInstall object if the install succeeds
|
||
|
* rejects with the AddonInstall if the install fails
|
||
|
*/
|
||
|
function promiseInstallListener() {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
let listener = {
|
||
|
onInstallEnded: ai => {
|
||
|
AddonManager.removeInstallListener(listener);
|
||
|
resolve(ai);
|
||
|
},
|
||
|
onDownloadCancelled: ai => {
|
||
|
AddonManager.removeInstallListener(listener);
|
||
|
reject(ai);
|
||
|
}
|
||
|
};
|
||
|
AddonManager.addInstallListener(listener);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function promiseSuccessfulInstall() {
|
||
|
return promiseInstallListener().then(
|
||
|
aInstall => {
|
||
|
ok(true, "Should have seen the install complete");
|
||
|
is(aInstall.addon.id, HOTFIX_ID, "Should have installed the right add-on");
|
||
|
aInstall.addon.uninstall();
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_LASTVERSION);
|
||
|
},
|
||
|
aInstall => {
|
||
|
ok(false, "Should not have seen the download cancelled");
|
||
|
is(aInstall.addon.id, HOTFIX_ID, "Should have seen the right add-on");
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function promiseFailedInstall() {
|
||
|
return promiseInstallListener().then(
|
||
|
aInstall => {
|
||
|
ok(false, "Should not have seen the install complete");
|
||
|
is(aInstall.addon.id, HOTFIX_ID, "Should have installed the right add-on");
|
||
|
aInstall.addon.uninstall();
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_LASTVERSION);
|
||
|
},
|
||
|
aInstall => {
|
||
|
ok(true, "Should have seen the download cancelled");
|
||
|
is(aInstall.addon.id, HOTFIX_ID, "Should have seen the right add-on");
|
||
|
});
|
||
|
}
|
||
|
|
||
|
add_task(function setup() {
|
||
|
var oldAusUrl = Services.prefs.getDefaultBranch(null).getCharPref(PREF_APP_UPDATE_URL);
|
||
|
Services.prefs.getDefaultBranch(null).setCharPref(PREF_APP_UPDATE_URL, TESTROOT + "ausdummy.xml");
|
||
|
Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, true);
|
||
|
Services.prefs.setBoolPref(PREF_INSTALL_REQUIREBUILTINCERTS, false);
|
||
|
Services.prefs.setBoolPref(PREF_UPDATE_REQUIREBUILTINCERTS, false);
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_ID, HOTFIX_ID);
|
||
|
var oldURL = Services.prefs.getCharPref(PREF_EM_HOTFIX_URL);
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_URL, TESTROOT + "signed_hotfix.rdf");
|
||
|
|
||
|
registerCleanupFunction(function() {
|
||
|
Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, false);
|
||
|
Services.prefs.getDefaultBranch(null).setCharPref(PREF_APP_UPDATE_URL, oldAusUrl);
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_ID);
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_URL, oldURL);
|
||
|
Services.prefs.clearUserPref(PREF_INSTALL_REQUIREBUILTINCERTS);
|
||
|
Services.prefs.clearUserPref(PREF_UPDATE_REQUIREBUILTINCERTS);
|
||
|
|
||
|
Services.prefs.clearUserPref(PREF_EM_CERT_CHECKATTRIBUTES);
|
||
|
var prefs = Services.prefs.getChildList(PREF_EM_HOTFIX_CERTS);
|
||
|
prefs.forEach(Services.prefs.clearUserPref);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
add_task(function* check_no_cert_checks() {
|
||
|
Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, false);
|
||
|
yield Promise.all([
|
||
|
promiseSuccessfulInstall(),
|
||
|
AddonManagerPrivate.backgroundUpdateCheck()
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
add_task(function* check_wrong_cert_fingerprint() {
|
||
|
Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true);
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint", "foo");
|
||
|
|
||
|
yield Promise.all([
|
||
|
promiseFailedInstall(),
|
||
|
AddonManagerPrivate.backgroundUpdateCheck()
|
||
|
]);
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint");
|
||
|
});
|
||
|
|
||
|
add_task(function* check_right_cert_fingerprint() {
|
||
|
Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true);
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint", "3E:B9:4E:07:12:FE:3C:01:41:46:13:46:FC:84:52:1A:8C:BE:1D:A2");
|
||
|
|
||
|
yield Promise.all([
|
||
|
promiseSuccessfulInstall(),
|
||
|
AddonManagerPrivate.backgroundUpdateCheck()
|
||
|
]);
|
||
|
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint");
|
||
|
});
|
||
|
|
||
|
add_task(function* check_multi_cert_fingerprint_1() {
|
||
|
Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true);
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint", "3E:B9:4E:07:12:FE:3C:01:41:46:13:46:FC:84:52:1A:8C:BE:1D:A2");
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint", "foo");
|
||
|
|
||
|
yield Promise.all([
|
||
|
promiseSuccessfulInstall(),
|
||
|
AddonManagerPrivate.backgroundUpdateCheck()
|
||
|
]);
|
||
|
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint");
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint");
|
||
|
});
|
||
|
|
||
|
add_task(function* check_multi_cert_fingerprint_2() {
|
||
|
Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true);
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint", "foo");
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint", "3E:B9:4E:07:12:FE:3C:01:41:46:13:46:FC:84:52:1A:8C:BE:1D:A2");
|
||
|
|
||
|
yield Promise.all([
|
||
|
promiseSuccessfulInstall(),
|
||
|
AddonManagerPrivate.backgroundUpdateCheck()
|
||
|
]);
|
||
|
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint");
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint");
|
||
|
});
|
||
|
|
||
|
add_task(function* check_no_cert_no_checks() {
|
||
|
Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, false);
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_URL, TESTROOT + "unsigned_hotfix.rdf");
|
||
|
|
||
|
yield Promise.all([
|
||
|
promiseSuccessfulInstall(),
|
||
|
AddonManagerPrivate.backgroundUpdateCheck()
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
add_task(function* check_no_cert_cert_fingerprint_check() {
|
||
|
Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true);
|
||
|
Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint", "3E:B9:4E:07:12:FE:3C:01:41:46:13:46:FC:84:52:1A:8C:BE:1D:A2");
|
||
|
|
||
|
yield Promise.all([
|
||
|
promiseFailedInstall(),
|
||
|
AddonManagerPrivate.backgroundUpdateCheck()
|
||
|
]);
|
||
|
|
||
|
Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint");
|
||
|
});
|