Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
5 // This verifies that add-ons can be uninstalled.
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 };
18 const profileDir = gProfD.clone();
19 profileDir.append("extensions");
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");
25 do_test_pending();
26 startupManager();
28 AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(olda1) {
29 do_check_eq(olda1, null);
31 writeInstallRDFForExtension(addon1, profileDir);
33 restartManager();
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);
43 do_execute_soon(run_test_1);
44 });
45 }));
46 }
48 function end_test() {
49 do_execute_soon(do_test_finished);
50 }
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);
67 ensure_test_completed();
69 AddonManager.getAddonsWithOperationsByTypes(null, function(list) {
70 do_check_eq(list.length, 1);
71 do_check_eq(list[0].id, "addon1@tests.mozilla.org");
73 do_execute_soon(check_test_1);
74 });
75 });
76 }
78 function check_test_1() {
79 restartManager();
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);
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 }
94 // Cancelling the uninstall should send onOperationCancelled
95 function run_test_2() {
96 restartManager();
98 prepare_test({
99 "addon1@tests.mozilla.org": [
100 "onUninstalling"
101 ]
102 });
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));
113 ensure_test_completed();
115 prepare_test({
116 "addon1@tests.mozilla.org": [
117 "onOperationCancelled"
118 ]
119 });
120 a1.cancelUninstall();
121 do_check_eq(a1.pendingOperations, 0);
123 ensure_test_completed();
125 do_execute_soon(check_test_2);
126 });
127 }
129 function check_test_2() {
130 restartManager();
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));
138 run_test_3();
139 });
140 }
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();
153 do_check_true(hasFlag(AddonManager.PENDING_DISABLE, a1.pendingOperations));
154 do_check_true(a1.isActive);
156 prepare_test({
157 "addon1@tests.mozilla.org": [
158 "onUninstalling"
159 ]
160 });
161 a1.uninstall();
163 check_test_3();
164 });
165 }
167 function check_test_3() {
168 ensure_test_completed();
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));
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));
183 do_execute_soon(run_test_4);
184 });
185 }
187 // Test that uninstalling an inactive item should happen without a restart
188 function run_test_4() {
189 restartManager();
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));
197 prepare_test({
198 "addon1@tests.mozilla.org": [
199 ["onUninstalling", false],
200 "onUninstalled"
201 ]
202 });
203 a1.uninstall();
205 check_test_4();
206 });
207 }
209 function check_test_4() {
210 AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
211 do_check_eq(a1, null);
213 end_test();
214 });
215 }