|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 Components.utils.import("resource://gre/modules/NetUtil.jsm"); |
|
6 |
|
7 // Tests that extensions behave correctly in safe mode |
|
8 |
|
9 var addon1 = { |
|
10 id: "addon1@tests.mozilla.org", |
|
11 version: "1.0", |
|
12 name: "Test 1", |
|
13 optionsURL: "chrome://foo/content/options.xul", |
|
14 aboutURL: "chrome://foo/content/about.xul", |
|
15 iconURL: "chrome://foo/content/icon.png", |
|
16 targetApplications: [{ |
|
17 id: "xpcshell@tests.mozilla.org", |
|
18 minVersion: "1", |
|
19 maxVersion: "1" |
|
20 }] |
|
21 }; |
|
22 |
|
23 const profileDir = gProfD.clone(); |
|
24 profileDir.append("extensions"); |
|
25 |
|
26 var gIconURL = null; |
|
27 |
|
28 // Sets up the profile by installing an add-on. |
|
29 function run_test() { |
|
30 do_test_pending(); |
|
31 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); |
|
32 gAppInfo.inSafeMode = true; |
|
33 |
|
34 startupManager(); |
|
35 |
|
36 AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) { |
|
37 do_check_eq(a1, null); |
|
38 do_check_not_in_crash_annotation(addon1.id, addon1.version); |
|
39 |
|
40 writeInstallRDFForExtension(addon1, profileDir, addon1.id, "icon.png"); |
|
41 gIconURL = do_get_addon_root_uri(profileDir.clone(), addon1.id) + "icon.png"; |
|
42 |
|
43 restartManager(); |
|
44 |
|
45 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(newa1) { |
|
46 do_check_neq(newa1, null); |
|
47 do_check_false(newa1.isActive); |
|
48 do_check_false(newa1.userDisabled); |
|
49 do_check_eq(newa1.aboutURL, null); |
|
50 do_check_eq(newa1.optionsURL, null); |
|
51 do_check_eq(newa1.iconURL, gIconURL); |
|
52 do_check_true(isExtensionInAddonsList(profileDir, newa1.id)); |
|
53 do_check_true(hasFlag(newa1.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
54 do_check_false(hasFlag(newa1.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
55 do_check_eq(newa1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_NONE); |
|
56 do_check_not_in_crash_annotation(addon1.id, addon1.version); |
|
57 |
|
58 run_test_1(); |
|
59 }); |
|
60 })); |
|
61 } |
|
62 |
|
63 // Disabling an add-on should work |
|
64 function run_test_1() { |
|
65 prepare_test({ |
|
66 "addon1@tests.mozilla.org": [ |
|
67 ["onDisabling", false], |
|
68 "onDisabled" |
|
69 ] |
|
70 }); |
|
71 |
|
72 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) { |
|
73 do_check_false(hasFlag(a1.operationsRequiringRestart, |
|
74 AddonManager.OP_NEEDS_RESTART_DISABLE)); |
|
75 a1.userDisabled = true; |
|
76 do_check_false(a1.isActive); |
|
77 do_check_eq(a1.aboutURL, null); |
|
78 do_check_eq(a1.optionsURL, null); |
|
79 do_check_eq(a1.iconURL, gIconURL); |
|
80 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
81 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
82 do_check_eq(a1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_NONE); |
|
83 do_check_not_in_crash_annotation(addon1.id, addon1.version); |
|
84 |
|
85 ensure_test_completed(); |
|
86 |
|
87 run_test_2(); |
|
88 }); |
|
89 } |
|
90 |
|
91 // Enabling an add-on should happen without restart but not become active. |
|
92 function run_test_2() { |
|
93 prepare_test({ |
|
94 "addon1@tests.mozilla.org": [ |
|
95 ["onEnabling", false], |
|
96 "onEnabled" |
|
97 ] |
|
98 }); |
|
99 |
|
100 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) { |
|
101 a1.userDisabled = false; |
|
102 do_check_false(a1.isActive); |
|
103 do_check_eq(a1.aboutURL, null); |
|
104 do_check_eq(a1.optionsURL, null); |
|
105 do_check_eq(a1.iconURL, gIconURL); |
|
106 do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
107 do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
108 do_check_eq(a1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_NONE); |
|
109 do_check_not_in_crash_annotation(addon1.id, addon1.version); |
|
110 |
|
111 ensure_test_completed(); |
|
112 |
|
113 do_execute_soon(do_test_finished); |
|
114 }); |
|
115 } |