Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
5 // This verifies that language packs can be used without restarts.
6 Components.utils.import("resource://gre/modules/Services.jsm");
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);
14 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
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);
27 var chrome = Components.classes["@mozilla.org/chrome/chrome-registry;1"]
28 .getService(Components.interfaces.nsIXULChromeRegistry);
30 function do_unregister_manifest() {
31 let path = getFileForAddon(profileDir, "langpack-x-testing@tests.mozilla.org");
32 Components.manager.removeBootstrappedManifestLocation(path);
33 }
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 }
45 function run_test() {
46 do_test_pending();
48 startupManager();
50 run_test_1();
51 }
53 // Tests that installing doesn't require a restart
54 function run_test_1() {
55 do_check_locale_not_registered("test-langpack");
57 prepare_test({ }, [
58 "onNewInstall"
59 ]);
61 AddonManager.getInstallForFile(do_get_addon("test_langpack"), function(install) {
62 ensure_test_completed();
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);
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 }
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);
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"));
109 let dir = do_get_addon_root_uri(profileDir, "langpack-x-testing@tests.mozilla.org");
111 AddonManager.getAddonsWithOperationsByTypes(null, function(list) {
112 do_check_eq(list.length, 0);
114 run_test_2();
115 });
116 });
117 });
118 }
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 });
130 do_check_eq(b1.operationsRequiringRestart &
131 AddonManager.OP_NEEDS_RESTART_DISABLE, 0);
132 b1.userDisabled = true;
133 ensure_test_completed();
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");
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);
150 do_execute_soon(run_test_3);
151 });
152 });
153 }
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");
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);
169 run_test_4();
170 });
171 }
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 });
183 do_check_eq(b1.operationsRequiringRestart &
184 AddonManager.OP_NEEDS_RESTART_ENABLE, 0);
185 b1.userDisabled = false;
186 ensure_test_completed();
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");
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);
203 do_execute_soon(run_test_5);
204 });
205 });
206 }
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");
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));
226 run_test_7();
227 });
228 }
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 });
240 do_check_eq(b1.operationsRequiringRestart &
241 AddonManager.OP_NEEDS_RESTART_UNINSTALL, 0);
242 b1.uninstall();
244 check_test_7();
245 });
246 }
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");
253 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org",
254 callback_soon(function(b1) {
255 do_check_eq(b1, null);
257 restartManager();
259 AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) {
260 do_check_eq(newb1, null);
262 do_execute_soon(run_test_8);
263 });
264 }));
265 }
267 // Tests that a locale detected in the profile starts working immediately
268 function run_test_8() {
269 shutdownManager();
271 manuallyInstall(do_get_addon("test_langpack"), profileDir, "langpack-x-testing@tests.mozilla.org");
273 startupManager(false);
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"));
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");
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 });
303 b2.uninstall();
304 ensure_test_completed();
305 do_execute_soon(run_test_9);
306 });
307 }));
308 }
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);
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"));
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");
337 do_test_finished();
338 }));
339 }