|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 const PREF_EM_HOTFIX_ID = "extensions.hotfix.id"; |
|
6 const PREF_EM_HOTFIX_LASTVERSION = "extensions.hotfix.lastVersion"; |
|
7 const PREF_EM_HOTFIX_URL = "extensions.hotfix.url"; |
|
8 const PREF_EM_HOTFIX_CERTS = "extensions.hotfix.certs."; |
|
9 const PREF_EM_CERT_CHECKATTRIBUTES = "extensions.hotfix.cert.checkAttributes"; |
|
10 |
|
11 const PREF_INSTALL_REQUIREBUILTINCERTS = "extensions.install.requireBuiltInCerts"; |
|
12 const PREF_UPDATE_REQUIREBUILTINCERTS = "extensions.update.requireBuiltInCerts"; |
|
13 |
|
14 const PREF_APP_UPDATE_ENABLED = "app.update.enabled"; |
|
15 const PREF_APP_UPDATE_URL = "app.update.url"; |
|
16 |
|
17 const HOTFIX_ID = "hotfix@tests.mozilla.org"; |
|
18 |
|
19 var gNextTest; |
|
20 |
|
21 var SuccessfulInstallListener = { |
|
22 onDownloadCancelled: function(aInstall) { |
|
23 ok(false, "Should not have seen the download cancelled"); |
|
24 is(aInstall.addon.id, HOTFIX_ID, "Should have seen the right add-on"); |
|
25 |
|
26 AddonManager.removeInstallListener(this); |
|
27 gNextTest(); |
|
28 }, |
|
29 |
|
30 onInstallEnded: function(aInstall) { |
|
31 ok(true, "Should have seen the install complete"); |
|
32 is(aInstall.addon.id, HOTFIX_ID, "Should have installed the right add-on"); |
|
33 |
|
34 AddonManager.removeInstallListener(this); |
|
35 aInstall.addon.uninstall(); |
|
36 Services.prefs.clearUserPref(PREF_EM_HOTFIX_LASTVERSION); |
|
37 gNextTest(); |
|
38 } |
|
39 } |
|
40 |
|
41 var FailedInstallListener = { |
|
42 onDownloadCancelled: function(aInstall) { |
|
43 ok(true, "Should have seen the download cancelled"); |
|
44 is(aInstall.addon.id, HOTFIX_ID, "Should have seen the right add-on"); |
|
45 |
|
46 AddonManager.removeInstallListener(this); |
|
47 gNextTest(); |
|
48 }, |
|
49 |
|
50 onInstallEnded: function(aInstall) { |
|
51 ok(false, "Should not have seen the install complete"); |
|
52 is(aInstall.addon.id, HOTFIX_ID, "Should have installed the right add-on"); |
|
53 |
|
54 AddonManager.removeInstallListener(this); |
|
55 aInstall.addon.uninstall(); |
|
56 Services.prefs.clearUserPref(PREF_EM_HOTFIX_LASTVERSION); |
|
57 gNextTest(); |
|
58 } |
|
59 } |
|
60 |
|
61 function test() { |
|
62 waitForExplicitFinish(); |
|
63 |
|
64 var oldAusUrl = Services.prefs.getDefaultBranch(null).getCharPref(PREF_APP_UPDATE_URL); |
|
65 Services.prefs.getDefaultBranch(null).setCharPref(PREF_APP_UPDATE_URL, TESTROOT + "ausdummy.xml"); |
|
66 Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, true); |
|
67 Services.prefs.setBoolPref(PREF_INSTALL_REQUIREBUILTINCERTS, false); |
|
68 Services.prefs.setBoolPref(PREF_UPDATE_REQUIREBUILTINCERTS, false); |
|
69 Services.prefs.setCharPref(PREF_EM_HOTFIX_ID, HOTFIX_ID); |
|
70 var oldURL = Services.prefs.getCharPref(PREF_EM_HOTFIX_URL); |
|
71 Services.prefs.setCharPref(PREF_EM_HOTFIX_URL, TESTROOT + "signed_hotfix.rdf"); |
|
72 |
|
73 registerCleanupFunction(function() { |
|
74 Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, false); |
|
75 Services.prefs.getDefaultBranch(null).setCharPref(PREF_APP_UPDATE_URL, oldAusUrl); |
|
76 Services.prefs.clearUserPref(PREF_EM_HOTFIX_ID); |
|
77 Services.prefs.setCharPref(PREF_EM_HOTFIX_URL, oldURL); |
|
78 Services.prefs.clearUserPref(PREF_INSTALL_REQUIREBUILTINCERTS); |
|
79 Services.prefs.clearUserPref(PREF_UPDATE_REQUIREBUILTINCERTS); |
|
80 |
|
81 Services.prefs.clearUserPref(PREF_EM_CERT_CHECKATTRIBUTES); |
|
82 var prefs = Services.prefs.getChildList(PREF_EM_HOTFIX_CERTS); |
|
83 prefs.forEach(Services.prefs.clearUserPref); |
|
84 }); |
|
85 |
|
86 run_next_test(); |
|
87 } |
|
88 |
|
89 function end_test() { |
|
90 finish(); |
|
91 } |
|
92 |
|
93 add_test(function check_no_cert_checks() { |
|
94 Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, false); |
|
95 AddonManager.addInstallListener(SuccessfulInstallListener); |
|
96 |
|
97 gNextTest = run_next_test; |
|
98 |
|
99 AddonManagerPrivate.backgroundUpdateCheck(); |
|
100 }); |
|
101 |
|
102 add_test(function check_wrong_cert_fingerprint() { |
|
103 Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); |
|
104 Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint", "foo"); |
|
105 |
|
106 AddonManager.addInstallListener(FailedInstallListener); |
|
107 |
|
108 gNextTest = function() { |
|
109 Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); |
|
110 |
|
111 run_next_test(); |
|
112 }; |
|
113 |
|
114 AddonManagerPrivate.backgroundUpdateCheck(); |
|
115 }); |
|
116 |
|
117 add_test(function check_right_cert_fingerprint() { |
|
118 Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); |
|
119 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"); |
|
120 |
|
121 AddonManager.addInstallListener(SuccessfulInstallListener); |
|
122 |
|
123 gNextTest = function() { |
|
124 Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); |
|
125 |
|
126 run_next_test(); |
|
127 }; |
|
128 |
|
129 AddonManagerPrivate.backgroundUpdateCheck(); |
|
130 }); |
|
131 |
|
132 add_test(function check_multi_cert_fingerprint_1() { |
|
133 Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); |
|
134 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"); |
|
135 Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint", "foo"); |
|
136 |
|
137 AddonManager.addInstallListener(SuccessfulInstallListener); |
|
138 |
|
139 gNextTest = function() { |
|
140 Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); |
|
141 Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint"); |
|
142 |
|
143 run_next_test(); |
|
144 }; |
|
145 |
|
146 AddonManagerPrivate.backgroundUpdateCheck(); |
|
147 }); |
|
148 |
|
149 add_test(function check_multi_cert_fingerprint_2() { |
|
150 Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); |
|
151 Services.prefs.setCharPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint", "foo"); |
|
152 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"); |
|
153 |
|
154 AddonManager.addInstallListener(SuccessfulInstallListener); |
|
155 |
|
156 gNextTest = function() { |
|
157 Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); |
|
158 Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "2.sha1Fingerprint"); |
|
159 |
|
160 run_next_test(); |
|
161 }; |
|
162 |
|
163 AddonManagerPrivate.backgroundUpdateCheck(); |
|
164 }); |
|
165 |
|
166 add_test(function check_no_cert_no_checks() { |
|
167 Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, false); |
|
168 Services.prefs.setCharPref(PREF_EM_HOTFIX_URL, TESTROOT + "unsigned_hotfix.rdf"); |
|
169 |
|
170 AddonManager.addInstallListener(SuccessfulInstallListener); |
|
171 |
|
172 gNextTest = run_next_test; |
|
173 |
|
174 AddonManagerPrivate.backgroundUpdateCheck(); |
|
175 }); |
|
176 |
|
177 add_test(function check_no_cert_cert_fingerprint_check() { |
|
178 Services.prefs.setBoolPref(PREF_EM_CERT_CHECKATTRIBUTES, true); |
|
179 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"); |
|
180 |
|
181 AddonManager.addInstallListener(FailedInstallListener); |
|
182 |
|
183 gNextTest = function() { |
|
184 Services.prefs.clearUserPref(PREF_EM_HOTFIX_CERTS + "1.sha1Fingerprint"); |
|
185 |
|
186 run_next_test(); |
|
187 }; |
|
188 |
|
189 AddonManagerPrivate.backgroundUpdateCheck(); |
|
190 }); |