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 startup detection of added/removed/changed items and install
6 // location priorities
8 // Enable loading extensions from the user and system scopes
9 Services.prefs.setIntPref("extensions.enabledScopes",
10 AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER +
11 AddonManager.SCOPE_SYSTEM);
13 var addon1 = {
14 id: "addon1@tests.mozilla.org",
15 version: "1.0",
16 name: "Test 1",
17 targetApplications: [{
18 id: "xpcshell@tests.mozilla.org",
19 minVersion: "1",
20 maxVersion: "1"
21 }, { // Repeated target application entries should be ignored
22 id: "xpcshell@tests.mozilla.org",
23 minVersion: "2",
24 maxVersion: "2"
25 }]
26 };
28 var addon2 = {
29 id: "addon2@tests.mozilla.org",
30 version: "2.0",
31 name: "Test 2",
32 targetApplications: [{ // Bad target application entries should be ignored
33 minVersion: "3",
34 maxVersion: "4"
35 }, {
36 id: "xpcshell@tests.mozilla.org",
37 minVersion: "1",
38 maxVersion: "2"
39 }]
40 };
42 var addon3 = {
43 id: "addon3@tests.mozilla.org",
44 version: "3.0",
45 name: "Test 3",
46 targetApplications: [{
47 id: "toolkit@mozilla.org",
48 minVersion: "1.9.2",
49 maxVersion: "1.9.2.*"
50 }]
51 };
53 // Should be ignored because it has no ID
54 var addon4 = {
55 version: "4.0",
56 name: "Test 4",
57 targetApplications: [{
58 id: "xpcshell@tests.mozilla.org",
59 minVersion: "1",
60 maxVersion: "1"
61 }]
62 };
64 // Should be ignored because it has no version
65 var addon5 = {
66 id: "addon5@tests.mozilla.org",
67 name: "Test 5",
68 targetApplications: [{
69 id: "xpcshell@tests.mozilla.org",
70 minVersion: "1",
71 maxVersion: "1"
72 }]
73 };
75 // Should be ignored because it has an invalid type
76 var addon6 = {
77 id: "addon6@tests.mozilla.org",
78 version: "3.0",
79 name: "Test 6",
80 type: 5,
81 targetApplications: [{
82 id: "toolkit@mozilla.org",
83 minVersion: "1.9.2",
84 maxVersion: "1.9.2.*"
85 }]
86 };
88 // Should be ignored because it has an invalid type
89 var addon7 = {
90 id: "addon7@tests.mozilla.org",
91 version: "3.0",
92 name: "Test 3",
93 type: "extension",
94 targetApplications: [{
95 id: "toolkit@mozilla.org",
96 minVersion: "1.9.2",
97 maxVersion: "1.9.2.*"
98 }]
99 };
101 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
103 const globalDir = gProfD.clone();
104 globalDir.append("extensions2");
105 globalDir.append(gAppInfo.ID);
106 registerDirectory("XRESysSExtPD", globalDir.parent);
107 const userDir = gProfD.clone();
108 userDir.append("extensions3");
109 userDir.append(gAppInfo.ID);
110 registerDirectory("XREUSysExt", userDir.parent);
111 const profileDir = gProfD.clone();
112 profileDir.append("extensions");
114 var gCachePurged = false;
116 // Set up the profile
117 function run_test() {
118 do_test_pending("test_startup main");
120 let obs = AM_Cc["@mozilla.org/observer-service;1"].
121 getService(AM_Ci.nsIObserverService);
122 obs.addObserver({
123 observe: function(aSubject, aTopic, aData) {
124 gCachePurged = true;
125 }
126 }, "startupcache-invalidate", false);
128 startupManager();
129 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
130 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
131 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
132 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
133 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
135 do_check_false(gExtensionsJSON.exists());
137 do_check_false(gExtensionsINI.exists());
139 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
140 "addon2@tests.mozilla.org",
141 "addon3@tests.mozilla.org",
142 "addon4@tests.mozilla.org",
143 "addon5@tests.mozilla.org",
144 "addon6@tests.mozilla.org",
145 "addon7@tests.mozilla.org"],
146 function([a1, a2, a3, a4, a5, a6, a7]) {
148 do_check_eq(a1, null);
149 do_check_not_in_crash_annotation(addon1.id, addon1.version);
150 do_check_eq(a2, null);
151 do_check_not_in_crash_annotation(addon2.id, addon2.version);
152 do_check_eq(a3, null);
153 do_check_not_in_crash_annotation(addon3.id, addon3.version);
154 do_check_eq(a4, null);
155 do_check_eq(a5, null);
157 do_execute_soon(run_test_1);
158 });
159 }
161 function end_test() {
162 do_test_finished("test_startup main");
163 }
165 // Try to install all the items into the profile
166 function run_test_1() {
167 writeInstallRDFForExtension(addon1, profileDir);
168 var dest = writeInstallRDFForExtension(addon2, profileDir);
169 // Attempt to make this look like it was added some time in the past so
170 // the change in run_test_2 makes the last modified time change.
171 setExtensionModifiedTime(dest, dest.lastModifiedTime - 5000);
173 writeInstallRDFForExtension(addon3, profileDir);
174 writeInstallRDFForExtension(addon4, profileDir);
175 writeInstallRDFForExtension(addon5, profileDir);
176 writeInstallRDFForExtension(addon6, profileDir);
177 writeInstallRDFForExtension(addon7, profileDir);
179 gCachePurged = false;
180 restartManager();
181 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon1@tests.mozilla.org",
182 "addon2@tests.mozilla.org",
183 "addon3@tests.mozilla.org"]);
184 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
185 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
186 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
187 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
188 do_check_true(gCachePurged);
190 do_print("Checking for " + gExtensionsINI.path);
191 do_check_true(gExtensionsINI.exists());
193 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
194 "addon2@tests.mozilla.org",
195 "addon3@tests.mozilla.org",
196 "addon4@tests.mozilla.org",
197 "addon5@tests.mozilla.org",
198 "addon6@tests.mozilla.org",
199 "addon7@tests.mozilla.org"],
200 function([a1, a2, a3, a4, a5, a6, a7]) {
202 do_check_neq(a1, null);
203 do_check_eq(a1.id, "addon1@tests.mozilla.org");
204 do_check_neq(a1.syncGUID, null);
205 do_check_true(a1.syncGUID.length >= 9);
206 do_check_eq(a1.version, "1.0");
207 do_check_eq(a1.name, "Test 1");
208 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
209 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
210 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
211 do_check_in_crash_annotation(addon1.id, addon1.version);
212 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
213 do_check_eq(a1.sourceURI, null);
214 do_check_true(a1.foreignInstall);
216 do_check_neq(a2, null);
217 do_check_eq(a2.id, "addon2@tests.mozilla.org");
218 do_check_neq(a2.syncGUID, null);
219 do_check_true(a2.syncGUID.length >= 9);
220 do_check_eq(a2.version, "2.0");
221 do_check_eq(a2.name, "Test 2");
222 do_check_true(isExtensionInAddonsList(profileDir, a2.id));
223 do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
224 do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
225 do_check_in_crash_annotation(addon2.id, addon2.version);
226 do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE);
227 do_check_eq(a2.sourceURI, null);
228 do_check_true(a2.foreignInstall);
230 do_check_neq(a3, null);
231 do_check_eq(a3.id, "addon3@tests.mozilla.org");
232 do_check_neq(a3.syncGUID, null);
233 do_check_true(a3.syncGUID.length >= 9);
234 do_check_eq(a3.version, "3.0");
235 do_check_eq(a3.name, "Test 3");
236 do_check_true(isExtensionInAddonsList(profileDir, a3.id));
237 do_check_true(hasFlag(a3.permissions, AddonManager.PERM_CAN_UNINSTALL));
238 do_check_true(hasFlag(a3.permissions, AddonManager.PERM_CAN_UPGRADE));
239 do_check_in_crash_annotation(addon3.id, addon3.version);
240 do_check_eq(a3.scope, AddonManager.SCOPE_PROFILE);
241 do_check_eq(a3.sourceURI, null);
242 do_check_true(a3.foreignInstall);
244 do_check_eq(a4, null);
245 do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
246 dest = profileDir.clone();
247 dest.append(do_get_expected_addon_name("addon4@tests.mozilla.org"));
248 do_check_false(dest.exists());
250 do_check_eq(a5, null);
251 do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
252 dest = profileDir.clone();
253 dest.append(do_get_expected_addon_name("addon5@tests.mozilla.org"));
254 do_check_false(dest.exists());
256 do_check_eq(a6, null);
257 do_check_false(isExtensionInAddonsList(profileDir, "addon6@tests.mozilla.org"));
258 dest = profileDir.clone();
259 dest.append(do_get_expected_addon_name("addon6@tests.mozilla.org"));
260 do_check_false(dest.exists());
262 do_check_eq(a7, null);
263 do_check_false(isExtensionInAddonsList(profileDir, "addon7@tests.mozilla.org"));
264 dest = profileDir.clone();
265 dest.append(do_get_expected_addon_name("addon7@tests.mozilla.org"));
266 do_check_false(dest.exists());
268 AddonManager.getAddonsByTypes(["extension"], function(extensionAddons) {
269 do_check_eq(extensionAddons.length, 3);
271 do_execute_soon(run_test_2);
272 });
273 });
274 }
276 // Test that modified items are detected and items in other install locations
277 // are ignored
278 function run_test_2() {
279 addon1.version = "1.1";
280 writeInstallRDFForExtension(addon1, userDir);
281 addon2.version="2.1";
282 writeInstallRDFForExtension(addon2, profileDir);
283 addon2.version="2.2";
284 writeInstallRDFForExtension(addon2, globalDir);
285 addon2.version="2.3";
286 writeInstallRDFForExtension(addon2, userDir);
287 var dest = profileDir.clone();
288 dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org"));
289 dest.remove(true);
291 gCachePurged = false;
292 restartManager();
293 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
294 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]);
295 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon3@tests.mozilla.org"]);
296 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
297 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
298 do_check_true(gCachePurged);
300 do_check_true(gExtensionsINI.exists());
302 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
303 "addon2@tests.mozilla.org",
304 "addon3@tests.mozilla.org",
305 "addon4@tests.mozilla.org",
306 "addon5@tests.mozilla.org"],
307 function([a1, a2, a3, a4, a5]) {
309 do_check_neq(a1, null);
310 do_check_eq(a1.id, "addon1@tests.mozilla.org");
311 do_check_eq(a1.version, "1.0");
312 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
313 do_check_false(isExtensionInAddonsList(userDir, a1.id));
314 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
315 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
316 do_check_in_crash_annotation(addon1.id, a1.version);
317 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
318 do_check_true(a1.foreignInstall);
320 do_check_neq(a2, null);
321 do_check_eq(a2.id, "addon2@tests.mozilla.org");
322 do_check_eq(a2.version, "2.1");
323 do_check_true(isExtensionInAddonsList(profileDir, a2.id));
324 do_check_false(isExtensionInAddonsList(userDir, a2.id));
325 do_check_false(isExtensionInAddonsList(globalDir, a2.id));
326 do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
327 do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
328 do_check_in_crash_annotation(addon2.id, a2.version);
329 do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE);
330 do_check_true(a2.foreignInstall);
332 do_check_eq(a3, null);
333 do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
334 do_check_not_in_crash_annotation(addon3.id, addon3.version);
336 do_check_eq(a4, null);
337 do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
339 do_check_eq(a5, null);
340 do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
342 do_execute_soon(run_test_3);
343 });
344 }
346 // Check that removing items from the profile reveals their hidden versions.
347 function run_test_3() {
348 var dest = profileDir.clone();
349 dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
350 dest.remove(true);
351 dest = profileDir.clone();
352 dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
353 dest.remove(true);
354 writeInstallRDFForExtension(addon3, profileDir, "addon4@tests.mozilla.org");
356 gCachePurged = false;
357 restartManager();
358 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
359 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org",
360 "addon2@tests.mozilla.org"]);
361 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
362 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
363 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
364 do_check_true(gCachePurged);
366 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
367 "addon2@tests.mozilla.org",
368 "addon3@tests.mozilla.org",
369 "addon4@tests.mozilla.org",
370 "addon5@tests.mozilla.org"],
371 function([a1, a2, a3, a4, a5]) {
373 do_check_neq(a1, null);
374 do_check_eq(a1.id, "addon1@tests.mozilla.org");
375 do_check_eq(a1.version, "1.1");
376 do_check_false(isExtensionInAddonsList(profileDir, a1.id));
377 do_check_true(isExtensionInAddonsList(userDir, a1.id));
378 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
379 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
380 do_check_in_crash_annotation(addon1.id, a1.version);
381 do_check_eq(a1.scope, AddonManager.SCOPE_USER);
383 do_check_neq(a2, null);
384 do_check_eq(a2.id, "addon2@tests.mozilla.org");
385 do_check_eq(a2.version, "2.3");
386 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
387 do_check_true(isExtensionInAddonsList(userDir, a2.id));
388 do_check_false(isExtensionInAddonsList(globalDir, a2.id));
389 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
390 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
391 do_check_in_crash_annotation(addon2.id, a2.version);
392 do_check_eq(a2.scope, AddonManager.SCOPE_USER);
394 do_check_eq(a3, null);
395 do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
397 do_check_eq(a4, null);
398 do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
400 do_check_eq(a5, null);
401 do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
403 dest = profileDir.clone();
404 dest.append(do_get_expected_addon_name("addon4@tests.mozilla.org"));
405 do_check_false(dest.exists());
407 do_execute_soon(run_test_4);
408 });
409 }
411 // Test that disabling an install location works
412 function run_test_4() {
413 Services.prefs.setIntPref("extensions.enabledScopes", AddonManager.SCOPE_SYSTEM);
415 gCachePurged = false;
416 restartManager();
417 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
418 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]);
419 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon1@tests.mozilla.org"]);
420 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
421 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
422 do_check_true(gCachePurged);
424 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
425 "addon2@tests.mozilla.org",
426 "addon3@tests.mozilla.org",
427 "addon4@tests.mozilla.org",
428 "addon5@tests.mozilla.org"],
429 function([a1, a2, a3, a4, a5]) {
431 do_check_eq(a1, null);
432 do_check_false(isExtensionInAddonsList(profileDir, "addon1@tests.mozilla.org"));
433 do_check_false(isExtensionInAddonsList(userDir, "addon1@tests.mozilla.org"));
435 do_check_neq(a2, null);
436 do_check_eq(a2.id, "addon2@tests.mozilla.org");
437 do_check_eq(a2.version, "2.2");
438 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
439 do_check_false(isExtensionInAddonsList(userDir, a2.id));
440 do_check_true(isExtensionInAddonsList(globalDir, a2.id));
441 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
442 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
443 do_check_in_crash_annotation(addon2.id, a2.version);
444 do_check_eq(a2.scope, AddonManager.SCOPE_SYSTEM);
446 do_execute_soon(run_test_5);
447 });
448 }
450 // Switching disabled locations works
451 function run_test_5() {
452 Services.prefs.setIntPref("extensions.enabledScopes", AddonManager.SCOPE_USER);
454 gCachePurged = false;
455 restartManager();
456 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon1@tests.mozilla.org"]);
457 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]);
458 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
459 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
460 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
461 do_check_true(gCachePurged);
463 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
464 "addon2@tests.mozilla.org",
465 "addon3@tests.mozilla.org",
466 "addon4@tests.mozilla.org",
467 "addon5@tests.mozilla.org"],
468 function([a1, a2, a3, a4, a5]) {
470 do_check_neq(a1, null);
471 do_check_eq(a1.id, "addon1@tests.mozilla.org");
472 do_check_eq(a1.version, "1.1");
473 do_check_false(isExtensionInAddonsList(profileDir, a1.id));
474 do_check_true(isExtensionInAddonsList(userDir, a1.id));
475 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
476 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
477 do_check_in_crash_annotation(addon1.id, a1.version);
478 do_check_eq(a1.scope, AddonManager.SCOPE_USER);
480 do_check_neq(a2, null);
481 do_check_eq(a2.id, "addon2@tests.mozilla.org");
482 do_check_eq(a2.version, "2.3");
483 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
484 do_check_true(isExtensionInAddonsList(userDir, a2.id));
485 do_check_false(isExtensionInAddonsList(globalDir, a2.id));
486 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
487 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
488 do_check_in_crash_annotation(addon2.id, a2.version);
489 do_check_eq(a2.scope, AddonManager.SCOPE_USER);
491 do_execute_soon(run_test_6);
492 });
493 }
495 // Resetting the pref makes everything visible again
496 function run_test_6() {
497 Services.prefs.clearUserPref("extensions.enabledScopes");
499 gCachePurged = false;
500 restartManager();
501 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
502 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
503 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
504 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
505 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
506 do_check_true(gCachePurged);
508 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
509 "addon2@tests.mozilla.org",
510 "addon3@tests.mozilla.org",
511 "addon4@tests.mozilla.org",
512 "addon5@tests.mozilla.org"],
513 function([a1, a2, a3, a4, a5]) {
515 do_check_neq(a1, null);
516 do_check_eq(a1.id, "addon1@tests.mozilla.org");
517 do_check_eq(a1.version, "1.1");
518 do_check_false(isExtensionInAddonsList(profileDir, a1.id));
519 do_check_true(isExtensionInAddonsList(userDir, a1.id));
520 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
521 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
522 do_check_in_crash_annotation(addon1.id, a1.version);
523 do_check_eq(a1.scope, AddonManager.SCOPE_USER);
525 do_check_neq(a2, null);
526 do_check_eq(a2.id, "addon2@tests.mozilla.org");
527 do_check_eq(a2.version, "2.3");
528 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
529 do_check_true(isExtensionInAddonsList(userDir, a2.id));
530 do_check_false(isExtensionInAddonsList(globalDir, a2.id));
531 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
532 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
533 do_check_in_crash_annotation(addon2.id, a2.version);
534 do_check_eq(a2.scope, AddonManager.SCOPE_USER);
536 do_execute_soon(run_test_7);
537 });
538 }
540 // Check that items in the profile hide the others again.
541 function run_test_7() {
542 addon1.version = "1.2";
543 writeInstallRDFForExtension(addon1, profileDir);
544 var dest = userDir.clone();
545 dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
546 dest.remove(true);
548 gCachePurged = false;
549 restartManager();
550 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
551 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org",
552 "addon2@tests.mozilla.org"]);
553 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
554 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
555 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
556 do_check_true(gCachePurged);
558 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
559 "addon2@tests.mozilla.org",
560 "addon3@tests.mozilla.org",
561 "addon4@tests.mozilla.org",
562 "addon5@tests.mozilla.org"],
563 function([a1, a2, a3, a4, a5]) {
565 do_check_neq(a1, null);
566 do_check_eq(a1.id, "addon1@tests.mozilla.org");
567 do_check_eq(a1.version, "1.2");
568 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
569 do_check_false(isExtensionInAddonsList(userDir, a1.id));
570 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
571 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
572 do_check_in_crash_annotation(addon1.id, a1.version);
573 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
575 do_check_neq(a2, null);
576 do_check_eq(a2.id, "addon2@tests.mozilla.org");
577 do_check_eq(a2.version, "2.2");
578 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
579 do_check_false(isExtensionInAddonsList(userDir, a2.id));
580 do_check_true(isExtensionInAddonsList(globalDir, a2.id));
581 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
582 do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
583 do_check_in_crash_annotation(addon2.id, a2.version);
584 do_check_eq(a2.scope, AddonManager.SCOPE_SYSTEM);
586 do_check_eq(a3, null);
587 do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
589 do_check_eq(a4, null);
590 do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
592 do_check_eq(a5, null);
593 do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
595 do_execute_soon(run_test_8);
596 });
597 }
599 // Disabling all locations still leaves the profile working
600 function run_test_8() {
601 Services.prefs.setIntPref("extensions.enabledScopes", 0);
603 gCachePurged = false;
604 restartManager();
605 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
606 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
607 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon2@tests.mozilla.org"]);
608 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
609 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
610 do_check_true(gCachePurged);
612 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
613 "addon2@tests.mozilla.org",
614 "addon3@tests.mozilla.org",
615 "addon4@tests.mozilla.org",
616 "addon5@tests.mozilla.org"],
617 function([a1, a2, a3, a4, a5]) {
619 do_check_neq(a1, null);
620 do_check_eq(a1.id, "addon1@tests.mozilla.org");
621 do_check_eq(a1.version, "1.2");
622 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
623 do_check_false(isExtensionInAddonsList(userDir, a1.id));
624 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
625 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
626 do_check_in_crash_annotation(addon1.id, a1.version);
627 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
629 do_check_eq(a2, null);
630 do_check_false(isExtensionInAddonsList(profileDir, "addon2@tests.mozilla.org"));
631 do_check_false(isExtensionInAddonsList(userDir, "addon2@tests.mozilla.org"));
632 do_check_false(isExtensionInAddonsList(globalDir, "addon2@tests.mozilla.org"));
634 do_execute_soon(run_test_9);
635 });
636 }
638 // More hiding and revealing
639 function run_test_9() {
640 Services.prefs.clearUserPref("extensions.enabledScopes", 0);
642 var dest = userDir.clone();
643 dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
644 dest.remove(true);
645 dest = globalDir.clone();
646 dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
647 dest.remove(true);
648 addon2.version = "2.4";
649 writeInstallRDFForExtension(addon2, profileDir);
651 gCachePurged = false;
652 restartManager();
653 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon2@tests.mozilla.org"]);
654 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
655 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
656 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
657 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
658 do_check_true(gCachePurged);
660 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
661 "addon2@tests.mozilla.org",
662 "addon3@tests.mozilla.org",
663 "addon4@tests.mozilla.org",
664 "addon5@tests.mozilla.org"],
665 function([a1, a2, a3, a4, a5]) {
667 do_check_neq(a1, null);
668 do_check_eq(a1.id, "addon1@tests.mozilla.org");
669 do_check_eq(a1.version, "1.2");
670 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
671 do_check_false(isExtensionInAddonsList(userDir, a1.id));
672 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
673 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
674 do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
676 do_check_neq(a2, null);
677 do_check_eq(a2.id, "addon2@tests.mozilla.org");
678 do_check_eq(a2.version, "2.4");
679 do_check_true(isExtensionInAddonsList(profileDir, a2.id));
680 do_check_false(isExtensionInAddonsList(userDir, a2.id));
681 do_check_false(isExtensionInAddonsList(globalDir, a2.id));
682 do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
683 do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
684 do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE);
686 do_check_eq(a3, null);
687 do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
689 do_check_eq(a4, null);
690 do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
692 do_check_eq(a5, null);
693 do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
695 do_execute_soon(run_test_10);
696 });
697 }
699 // Checks that a removal from one location and an addition in another location
700 // for the same item is handled
701 function run_test_10() {
702 var dest = profileDir.clone();
703 dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
704 dest.remove(true);
705 addon1.version = "1.3";
706 writeInstallRDFForExtension(addon1, userDir);
708 gCachePurged = false;
709 restartManager();
710 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
711 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org"]);
712 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
713 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
714 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
715 do_check_true(gCachePurged);
717 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
718 "addon2@tests.mozilla.org",
719 "addon3@tests.mozilla.org",
720 "addon4@tests.mozilla.org",
721 "addon5@tests.mozilla.org"],
722 function([a1, a2, a3, a4, a5]) {
724 do_check_neq(a1, null);
725 do_check_eq(a1.id, "addon1@tests.mozilla.org");
726 do_check_eq(a1.version, "1.3");
727 do_check_false(isExtensionInAddonsList(profileDir, a1.id));
728 do_check_true(isExtensionInAddonsList(userDir, a1.id));
729 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
730 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
731 do_check_eq(a1.scope, AddonManager.SCOPE_USER);
733 do_check_neq(a2, null);
734 do_check_eq(a2.id, "addon2@tests.mozilla.org");
735 do_check_eq(a2.version, "2.4");
736 do_check_true(isExtensionInAddonsList(profileDir, a2.id));
737 do_check_false(isExtensionInAddonsList(userDir, a2.id));
738 do_check_false(isExtensionInAddonsList(globalDir, a2.id));
739 do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
740 do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
741 do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE);
743 do_check_eq(a3, null);
744 do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
746 do_check_eq(a4, null);
747 do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
749 do_check_eq(a5, null);
750 do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
752 do_execute_soon(run_test_11);
753 });
754 }
756 // This should remove any remaining items
757 function run_test_11() {
758 var dest = userDir.clone();
759 dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
760 dest.remove(true);
761 dest = profileDir.clone();
762 dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
763 dest.remove(true);
765 gCachePurged = false;
766 restartManager();
767 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
768 check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
769 check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon1@tests.mozilla.org",
770 "addon2@tests.mozilla.org"]);
771 check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
772 check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
773 do_check_true(gCachePurged);
775 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
776 "addon2@tests.mozilla.org",
777 "addon3@tests.mozilla.org",
778 "addon4@tests.mozilla.org",
779 "addon5@tests.mozilla.org"],
780 function([a1, a2, a3, a4, a5]) {
782 do_check_eq(a1, null);
783 do_check_eq(a2, null);
784 do_check_eq(a3, null);
785 do_check_eq(a4, null);
786 do_check_eq(a5, null);
787 do_check_false(isExtensionInAddonsList(profileDir, "addon1@tests.mozilla.org"));
788 do_check_false(isExtensionInAddonsList(profileDir, "addon2@tests.mozilla.org"));
789 do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
790 do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
791 do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
792 do_check_false(isExtensionInAddonsList(userDir, "addon1@tests.mozilla.org"));
793 do_check_false(isExtensionInAddonsList(userDir, "addon2@tests.mozilla.org"));
794 do_check_false(isExtensionInAddonsList(userDir, "addon3@tests.mozilla.org"));
795 do_check_false(isExtensionInAddonsList(userDir, "addon4@tests.mozilla.org"));
796 do_check_false(isExtensionInAddonsList(userDir, "addon5@tests.mozilla.org"));
797 do_check_false(isExtensionInAddonsList(globalDir, "addon1@tests.mozilla.org"));
798 do_check_false(isExtensionInAddonsList(globalDir, "addon2@tests.mozilla.org"));
799 do_check_false(isExtensionInAddonsList(globalDir, "addon3@tests.mozilla.org"));
800 do_check_false(isExtensionInAddonsList(globalDir, "addon4@tests.mozilla.org"));
801 do_check_false(isExtensionInAddonsList(globalDir, "addon5@tests.mozilla.org"));
802 do_check_not_in_crash_annotation(addon1.id, addon1.version);
803 do_check_not_in_crash_annotation(addon2.id, addon2.version);
805 do_execute_soon(run_test_12);
806 });
807 }
809 // Test that auto-disabling for specific scopes works
810 function run_test_12() {
811 Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_USER);
813 writeInstallRDFForExtension(addon1, profileDir);
814 writeInstallRDFForExtension(addon2, userDir);
815 writeInstallRDFForExtension(addon3, globalDir);
817 restartManager();
819 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
820 "addon2@tests.mozilla.org",
821 "addon3@tests.mozilla.org",
822 "addon4@tests.mozilla.org",
823 "addon5@tests.mozilla.org"],
824 callback_soon(function([a1, a2, a3, a4, a5]) {
825 do_check_neq(a1, null);
826 do_check_false(a1.userDisabled);
827 do_check_true(a1.isActive);
829 do_check_neq(a2, null);
830 do_check_true(a2.userDisabled);
831 do_check_false(a2.isActive);
833 do_check_neq(a3, null);
834 do_check_false(a3.userDisabled);
835 do_check_true(a3.isActive);
837 var dest = profileDir.clone();
838 dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
839 dest.remove(true);
840 dest = userDir.clone();
841 dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
842 dest.remove(true);
843 dest = globalDir.clone();
844 dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org"));
845 dest.remove(true);
847 restartManager();
849 Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_SYSTEM);
851 writeInstallRDFForExtension(addon1, profileDir);
852 writeInstallRDFForExtension(addon2, userDir);
853 writeInstallRDFForExtension(addon3, globalDir);
855 restartManager();
857 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
858 "addon2@tests.mozilla.org",
859 "addon3@tests.mozilla.org",
860 "addon4@tests.mozilla.org",
861 "addon5@tests.mozilla.org"],
862 function([a1, a2, a3, a4, a5]) {
863 do_check_neq(a1, null);
864 do_check_false(a1.userDisabled);
865 do_check_true(a1.isActive);
867 do_check_neq(a2, null);
868 do_check_false(a2.userDisabled);
869 do_check_true(a2.isActive);
871 do_check_neq(a3, null);
872 do_check_true(a3.userDisabled);
873 do_check_false(a3.isActive);
875 var dest = profileDir.clone();
876 dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
877 dest.remove(true);
878 dest = userDir.clone();
879 dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
880 dest.remove(true);
881 dest = globalDir.clone();
882 dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org"));
883 dest.remove(true);
885 restartManager();
887 Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_USER + AddonManager.SCOPE_SYSTEM);
889 writeInstallRDFForExtension(addon1, profileDir);
890 writeInstallRDFForExtension(addon2, userDir);
891 writeInstallRDFForExtension(addon3, globalDir);
893 restartManager();
895 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
896 "addon2@tests.mozilla.org",
897 "addon3@tests.mozilla.org",
898 "addon4@tests.mozilla.org",
899 "addon5@tests.mozilla.org"],
900 function([a1, a2, a3, a4, a5]) {
901 do_check_neq(a1, null);
902 do_check_false(a1.userDisabled);
903 do_check_true(a1.isActive);
905 do_check_neq(a2, null);
906 do_check_true(a2.userDisabled);
907 do_check_false(a2.isActive);
909 do_check_neq(a3, null);
910 do_check_true(a3.userDisabled);
911 do_check_false(a3.isActive);
913 do_execute_soon(end_test);
914 });
915 });
916 }));
917 }