|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 // This verifies that language packs can be used without restarts. |
|
6 Components.utils.import("resource://gre/modules/Services.jsm"); |
|
7 |
|
8 // Enable loading extensions from the user scopes |
|
9 Services.prefs.setIntPref("extensions.enabledScopes", |
|
10 AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER); |
|
11 // Enable installing distribution add-ons |
|
12 Services.prefs.setBoolPref("extensions.installDistroAddons", true); |
|
13 |
|
14 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); |
|
15 |
|
16 const profileDir = gProfD.clone(); |
|
17 profileDir.append("extensions"); |
|
18 const userExtDir = gProfD.clone(); |
|
19 userExtDir.append("extensions2"); |
|
20 userExtDir.append(gAppInfo.ID); |
|
21 registerDirectory("XREUSysExt", userExtDir.parent); |
|
22 const distroDir = gProfD.clone(); |
|
23 distroDir.append("distribution"); |
|
24 distroDir.append("extensions"); |
|
25 registerDirectory("XREAppDist", distroDir.parent); |
|
26 |
|
27 var chrome = Components.classes["@mozilla.org/chrome/chrome-registry;1"] |
|
28 .getService(Components.interfaces.nsIXULChromeRegistry); |
|
29 |
|
30 function do_unregister_manifest() { |
|
31 let path = getFileForAddon(profileDir, "langpack-x-testing@tests.mozilla.org"); |
|
32 Components.manager.removeBootstrappedManifestLocation(path); |
|
33 } |
|
34 |
|
35 function do_check_locale_not_registered(provider) { |
|
36 let didThrow = false; |
|
37 try { |
|
38 chrome.getSelectedLocale(provider); |
|
39 } catch (e) { |
|
40 didThrow = true; |
|
41 } |
|
42 do_check_true(didThrow); |
|
43 } |
|
44 |
|
45 function run_test() { |
|
46 do_test_pending(); |
|
47 |
|
48 startupManager(); |
|
49 |
|
50 run_test_1(); |
|
51 } |
|
52 |
|
53 // Tests that installing doesn't require a restart |
|
54 function run_test_1() { |
|
55 do_check_locale_not_registered("test-langpack"); |
|
56 |
|
57 prepare_test({ }, [ |
|
58 "onNewInstall" |
|
59 ]); |
|
60 |
|
61 AddonManager.getInstallForFile(do_get_addon("test_langpack"), function(install) { |
|
62 ensure_test_completed(); |
|
63 |
|
64 do_check_neq(install, null); |
|
65 do_check_eq(install.type, "locale"); |
|
66 do_check_eq(install.version, "1.0"); |
|
67 do_check_eq(install.name, "Language Pack x-testing"); |
|
68 do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); |
|
69 do_check_true(install.addon.hasResource("install.rdf")); |
|
70 do_check_false(install.addon.hasResource("bootstrap.js")); |
|
71 do_check_eq(install.addon.operationsRequiringRestart & |
|
72 AddonManager.OP_NEEDS_RESTART_INSTALL, 0); |
|
73 |
|
74 let addon = install.addon; |
|
75 prepare_test({ |
|
76 "langpack-x-testing@tests.mozilla.org": [ |
|
77 ["onInstalling", false], |
|
78 "onInstalled" |
|
79 ] |
|
80 }, [ |
|
81 "onInstallStarted", |
|
82 "onInstallEnded", |
|
83 ], function() { |
|
84 do_check_true(addon.hasResource("install.rdf")); |
|
85 // spin to let the startup complete |
|
86 do_execute_soon(check_test_1); |
|
87 }); |
|
88 install.install(); |
|
89 }); |
|
90 } |
|
91 |
|
92 function check_test_1() { |
|
93 AddonManager.getAllInstalls(function(installs) { |
|
94 // There should be no active installs now since the install completed and |
|
95 // doesn't require a restart. |
|
96 do_check_eq(installs.length, 0); |
|
97 |
|
98 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
|
99 do_check_neq(b1, null); |
|
100 do_check_eq(b1.version, "1.0"); |
|
101 do_check_false(b1.appDisabled); |
|
102 do_check_false(b1.userDisabled); |
|
103 do_check_true(b1.isActive); |
|
104 // check chrome reg that language pack is registered |
|
105 do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
|
106 do_check_true(b1.hasResource("install.rdf")); |
|
107 do_check_false(b1.hasResource("bootstrap.js")); |
|
108 |
|
109 let dir = do_get_addon_root_uri(profileDir, "langpack-x-testing@tests.mozilla.org"); |
|
110 |
|
111 AddonManager.getAddonsWithOperationsByTypes(null, function(list) { |
|
112 do_check_eq(list.length, 0); |
|
113 |
|
114 run_test_2(); |
|
115 }); |
|
116 }); |
|
117 }); |
|
118 } |
|
119 |
|
120 // Tests that disabling doesn't require a restart |
|
121 function run_test_2() { |
|
122 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
|
123 prepare_test({ |
|
124 "langpack-x-testing@tests.mozilla.org": [ |
|
125 ["onDisabling", false], |
|
126 "onDisabled" |
|
127 ] |
|
128 }); |
|
129 |
|
130 do_check_eq(b1.operationsRequiringRestart & |
|
131 AddonManager.OP_NEEDS_RESTART_DISABLE, 0); |
|
132 b1.userDisabled = true; |
|
133 ensure_test_completed(); |
|
134 |
|
135 do_check_neq(b1, null); |
|
136 do_check_eq(b1.version, "1.0"); |
|
137 do_check_false(b1.appDisabled); |
|
138 do_check_true(b1.userDisabled); |
|
139 do_check_false(b1.isActive); |
|
140 // check chrome reg that language pack is not registered |
|
141 do_check_locale_not_registered("test-langpack"); |
|
142 |
|
143 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { |
|
144 do_check_neq(newb1, null); |
|
145 do_check_eq(newb1.version, "1.0"); |
|
146 do_check_false(newb1.appDisabled); |
|
147 do_check_true(newb1.userDisabled); |
|
148 do_check_false(newb1.isActive); |
|
149 |
|
150 do_execute_soon(run_test_3); |
|
151 }); |
|
152 }); |
|
153 } |
|
154 |
|
155 // Test that restarting doesn't accidentally re-enable |
|
156 function run_test_3() { |
|
157 shutdownManager(); |
|
158 startupManager(false); |
|
159 // check chrome reg that language pack is not registered |
|
160 do_check_locale_not_registered("test-langpack"); |
|
161 |
|
162 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
|
163 do_check_neq(b1, null); |
|
164 do_check_eq(b1.version, "1.0"); |
|
165 do_check_false(b1.appDisabled); |
|
166 do_check_true(b1.userDisabled); |
|
167 do_check_false(b1.isActive); |
|
168 |
|
169 run_test_4(); |
|
170 }); |
|
171 } |
|
172 |
|
173 // Tests that enabling doesn't require a restart |
|
174 function run_test_4() { |
|
175 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
|
176 prepare_test({ |
|
177 "langpack-x-testing@tests.mozilla.org": [ |
|
178 ["onEnabling", false], |
|
179 "onEnabled" |
|
180 ] |
|
181 }); |
|
182 |
|
183 do_check_eq(b1.operationsRequiringRestart & |
|
184 AddonManager.OP_NEEDS_RESTART_ENABLE, 0); |
|
185 b1.userDisabled = false; |
|
186 ensure_test_completed(); |
|
187 |
|
188 do_check_neq(b1, null); |
|
189 do_check_eq(b1.version, "1.0"); |
|
190 do_check_false(b1.appDisabled); |
|
191 do_check_false(b1.userDisabled); |
|
192 do_check_true(b1.isActive); |
|
193 // check chrome reg that language pack is registered |
|
194 do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
|
195 |
|
196 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { |
|
197 do_check_neq(newb1, null); |
|
198 do_check_eq(newb1.version, "1.0"); |
|
199 do_check_false(newb1.appDisabled); |
|
200 do_check_false(newb1.userDisabled); |
|
201 do_check_true(newb1.isActive); |
|
202 |
|
203 do_execute_soon(run_test_5); |
|
204 }); |
|
205 }); |
|
206 } |
|
207 |
|
208 // Tests that a restart shuts down and restarts the add-on |
|
209 function run_test_5() { |
|
210 shutdownManager(); |
|
211 do_unregister_manifest(); |
|
212 // check chrome reg that language pack is not registered |
|
213 do_check_locale_not_registered("test-langpack"); |
|
214 startupManager(false); |
|
215 // check chrome reg that language pack is registered |
|
216 do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
|
217 |
|
218 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
|
219 do_check_neq(b1, null); |
|
220 do_check_eq(b1.version, "1.0"); |
|
221 do_check_false(b1.appDisabled); |
|
222 do_check_false(b1.userDisabled); |
|
223 do_check_true(b1.isActive); |
|
224 do_check_false(isExtensionInAddonsList(profileDir, b1.id)); |
|
225 |
|
226 run_test_7(); |
|
227 }); |
|
228 } |
|
229 |
|
230 // Tests that uninstalling doesn't require a restart |
|
231 function run_test_7() { |
|
232 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
|
233 prepare_test({ |
|
234 "langpack-x-testing@tests.mozilla.org": [ |
|
235 ["onUninstalling", false], |
|
236 "onUninstalled" |
|
237 ] |
|
238 }); |
|
239 |
|
240 do_check_eq(b1.operationsRequiringRestart & |
|
241 AddonManager.OP_NEEDS_RESTART_UNINSTALL, 0); |
|
242 b1.uninstall(); |
|
243 |
|
244 check_test_7(); |
|
245 }); |
|
246 } |
|
247 |
|
248 function check_test_7() { |
|
249 ensure_test_completed(); |
|
250 // check chrome reg that language pack is not registered |
|
251 do_check_locale_not_registered("test-langpack"); |
|
252 |
|
253 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", |
|
254 callback_soon(function(b1) { |
|
255 do_check_eq(b1, null); |
|
256 |
|
257 restartManager(); |
|
258 |
|
259 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { |
|
260 do_check_eq(newb1, null); |
|
261 |
|
262 do_execute_soon(run_test_8); |
|
263 }); |
|
264 })); |
|
265 } |
|
266 |
|
267 // Tests that a locale detected in the profile starts working immediately |
|
268 function run_test_8() { |
|
269 shutdownManager(); |
|
270 |
|
271 manuallyInstall(do_get_addon("test_langpack"), profileDir, "langpack-x-testing@tests.mozilla.org"); |
|
272 |
|
273 startupManager(false); |
|
274 |
|
275 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", |
|
276 callback_soon(function(b1) { |
|
277 do_check_neq(b1, null); |
|
278 do_check_eq(b1.version, "1.0"); |
|
279 do_check_false(b1.appDisabled); |
|
280 do_check_false(b1.userDisabled); |
|
281 do_check_true(b1.isActive); |
|
282 // check chrome reg that language pack is registered |
|
283 do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
|
284 do_check_true(b1.hasResource("install.rdf")); |
|
285 do_check_false(b1.hasResource("bootstrap.js")); |
|
286 |
|
287 shutdownManager(); |
|
288 do_unregister_manifest(); |
|
289 // check chrome reg that language pack is not registered |
|
290 do_check_locale_not_registered("test-langpack"); |
|
291 startupManager(false); |
|
292 // check chrome reg that language pack is registered |
|
293 do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
|
294 |
|
295 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b2) { |
|
296 prepare_test({ |
|
297 "langpack-x-testing@tests.mozilla.org": [ |
|
298 ["onUninstalling", false], |
|
299 "onUninstalled" |
|
300 ] |
|
301 }); |
|
302 |
|
303 b2.uninstall(); |
|
304 ensure_test_completed(); |
|
305 do_execute_soon(run_test_9); |
|
306 }); |
|
307 })); |
|
308 } |
|
309 |
|
310 // Tests that a locale from distribution/extensions gets installed and starts |
|
311 // working immediately |
|
312 function run_test_9() { |
|
313 shutdownManager(); |
|
314 manuallyInstall(do_get_addon("test_langpack"), distroDir, "langpack-x-testing@tests.mozilla.org"); |
|
315 gAppInfo.version = "2.0"; |
|
316 startupManager(true); |
|
317 |
|
318 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", callback_soon(function(b1) { |
|
319 do_check_neq(b1, null); |
|
320 do_check_eq(b1.version, "1.0"); |
|
321 do_check_false(b1.appDisabled); |
|
322 do_check_false(b1.userDisabled); |
|
323 do_check_true(b1.isActive); |
|
324 // check chrome reg that language pack is registered |
|
325 do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
|
326 do_check_true(b1.hasResource("install.rdf")); |
|
327 do_check_false(b1.hasResource("bootstrap.js")); |
|
328 |
|
329 shutdownManager(); |
|
330 do_unregister_manifest(); |
|
331 // check chrome reg that language pack is not registered |
|
332 do_check_locale_not_registered("test-langpack"); |
|
333 startupManager(false); |
|
334 // check chrome reg that language pack is registered |
|
335 do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
|
336 |
|
337 do_test_finished(); |
|
338 })); |
|
339 } |