michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: const PREF_EM_HOTFIX_ID = "extensions.hotfix.id"; michael@0: const PREF_EM_HOTFIX_LASTVERSION = "extensions.hotfix.lastVersion"; michael@0: const PREF_EM_HOTFIX_URL = "extensions.hotfix.url"; michael@0: const PREF_EM_HOTFIX_CERTS = "extensions.hotfix.certs."; michael@0: const PREF_EM_CERT_CHECKATTRIBUTES = "extensions.hotfix.cert.checkAttributes"; michael@0: michael@0: const PREF_INSTALL_REQUIREBUILTINCERTS = "extensions.install.requireBuiltInCerts"; michael@0: const PREF_UPDATE_REQUIREBUILTINCERTS = "extensions.update.requireBuiltInCerts"; michael@0: michael@0: const PREF_APP_UPDATE_ENABLED = "app.update.enabled"; michael@0: const PREF_APP_UPDATE_URL = "app.update.url"; michael@0: michael@0: const HOTFIX_ID = "hotfix@tests.mozilla.org"; michael@0: michael@0: var gNextTest; michael@0: michael@0: var SuccessfulInstallListener = { michael@0: onDownloadCancelled: function(aInstall) { michael@0: ok(false, "Should not have seen the download cancelled"); michael@0: is(aInstall.addon.id, HOTFIX_ID, "Should have seen the right add-on"); michael@0: michael@0: AddonManager.removeInstallListener(this); michael@0: gNextTest(); michael@0: }, michael@0: michael@0: onInstallEnded: function(aInstall) { michael@0: ok(true, "Should have seen the install complete"); michael@0: is(aInstall.addon.id, HOTFIX_ID, "Should have installed the right add-on"); michael@0: michael@0: AddonManager.removeInstallListener(this); michael@0: aInstall.addon.uninstall(); michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_LASTVERSION); michael@0: gNextTest(); michael@0: } michael@0: } michael@0: michael@0: var FailedInstallListener = { michael@0: onDownloadCancelled: function(aInstall) { michael@0: ok(true, "Should have seen the download cancelled"); michael@0: is(aInstall.addon.id, HOTFIX_ID, "Should have seen the right add-on"); michael@0: michael@0: AddonManager.removeInstallListener(this); michael@0: gNextTest(); michael@0: }, michael@0: michael@0: onInstallEnded: function(aInstall) { michael@0: ok(false, "Should not have seen the install complete"); michael@0: is(aInstall.addon.id, HOTFIX_ID, "Should have installed the right add-on"); michael@0: michael@0: AddonManager.removeInstallListener(this); michael@0: aInstall.addon.uninstall(); michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_LASTVERSION); michael@0: gNextTest(); michael@0: } michael@0: } michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: var oldAusUrl = Services.prefs.getDefaultBranch(null).getCharPref(PREF_APP_UPDATE_URL); michael@0: Services.prefs.getDefaultBranch(null).setCharPref(PREF_APP_UPDATE_URL, TESTROOT + "ausdummy.xml"); michael@0: Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, true); michael@0: Services.prefs.setBoolPref(PREF_INSTALL_REQUIREBUILTINCERTS, false); michael@0: Services.prefs.setBoolPref(PREF_UPDATE_REQUIREBUILTINCERTS, false); michael@0: Services.prefs.setCharPref(PREF_EM_HOTFIX_ID, HOTFIX_ID); michael@0: var oldURL = Services.prefs.getCharPref(PREF_EM_HOTFIX_URL); michael@0: Services.prefs.setCharPref(PREF_EM_HOTFIX_URL, TESTROOT + "signed_hotfix.rdf"); michael@0: michael@0: registerCleanupFunction(function() { michael@0: Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, false); michael@0: Services.prefs.getDefaultBranch(null).setCharPref(PREF_APP_UPDATE_URL, oldAusUrl); michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_ID); michael@0: Services.prefs.setCharPref(PREF_EM_HOTFIX_URL, oldURL); michael@0: Services.prefs.clearUserPref(PREF_INSTALL_REQUIREBUILTINCERTS); michael@0: Services.prefs.clearUserPref(PREF_UPDATE_REQUIREBUILTINCERTS); michael@0: michael@0: Services.prefs.clearUserPref(PREF_EM_CERT_CHECKATTRIBUTES); michael@0: var prefs = Services.prefs.getChildList(PREF_EM_HOTFIX_CERTS); michael@0: prefs.forEach(Services.prefs.clearUserPref); michael@0: }); michael@0: michael@0: run_next_test(); michael@0: } michael@0: michael@0: function end_test() { michael@0: finish(); michael@0: } michael@0: michael@0: add_test(function check_no_cert_checks() { michael@0: Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, false); michael@0: AddonManager.addInstallListener(SuccessfulInstallListener); michael@0: michael@0: gNextTest = run_next_test; michael@0: michael@0: AddonManagerPrivate.backgroundUpdateCheck(); michael@0: }); michael@0: michael@0: add_test(function check_wrong_cert_fingerprint() { michael@0: Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); michael@0: Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint", "foo"); michael@0: michael@0: AddonManager.addInstallListener(FailedInstallListener); michael@0: michael@0: gNextTest = function() { michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); michael@0: michael@0: run_next_test(); michael@0: }; michael@0: michael@0: AddonManagerPrivate.backgroundUpdateCheck(); michael@0: }); michael@0: michael@0: add_test(function check_right_cert_fingerprint() { michael@0: Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); michael@0: 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"); michael@0: michael@0: AddonManager.addInstallListener(SuccessfulInstallListener); michael@0: michael@0: gNextTest = function() { michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); michael@0: michael@0: run_next_test(); michael@0: }; michael@0: michael@0: AddonManagerPrivate.backgroundUpdateCheck(); michael@0: }); michael@0: michael@0: add_test(function check_multi_cert_fingerprint_1() { michael@0: Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); michael@0: 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"); michael@0: Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint", "foo"); michael@0: michael@0: AddonManager.addInstallListener(SuccessfulInstallListener); michael@0: michael@0: gNextTest = function() { michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint"); michael@0: michael@0: run_next_test(); michael@0: }; michael@0: michael@0: AddonManagerPrivate.backgroundUpdateCheck(); michael@0: }); michael@0: michael@0: add_test(function check_multi_cert_fingerprint_2() { michael@0: Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); michael@0: Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint", "foo"); michael@0: 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"); michael@0: michael@0: AddonManager.addInstallListener(SuccessfulInstallListener); michael@0: michael@0: gNextTest = function() { michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint"); michael@0: michael@0: run_next_test(); michael@0: }; michael@0: michael@0: AddonManagerPrivate.backgroundUpdateCheck(); michael@0: }); michael@0: michael@0: add_test(function check_no_cert_no_checks() { michael@0: Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, false); michael@0: Services.prefs.setCharPref(PREF_EM_HOTFIX_URL, TESTROOT + "unsigned_hotfix.rdf"); michael@0: michael@0: AddonManager.addInstallListener(SuccessfulInstallListener); michael@0: michael@0: gNextTest = run_next_test; michael@0: michael@0: AddonManagerPrivate.backgroundUpdateCheck(); michael@0: }); michael@0: michael@0: add_test(function check_no_cert_cert_fingerprint_check() { michael@0: Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); michael@0: 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"); michael@0: michael@0: AddonManager.addInstallListener(FailedInstallListener); michael@0: michael@0: gNextTest = function() { michael@0: Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); michael@0: michael@0: run_next_test(); michael@0: }; michael@0: michael@0: AddonManagerPrivate.backgroundUpdateCheck(); michael@0: });