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 // Tests the list view
7 let tempScope = {};
8 Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", tempScope);
9 let LightweightThemeManager = tempScope.LightweightThemeManager;
12 var gProvider;
13 var gManagerWindow;
14 var gCategoryUtilities;
16 var gApp = document.getElementById("bundle_brand").getString("brandShortName");
17 var gVersion = Services.appinfo.version;
18 var gBlocklistURL = Services.urlFormatter.formatURLPref("extensions.blocklist.detailsURL");
19 var gPluginURL = Services.urlFormatter.formatURLPref("plugins.update.url");
20 var gDate = new Date(2010, 7, 16);
22 var gLWTheme = {
23 id: "4",
24 version: "1",
25 name: "Bling",
26 description: "SO MUCH BLING!",
27 author: "Pixel Pusher",
28 homepageURL: "http://mochi.test:8888/data/index.html",
29 headerURL: "http://mochi.test:8888/data/header.png",
30 footerURL: "http://mochi.test:8888/data/footer.png",
31 previewURL: "http://mochi.test:8888/data/preview.png",
32 iconURL: "http://mochi.test:8888/data/icon.png"
33 };
36 function test() {
37 waitForExplicitFinish();
39 gProvider = new MockProvider();
41 gProvider.createAddons([{
42 id: "addon1@tests.mozilla.org",
43 name: "Test add-on",
44 version: "1.0",
45 description: "A test add-on",
46 longDescription: " A longer description",
47 updateDate: gDate
48 }, {
49 id: "addon2@tests.mozilla.org",
50 name: "Test add-on 2",
51 version: "2.0",
52 longDescription: " A longer description",
53 _userDisabled: true,
54 isActive: false,
55 }, {
56 id: "addon3@tests.mozilla.org",
57 name: "Test add-on 3",
58 longDescription: " A longer description",
59 isActive: false,
60 isCompatible: false,
61 appDisabled: true,
62 permissions: AddonManager.PERM_CAN_ENABLE |
63 AddonManager.PERM_CAN_DISABLE |
64 AddonManager.PERM_CAN_UPGRADE
65 }, {
66 id: "addon4@tests.mozilla.org",
67 blocklistURL: "http://example.com/addon4@tests.mozilla.org",
68 name: "Test add-on 4",
69 _userDisabled: true,
70 isActive: false,
71 blocklistState: Ci.nsIBlocklistService.STATE_SOFTBLOCKED
72 }, {
73 id: "addon5@tests.mozilla.org",
74 blocklistURL: "http://example.com/addon5@tests.mozilla.org",
75 name: "Test add-on 5",
76 isActive: false,
77 blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED,
78 appDisabled: true
79 }, {
80 id: "addon6@tests.mozilla.org",
81 blocklistURL: "http://example.com/addon6@tests.mozilla.org",
82 name: "Test add-on 6",
83 operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE
84 }, {
85 id: "addon7@tests.mozilla.org",
86 blocklistURL: "http://example.com/addon7@tests.mozilla.org",
87 name: "Test add-on 7",
88 blocklistState: Ci.nsIBlocklistService.STATE_OUTDATED,
89 }, {
90 id: "addon8@tests.mozilla.org",
91 blocklistURL: "http://example.com/addon8@tests.mozilla.org",
92 name: "Test add-on 8",
93 blocklistState: Ci.nsIBlocklistService.STATE_VULNERABLE_UPDATE_AVAILABLE,
94 }, {
95 id: "addon9@tests.mozilla.org",
96 blocklistURL: "http://example.com/addon9@tests.mozilla.org",
97 name: "Test add-on 9",
98 blocklistState: Ci.nsIBlocklistService.STATE_VULNERABLE_NO_UPDATE,
99 }]);
101 open_manager(null, function(aWindow) {
102 gManagerWindow = aWindow;
103 gCategoryUtilities = new CategoryUtilities(gManagerWindow);
104 run_next_test();
105 });
106 }
108 function end_test() {
109 close_manager(gManagerWindow, function() {
110 finish();
111 });
112 }
114 function get_test_items() {
115 var tests = "@tests.mozilla.org";
117 var items = {};
118 var item = gManagerWindow.document.getElementById("addon-list").firstChild;
120 while (item) {
121 if (item.mAddon.id.substring(item.mAddon.id.length - tests.length) == tests)
122 items[item.mAddon.name] = item;
123 item = item.nextSibling;
124 }
126 return items;
127 }
129 function get_node(parent, anonid) {
130 return parent.ownerDocument.getAnonymousElementByAttribute(parent, "anonid", anonid);
131 }
133 function get_class_node(parent, cls) {
134 return parent.ownerDocument.getAnonymousElementByAttribute(parent, "class", cls);
135 }
137 // Check that the list appears to have displayed correctly and trigger some
138 // changes
139 add_test(function() {
140 gCategoryUtilities.openType("extension", function() {
141 let items = get_test_items();
142 is(Object.keys(items).length, 9, "Should be nine add-ons installed");
144 info("Addon 1");
145 let addon = items["Test add-on"];
146 addon.parentNode.ensureElementIsVisible(addon);
147 is(get_node(addon, "name").value, "Test add-on", "Name should be correct");
148 is_element_visible(get_node(addon, "version"), "Version should be visible");
149 is(get_node(addon, "version").value, "1.0", "Version should be correct");
150 is_element_visible(get_node(addon, "description"), "Description should be visible");
151 is(get_node(addon, "description").value, "A test add-on", "Description should be correct");
152 is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
153 is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
154 is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct");
156 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
157 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
158 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
159 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
161 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
162 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
163 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
164 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
165 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
167 info("Disabling");
168 EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow);
169 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
170 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
171 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
172 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
174 is_element_hidden(get_node(addon, "warning"), "Warning message should be visible");
175 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
176 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
177 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
178 is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
179 is(get_node(addon, "pending").textContent, "Test add-on will be disabled after you restart " + gApp + ".", "Pending message should be correct");
181 info("Addon 2");
182 addon = items["Test add-on 2"];
183 addon.parentNode.ensureElementIsVisible(addon);
184 is(get_node(addon, "name").value, "Test add-on 2", "Name should be correct");
185 is_element_visible(get_node(addon, "version"), "Version should be visible");
186 is(get_node(addon, "version").value, "2.0", "Version should be correct");
187 is_element_hidden(get_node(addon, "description"), "Description should be hidden");
188 is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible");
189 is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
190 is(get_node(addon, "date-updated").value, "Unknown", "Date should be correct");
192 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
193 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
194 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
195 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
197 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
198 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
199 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
200 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
201 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
203 info("Enabling");
204 EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow);
205 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
206 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
207 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
208 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
210 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
211 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
212 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
213 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
214 is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
215 is(get_node(addon, "pending").textContent, "Test add-on 2 will be enabled after you restart " + gApp + ".", "Pending message should be correct");
217 info("Addon 3");
218 addon = items["Test add-on 3"];
219 addon.parentNode.ensureElementIsVisible(addon);
220 is(get_node(addon, "name").value, "Test add-on 3", "Name should be correct");
221 is_element_hidden(get_node(addon, "version"), "Version should be hidden");
223 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
224 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
225 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
226 is_element_hidden(get_node(addon, "remove-btn"), "Remove button should be hidden");
228 is_element_visible(get_node(addon, "warning"), "Warning message should be visible");
229 is(get_node(addon, "warning").textContent, "Test add-on 3 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct");
230 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
231 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
232 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
233 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
235 info("Addon 4");
236 addon = items["Test add-on 4"];
237 addon.parentNode.ensureElementIsVisible(addon);
238 is(get_node(addon, "name").value, "Test add-on 4", "Name should be correct");
240 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
241 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
242 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
243 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
245 is_element_visible(get_node(addon, "warning"), "Warning message should be visible");
246 is(get_node(addon, "warning").textContent, "Test add-on 4 is known to cause security or stability issues.", "Warning message should be correct");
247 is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible");
248 is(get_node(addon, "warning-link").value, "More Information", "Warning link text should be correct");
249 is(get_node(addon, "warning-link").href, "http://example.com/addon4@tests.mozilla.org", "Warning link should be correct");
250 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
251 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
252 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
254 info("Enabling");
255 EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow);
256 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
257 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
258 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
259 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
261 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
262 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
263 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
264 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
265 is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
266 is(get_node(addon, "pending").textContent, "Test add-on 4 will be enabled after you restart " + gApp + ".", "Pending message should be correct");
268 info("Addon 5");
269 addon = items["Test add-on 5"];
270 addon.parentNode.ensureElementIsVisible(addon);
271 is(get_node(addon, "name").value, "Test add-on 5", "Name should be correct");
273 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
274 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
275 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
276 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
278 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
279 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
280 is_element_visible(get_node(addon, "error"), "Error message should be visible");
281 is(get_node(addon, "error").textContent, "Test add-on 5 has been disabled due to security or stability issues.", "Error message should be correct");
282 is_element_visible(get_node(addon, "error-link"), "Error link should be visible");
283 is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct");
284 is(get_node(addon, "error-link").href, "http://example.com/addon5@tests.mozilla.org", "Error link should be correct");
285 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
287 info("Addon 6");
288 addon = items["Test add-on 6"];
289 addon.parentNode.ensureElementIsVisible(addon);
290 is(get_node(addon, "name").value, "Test add-on 6", "Name should be correct");
291 is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
293 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
294 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
295 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
296 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
298 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
299 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
300 is_element_hidden(get_node(addon, "error"), "Error message should be visible");
301 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
302 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
304 info("Disabling");
305 EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow);
306 is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible");
308 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
309 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
310 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
311 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
313 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
314 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
315 is_element_hidden(get_node(addon, "error"), "Error message should be visible");
316 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
317 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
319 info("Addon 7");
320 addon = items["Test add-on 7"];
321 addon.parentNode.ensureElementIsVisible(addon);
322 is(get_node(addon, "name").value, "Test add-on 7", "Name should be correct");
324 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
325 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
326 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
327 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
329 is_element_visible(get_node(addon, "warning"), "Warning message should be hidden");
330 is(get_node(addon, "warning").textContent, "An important update is available for Test add-on 7.", "Warning message should be correct");
331 is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible");
332 is(get_node(addon, "warning-link").value, "Update Now", "Warning link text should be correct");
333 is(get_node(addon, "warning-link").href, gPluginURL, "Warning link should be correct");
334 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
335 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
336 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
338 info("Disabling");
339 EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow);
340 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
341 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
342 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
343 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
345 is_element_hidden(get_node(addon, "warning"), "Warning message should be visible");
346 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
347 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
348 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
349 is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
350 is(get_node(addon, "pending").textContent, "Test add-on 7 will be disabled after you restart " + gApp + ".", "Pending message should be correct");
352 info("Addon 8");
353 addon = items["Test add-on 8"];
354 addon.parentNode.ensureElementIsVisible(addon);
355 is(get_node(addon, "name").value, "Test add-on 8", "Name should be correct");
357 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
358 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
359 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
360 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
362 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
363 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
364 is_element_visible(get_node(addon, "error"), "Error message should be visible");
365 is(get_node(addon, "error").textContent, "Test add-on 8 is known to be vulnerable and should be updated.", "Error message should be correct");
366 is_element_visible(get_node(addon, "error-link"), "Error link should be visible");
367 is(get_node(addon, "error-link").value, "Update Now", "Error link text should be correct");
368 is(get_node(addon, "error-link").href, "http://example.com/addon8@tests.mozilla.org", "Error link should be correct");
369 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
371 info("Addon 9");
372 addon = items["Test add-on 9"];
373 addon.parentNode.ensureElementIsVisible(addon);
374 is(get_node(addon, "name").value, "Test add-on 9", "Name should be correct");
376 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
377 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
378 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
379 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
381 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
382 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
383 is_element_visible(get_node(addon, "error"), "Error message should be visible");
384 is(get_node(addon, "error").textContent, "Test add-on 9 is known to be vulnerable. Use with caution.", "Error message should be correct");
385 is_element_visible(get_node(addon, "error-link"), "Error link should be visible");
386 is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct");
387 is(get_node(addon, "error-link").href, "http://example.com/addon9@tests.mozilla.org", "Error link should be correct");
388 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
390 run_next_test();
391 });
392 });
394 // Check the add-ons are now in the right state
395 add_test(function() {
396 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
397 "addon2@tests.mozilla.org",
398 "addon4@tests.mozilla.org",
399 "addon6@tests.mozilla.org"],
400 function([a1, a2, a4, a6]) {
401 is(a1.pendingOperations, AddonManager.PENDING_DISABLE, "Add-on 1 should be pending disable");
402 is(a2.pendingOperations, AddonManager.PENDING_ENABLE, "Add-on 2 should be pending enable");
403 is(a4.pendingOperations, AddonManager.PENDING_ENABLE, "Add-on 4 should be pending enable");
405 run_next_test();
406 });
407 });
409 // Reload the list to make sure the changes are still pending and that undoing
410 // works
411 add_test(function() {
412 gCategoryUtilities.openType("plugin", function() {
413 gCategoryUtilities.openType("extension", function() {
414 let items = get_test_items();
415 is(Object.keys(items).length, 9, "Should be nine add-ons installed");
417 info("Addon 1");
418 let addon = items["Test add-on"];
419 addon.parentNode.ensureElementIsVisible(addon);
420 is(get_node(addon, "name").value, "Test add-on", "Name should be correct");
421 is_element_visible(get_node(addon, "version"), "Version should be visible");
422 is(get_node(addon, "version").value, "1.0", "Version should be correct");
423 is_element_visible(get_node(addon, "description"), "Description should be visible");
424 is(get_node(addon, "description").value, "A test add-on", "Description should be correct");
425 is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
426 is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
427 is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct");
429 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
430 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
431 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
432 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
434 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
435 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
436 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
437 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
438 is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
439 is(get_node(addon, "pending").textContent, "Test add-on will be disabled after you restart " + gApp + ".", "Pending message should be correct");
441 info("Undoing");
442 EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow);
443 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
444 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
445 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
446 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
448 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
449 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
450 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
451 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
452 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
454 info("Addon 2");
455 addon = items["Test add-on 2"];
456 addon.parentNode.ensureElementIsVisible(addon);
457 is(get_node(addon, "name").value, "Test add-on 2", "Name should be correct");
458 is_element_visible(get_node(addon, "version"), "Version should be visible");
459 is(get_node(addon, "version").value, "2.0", "Version should be correct");
460 is_element_hidden(get_node(addon, "description"), "Description should be hidden");
461 is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible");
462 is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
463 is(get_node(addon, "date-updated").value, "Unknown", "Date should be correct");
465 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
466 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
467 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
468 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
470 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
471 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
472 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
473 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
474 is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
475 is(get_node(addon, "pending").textContent, "Test add-on 2 will be enabled after you restart " + gApp + ".", "Pending message should be correct");
477 info("Undoing");
478 EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow);
479 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
480 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
481 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
482 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
484 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
485 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
486 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
487 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
488 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
490 info("Addon 4");
491 addon = items["Test add-on 4"];
492 addon.parentNode.ensureElementIsVisible(addon);
493 is(get_node(addon, "name").value, "Test add-on 4", "Name should be correct");
495 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
496 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
497 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
498 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
500 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
501 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
502 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
503 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
504 is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
505 is(get_node(addon, "pending").textContent, "Test add-on 4 will be enabled after you restart " + gApp + ".", "Pending message should be correct");
507 info("Undoing");
508 EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow);
509 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
510 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
511 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
512 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
514 is_element_visible(get_node(addon, "warning"), "Warning message should be visible");
515 is(get_node(addon, "warning").textContent, "Test add-on 4 is known to cause security or stability issues.", "Warning message should be correct");
516 is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible");
517 is(get_node(addon, "warning-link").value, "More Information", "Warning link text should be correct");
518 is(get_node(addon, "warning-link").href, "http://example.com/addon4@tests.mozilla.org", "Warning link should be correct");
519 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
520 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
521 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
523 info("Addon 6");
524 addon = items["Test add-on 6"];
525 addon.parentNode.ensureElementIsVisible(addon);
526 is(get_node(addon, "name").value, "Test add-on 6", "Name should be correct");
527 is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible");
529 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
530 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
531 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
532 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
534 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
535 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
536 is_element_hidden(get_node(addon, "error"), "Error message should be visible");
537 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
538 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
540 info("Enabling");
541 EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow);
542 is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
544 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
545 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
546 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
547 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
549 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
550 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
551 is_element_hidden(get_node(addon, "error"), "Error message should be visible");
552 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
553 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
555 info("Addon 7");
556 addon = items["Test add-on 7"];
557 addon.parentNode.ensureElementIsVisible(addon);
558 is(get_node(addon, "name").value, "Test add-on 7", "Name should be correct");
560 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
561 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
562 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
563 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
565 is_element_hidden(get_node(addon, "warning"), "Warning message should be visible");
566 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
567 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
568 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
569 is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
570 is(get_node(addon, "pending").textContent, "Test add-on 7 will be disabled after you restart " + gApp + ".", "Pending message should be correct");
572 info("Undoing");
573 EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow);
574 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
575 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
576 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
577 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
579 is_element_visible(get_node(addon, "warning"), "Warning message should be hidden");
580 is(get_node(addon, "warning").textContent, "An important update is available for Test add-on 7.", "Warning message should be correct");
581 is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible");
582 is(get_node(addon, "warning-link").value, "Update Now", "Warning link text should be correct");
583 is(get_node(addon, "warning-link").href, gPluginURL, "Warning link should be correct");
584 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
585 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
586 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
588 run_next_test();
589 });
590 });
591 });
593 // Check the add-ons are now in the right state
594 add_test(function() {
595 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
596 "addon2@tests.mozilla.org",
597 "addon4@tests.mozilla.org"],
598 function([a1, a2, a4]) {
599 is(a1.pendingOperations, 0, "Add-on 1 should not have any pending operations");
600 is(a2.pendingOperations, 0, "Add-on 1 should not have any pending operations");
601 is(a4.pendingOperations, 0, "Add-on 1 should not have any pending operations");
603 run_next_test();
604 });
605 });
607 // Check that upgrades with onExternalInstall take effect immediately
608 add_test(function() {
609 gProvider.createAddons([{
610 id: "addon1@tests.mozilla.org",
611 name: "Test add-on replacement",
612 version: "2.0",
613 description: "A test add-on with a new description",
614 updateDate: gDate,
615 operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE
616 }]);
618 let items = get_test_items();
619 is(Object.keys(items).length, 9, "Should be nine add-ons installed");
621 let addon = items["Test add-on replacement"];
622 addon.parentNode.ensureElementIsVisible(addon);
623 is(get_node(addon, "name").value, "Test add-on replacement", "Name should be correct");
624 is_element_visible(get_node(addon, "version"), "Version should be visible");
625 is(get_node(addon, "version").value, "2.0", "Version should be correct");
626 is_element_visible(get_node(addon, "description"), "Description should be visible");
627 is(get_node(addon, "description").value, "A test add-on with a new description", "Description should be correct");
628 is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
629 is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
630 is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct");
632 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
633 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
634 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
635 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
637 is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
638 is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
639 is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
640 is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
641 is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
643 run_next_test();
644 });
646 // Check that focus changes correctly move around the selected list item
647 add_test(function() {
648 function is_node_in_list(aNode) {
649 var list = gManagerWindow.document.getElementById("addon-list");
651 while (aNode && aNode != list)
652 aNode = aNode.parentNode;
654 if (aNode)
655 return true;
656 return false;
657 }
659 // Ignore the OSX full keyboard access setting
660 Services.prefs.setBoolPref("accessibility.tabfocus_applies_to_xul", false);
662 let items = get_test_items();
664 var fm = Cc["@mozilla.org/focus-manager;1"].
665 getService(Ci.nsIFocusManager);
667 let addon = items["Test add-on 6"];
668 EventUtils.synthesizeMouseAtCenter(addon, { }, gManagerWindow);
669 is(fm.focusedElement, addon.parentNode, "Focus should have moved to the list");
671 EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
672 is(fm.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button");
674 EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
675 is(fm.focusedElement, get_node(addon, "disable-btn"), "Focus should have moved to the disable button");
677 EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
678 is(fm.focusedElement, get_node(addon, "remove-btn"), "Focus should have moved to the remove button");
680 EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
681 ok(!is_node_in_list(fm.focusedElement), "Focus should be outside the list");
683 EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
684 is(fm.focusedElement, get_node(addon, "remove-btn"), "Focus should have moved to the remove button");
686 EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
687 EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
688 is(fm.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button");
690 EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
691 is(fm.focusedElement, addon.parentNode, "Focus should have moved to the list");
693 EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
694 ok(!is_node_in_list(fm.focusedElement), "Focus should be outside the list");
696 try {
697 Services.prefs.clearUserPref("accessibility.tabfocus_applies_to_xul");
698 }
699 catch (e) { }
701 run_next_test();
702 });
705 add_test(function() {
706 info("Enabling lightweight theme");
707 LightweightThemeManager.currentTheme = gLWTheme;
709 gManagerWindow.loadView("addons://list/theme");
710 wait_for_view_load(gManagerWindow, function() {
711 var addon = get_addon_element(gManagerWindow, "4@personas.mozilla.org");
713 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
714 is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
715 is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
716 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
718 info("Disabling lightweight theme");
719 LightweightThemeManager.currentTheme = null;
721 is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
722 is_element_visible(get_node(addon, "enable-btn"), "Enable button should be hidden");
723 is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be visible");
724 is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
726 AddonManager.getAddonByID("4@personas.mozilla.org", function(aAddon) {
727 aAddon.uninstall();
728 run_next_test();
729 });
730 });
731 });
733 // Check that onPropertyChanges for appDisabled updates the UI
734 add_test(function() {
735 info("Checking that onPropertyChanges for appDisabled updates the UI");
737 AddonManager.getAddonByID("addon2@tests.mozilla.org", function(aAddon) {
738 aAddon.userDisabled = true;
739 aAddon.isCompatible = true;
740 aAddon.appDisabled = false;
742 gManagerWindow.loadView("addons://list/extension");
743 wait_for_view_load(gManagerWindow, function() {
744 var el = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org");
746 is(el.getAttribute("active"), "false", "Addon should not be marked as active");
747 is_element_hidden(get_node(el, "warning"), "Warning message should not be visible");
749 info("Making addon incompatible and appDisabled");
750 aAddon.isCompatible = false;
751 aAddon.appDisabled = true;
753 is(el.getAttribute("active"), "false", "Addon should not be marked as active");
754 is_element_visible(get_node(el, "warning"), "Warning message should be visible");
755 is(get_node(el, "warning").textContent, "Test add-on 2 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct");
757 run_next_test();
758 });
759 });
760 });