toolkit/mozapps/extensions/test/xpcshell/test_uninstall.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:7d9e3568f6c4
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
4
5 // This verifies that add-ons can be uninstalled.
6
7 var addon1 = {
8 id: "addon1@tests.mozilla.org",
9 version: "1.0",
10 name: "Test 1",
11 targetApplications: [{
12 id: "xpcshell@tests.mozilla.org",
13 minVersion: "1",
14 maxVersion: "1"
15 }]
16 };
17
18 const profileDir = gProfD.clone();
19 profileDir.append("extensions");
20
21 // Sets up the profile by installing an add-on.
22 function run_test() {
23 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
24
25 do_test_pending();
26 startupManager();
27
28 AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(olda1) {
29 do_check_eq(olda1, null);
30
31 writeInstallRDFForExtension(addon1, profileDir);
32
33 restartManager();
34
35 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
36 do_check_neq(a1, null);
37 do_check_true(a1.isActive);
38 do_check_false(a1.userDisabled);
39 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
40 do_check_eq(a1.pendingOperations, 0);
41 do_check_in_crash_annotation(addon1.id, addon1.version);
42
43 do_execute_soon(run_test_1);
44 });
45 }));
46 }
47
48 function end_test() {
49 do_execute_soon(do_test_finished);
50 }
51
52 // Uninstalling an add-on should work.
53 function run_test_1() {
54 prepare_test({
55 "addon1@tests.mozilla.org": [
56 "onUninstalling"
57 ]
58 });
59 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
60 do_check_eq(a1.pendingOperations, 0);
61 do_check_neq(a1.operationsRequiringRestart &
62 AddonManager.OP_NEEDS_RESTART_UNINSTALL, 0);
63 a1.uninstall();
64 do_check_true(hasFlag(a1.pendingOperations, AddonManager.PENDING_UNINSTALL));
65 do_check_in_crash_annotation(addon1.id, addon1.version);
66
67 ensure_test_completed();
68
69 AddonManager.getAddonsWithOperationsByTypes(null, function(list) {
70 do_check_eq(list.length, 1);
71 do_check_eq(list[0].id, "addon1@tests.mozilla.org");
72
73 do_execute_soon(check_test_1);
74 });
75 });
76 }
77
78 function check_test_1() {
79 restartManager();
80
81 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
82 do_check_eq(a1, null);
83 do_check_false(isExtensionInAddonsList(profileDir, "addon1@tests.mozilla.org"));
84 do_check_not_in_crash_annotation(addon1.id, addon1.version);
85
86 var dest = profileDir.clone();
87 dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
88 do_check_false(dest.exists());
89 writeInstallRDFForExtension(addon1, profileDir);
90 do_execute_soon(run_test_2);
91 });
92 }
93
94 // Cancelling the uninstall should send onOperationCancelled
95 function run_test_2() {
96 restartManager();
97
98 prepare_test({
99 "addon1@tests.mozilla.org": [
100 "onUninstalling"
101 ]
102 });
103
104 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
105 do_check_neq(a1, null);
106 do_check_true(a1.isActive);
107 do_check_false(a1.userDisabled);
108 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
109 do_check_eq(a1.pendingOperations, 0);
110 a1.uninstall();
111 do_check_true(hasFlag(a1.pendingOperations, AddonManager.PENDING_UNINSTALL));
112
113 ensure_test_completed();
114
115 prepare_test({
116 "addon1@tests.mozilla.org": [
117 "onOperationCancelled"
118 ]
119 });
120 a1.cancelUninstall();
121 do_check_eq(a1.pendingOperations, 0);
122
123 ensure_test_completed();
124
125 do_execute_soon(check_test_2);
126 });
127 }
128
129 function check_test_2() {
130 restartManager();
131
132 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
133 do_check_neq(a1, null);
134 do_check_true(a1.isActive);
135 do_check_false(a1.userDisabled);
136 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
137
138 run_test_3();
139 });
140 }
141
142 // Uninstalling an item pending disable should still require a restart
143 function run_test_3() {
144 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
145 prepare_test({
146 "addon1@tests.mozilla.org": [
147 "onDisabling"
148 ]
149 });
150 a1.userDisabled = true;
151 ensure_test_completed();
152
153 do_check_true(hasFlag(AddonManager.PENDING_DISABLE, a1.pendingOperations));
154 do_check_true(a1.isActive);
155
156 prepare_test({
157 "addon1@tests.mozilla.org": [
158 "onUninstalling"
159 ]
160 });
161 a1.uninstall();
162
163 check_test_3();
164 });
165 }
166
167 function check_test_3() {
168 ensure_test_completed();
169
170 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
171 do_check_neq(a1, null);
172 do_check_true(hasFlag(AddonManager.PENDING_UNINSTALL, a1.pendingOperations));
173
174 prepare_test({
175 "addon1@tests.mozilla.org": [
176 "onOperationCancelled"
177 ]
178 });
179 a1.cancelUninstall();
180 ensure_test_completed();
181 do_check_true(hasFlag(AddonManager.PENDING_DISABLE, a1.pendingOperations));
182
183 do_execute_soon(run_test_4);
184 });
185 }
186
187 // Test that uninstalling an inactive item should happen without a restart
188 function run_test_4() {
189 restartManager();
190
191 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
192 do_check_neq(a1, null);
193 do_check_false(a1.isActive);
194 do_check_true(a1.userDisabled);
195 do_check_false(isExtensionInAddonsList(profileDir, a1.id));
196
197 prepare_test({
198 "addon1@tests.mozilla.org": [
199 ["onUninstalling", false],
200 "onUninstalled"
201 ]
202 });
203 a1.uninstall();
204
205 check_test_4();
206 });
207 }
208
209 function check_test_4() {
210 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
211 do_check_eq(a1, null);
212
213 end_test();
214 });
215 }

mercurial