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 // Bug 591465 - Context menu of add-ons miss context related state change entries
8 let tempScope = {};
9 Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", tempScope);
10 let LightweightThemeManager = tempScope.LightweightThemeManager;
13 const PREF_GETADDONS_MAXRESULTS = "extensions.getAddons.maxResults";
14 const PREF_GETADDONS_GETSEARCHRESULTS = "extensions.getAddons.search.url";
15 const SEARCH_URL = TESTROOT + "browser_bug591465.xml";
16 const SEARCH_QUERY = "SEARCH";
18 var gManagerWindow;
19 var gProvider;
20 var gContextMenu;
21 var gLWTheme = {
22 id: "4",
23 version: "1",
24 name: "Bling",
25 description: "SO MUCH BLING!",
26 author: "Pixel Pusher",
27 homepageURL: "http://mochi.test:8888/data/index.html",
28 headerURL: "http://mochi.test:8888/data/header.png",
29 footerURL: "http://mochi.test:8888/data/footer.png",
30 previewURL: "http://mochi.test:8888/data/preview.png",
31 iconURL: "http://mochi.test:8888/data/icon.png"
32 };
35 function test() {
36 waitForExplicitFinish();
38 gProvider = new MockProvider();
40 gProvider.createAddons([{
41 id: "addon1@tests.mozilla.org",
42 name: "addon 1",
43 version: "1.0"
44 }, {
45 id: "addon2@tests.mozilla.org",
46 name: "addon 2",
47 version: "1.0",
48 _userDisabled: true
49 }, {
50 id: "theme1@tests.mozilla.org",
51 name: "theme 1",
52 version: "1.0",
53 type: "theme"
54 }, {
55 id: "theme2@tests.mozilla.org",
56 name: "theme 2",
57 version: "1.0",
58 type: "theme",
59 _userDisabled: true
60 }, {
61 id: "theme3@tests.mozilla.org",
62 name: "theme 3",
63 version: "1.0",
64 type: "theme",
65 permissions: 0
66 }]);
69 open_manager("addons://list/extension", function(aWindow) {
70 gManagerWindow = aWindow;
71 gContextMenu = aWindow.document.getElementById("addonitem-popup");
72 run_next_test();
73 });
74 }
77 function end_test() {
78 close_manager(gManagerWindow, finish);
79 }
82 function check_contextmenu(aIsTheme, aIsEnabled, aIsRemote, aIsDetails, aIsSingleItemCase) {
83 if (aIsTheme || aIsEnabled || aIsRemote)
84 is_element_hidden(gManagerWindow.document.getElementById("menuitem_enableItem"),
85 "'Enable' should be hidden");
86 else
87 is_element_visible(gManagerWindow.document.getElementById("menuitem_enableItem"),
88 "'Enable' should be visible");
90 if (aIsTheme || !aIsEnabled || aIsRemote)
91 is_element_hidden(gManagerWindow.document.getElementById("menuitem_disableItem"),
92 "'Disable' should be hidden");
93 else
94 is_element_visible(gManagerWindow.document.getElementById("menuitem_disableItem"),
95 "'Disable' should be visible");
97 if (!aIsTheme || aIsEnabled || aIsRemote || aIsSingleItemCase)
98 is_element_hidden(gManagerWindow.document.getElementById("menuitem_enableTheme"),
99 "'Wear Theme' should be hidden");
100 else
101 is_element_visible(gManagerWindow.document.getElementById("menuitem_enableTheme"),
102 "'Wear Theme' should be visible");
104 if (!aIsTheme || !aIsEnabled || aIsRemote || aIsSingleItemCase)
105 is_element_hidden(gManagerWindow.document.getElementById("menuitem_disableTheme"),
106 "'Stop Wearing Theme' should be hidden");
107 else
108 is_element_visible(gManagerWindow.document.getElementById("menuitem_disableTheme"),
109 "'Stop Wearing Theme' should be visible");
111 if (aIsRemote)
112 is_element_visible(gManagerWindow.document.getElementById("menuitem_installItem"),
113 "'Install' should be visible");
114 else
115 is_element_hidden(gManagerWindow.document.getElementById("menuitem_installItem"),
116 "'Install' should be hidden");
118 if (aIsDetails)
119 is_element_hidden(gManagerWindow.document.getElementById("menuitem_showDetails"),
120 "'Show More Information' should be hidden in details view");
121 else
122 is_element_visible(gManagerWindow.document.getElementById("menuitem_showDetails"),
123 "'Show More Information' should be visible in list view");
125 if (aIsSingleItemCase)
126 is_element_hidden(gManagerWindow.document.getElementById("addonitem-menuseparator"),
127 "Menu separator should be hidden with only one menu item");
128 else
129 is_element_visible(gManagerWindow.document.getElementById("addonitem-menuseparator"),
130 "Menu separator should be visible with multiple menu items");
132 }
135 add_test(function() {
136 var el = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org");
137 isnot(el, null, "Should have found addon element");
139 gContextMenu.addEventListener("popupshown", function() {
140 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
142 check_contextmenu(false, true, false, false, false);
144 gContextMenu.hidePopup();
145 run_next_test();
146 }, false);
148 info("Opening context menu on enabled extension item");
149 el.parentNode.ensureElementIsVisible(el);
150 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
151 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
152 });
154 add_test(function() {
155 var el = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org");
156 isnot(el, null, "Should have found addon element");
157 el.mAddon.userDisabled = true;
159 gContextMenu.addEventListener("popupshown", function() {
160 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
162 check_contextmenu(false, false, false, false, false);
164 gContextMenu.hidePopup();
165 run_next_test();
166 }, false);
168 info("Opening context menu on newly disabled extension item");
169 el.parentNode.ensureElementIsVisible(el);
170 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
171 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
172 });
174 add_test(function() {
175 var el = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org");
176 isnot(el, null, "Should have found addon element");
177 el.mAddon.userDisabled = false;
179 gContextMenu.addEventListener("popupshown", function() {
180 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
182 check_contextmenu(false, true, false, false, false);
184 gContextMenu.hidePopup();
185 run_next_test();
186 }, false);
188 info("Opening context menu on newly enabled extension item");
189 el.parentNode.ensureElementIsVisible(el);
190 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
191 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
192 });
194 add_test(function() {
195 var el = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org");
197 gContextMenu.addEventListener("popupshown", function() {
198 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
200 check_contextmenu(false, false, false, false, false);
202 gContextMenu.hidePopup();
203 run_next_test();
204 }, false);
206 info("Opening context menu on disabled extension item");
207 el.parentNode.ensureElementIsVisible(el);
208 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
209 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
210 });
213 add_test(function() {
214 gManagerWindow.loadView("addons://list/theme");
215 wait_for_view_load(gManagerWindow, function() {
216 var el = get_addon_element(gManagerWindow, "theme1@tests.mozilla.org");
218 gContextMenu.addEventListener("popupshown", function() {
219 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
221 check_contextmenu(true, true, false, false, false);
223 gContextMenu.hidePopup();
224 run_next_test();
225 }, false);
227 info("Opening context menu on enabled theme item");
228 el.parentNode.ensureElementIsVisible(el);
229 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
230 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
231 });
232 });
235 add_test(function() {
236 var el = get_addon_element(gManagerWindow, "theme2@tests.mozilla.org");
238 gContextMenu.addEventListener("popupshown", function() {
239 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
241 check_contextmenu(true, false, false, false, false);
243 gContextMenu.hidePopup();
244 run_next_test();
245 }, false);
247 info("Opening context menu on disabled theme item");
248 el.parentNode.ensureElementIsVisible(el);
249 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
250 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
251 });
254 add_test(function() {
255 LightweightThemeManager.currentTheme = gLWTheme;
257 var el = get_addon_element(gManagerWindow, "4@personas.mozilla.org");
259 gContextMenu.addEventListener("popupshown", function() {
260 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
262 check_contextmenu(true, true, false, false, false);
264 gContextMenu.hidePopup();
265 run_next_test();
266 }, false);
268 info("Opening context menu on enabled LW theme item");
269 el.parentNode.ensureElementIsVisible(el);
270 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
271 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
272 });
275 add_test(function() {
276 LightweightThemeManager.currentTheme = null;
278 var el = get_addon_element(gManagerWindow, "4@personas.mozilla.org");
280 gContextMenu.addEventListener("popupshown", function() {
281 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
283 check_contextmenu(true, false, false, false, false);
285 gContextMenu.hidePopup();
286 run_next_test();
287 }, false);
289 info("Opening context menu on disabled LW theme item");
290 el.parentNode.ensureElementIsVisible(el);
291 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
292 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
293 });
296 add_test(function() {
297 LightweightThemeManager.currentTheme = gLWTheme;
299 gManagerWindow.loadView("addons://detail/4@personas.mozilla.org");
300 wait_for_view_load(gManagerWindow, function() {
302 gContextMenu.addEventListener("popupshown", function() {
303 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
305 check_contextmenu(true, true, false, true, false);
307 gContextMenu.hidePopup();
308 run_next_test();
309 }, false);
311 info("Opening context menu on enabled LW theme, in detail view");
312 var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container");
313 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
314 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
315 });
316 });
319 add_test(function() {
320 LightweightThemeManager.currentTheme = null;
322 gManagerWindow.loadView("addons://detail/4@personas.mozilla.org");
323 wait_for_view_load(gManagerWindow, function() {
325 gContextMenu.addEventListener("popupshown", function() {
326 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
328 check_contextmenu(true, false, false, true, false);
330 gContextMenu.hidePopup();
332 AddonManager.getAddonByID("4@personas.mozilla.org", function(aAddon) {
333 aAddon.uninstall();
334 run_next_test();
335 });
336 }, false);
338 info("Opening context menu on disabled LW theme, in detail view");
339 var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container");
340 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
341 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
342 });
343 });
346 add_test(function() {
347 gManagerWindow.loadView("addons://detail/addon1@tests.mozilla.org");
348 wait_for_view_load(gManagerWindow, function() {
350 gContextMenu.addEventListener("popupshown", function() {
351 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
353 check_contextmenu(false, true, false, true, false);
355 gContextMenu.hidePopup();
356 run_next_test();
357 }, false);
359 info("Opening context menu on enabled extension, in detail view");
360 var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container");
361 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
362 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
363 });
364 });
367 add_test(function() {
368 gManagerWindow.loadView("addons://detail/addon2@tests.mozilla.org");
369 wait_for_view_load(gManagerWindow, function() {
371 gContextMenu.addEventListener("popupshown", function() {
372 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
374 check_contextmenu(false, false, false, true, false);
376 gContextMenu.hidePopup();
377 run_next_test();
378 }, false);
380 info("Opening context menu on disabled extension, in detail view");
381 var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container");
382 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
383 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
384 });
385 });
388 add_test(function() {
389 gManagerWindow.loadView("addons://detail/theme1@tests.mozilla.org");
390 wait_for_view_load(gManagerWindow, function() {
392 gContextMenu.addEventListener("popupshown", function() {
393 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
395 check_contextmenu(true, true, false, true, false);
397 gContextMenu.hidePopup();
398 run_next_test();
399 }, false);
401 info("Opening context menu on enabled theme, in detail view");
402 var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container");
403 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
404 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
405 });
406 });
409 add_test(function() {
410 gManagerWindow.loadView("addons://detail/theme2@tests.mozilla.org");
411 wait_for_view_load(gManagerWindow, function() {
413 gContextMenu.addEventListener("popupshown", function() {
414 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
416 check_contextmenu(true, false, false, true, false);
418 gContextMenu.hidePopup();
419 run_next_test();
420 }, false);
422 info("Opening context menu on disabled theme, in detail view");
423 var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container");
424 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
425 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
426 });
427 });
429 add_test(function() {
430 gManagerWindow.loadView("addons://detail/theme3@tests.mozilla.org");
431 wait_for_view_load(gManagerWindow, function() {
433 gContextMenu.addEventListener("popupshown", function() {
434 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
436 check_contextmenu(true, true, false, true, true);
438 gContextMenu.hidePopup();
439 run_next_test();
440 }, false);
442 info("Opening context menu with single menu item on enabled theme, in detail view");
443 var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container");
444 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
445 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
446 });
447 });
449 add_test(function() {
450 info("Searching for remote addons");
452 Services.prefs.setCharPref(PREF_GETADDONS_GETSEARCHRESULTS, SEARCH_URL);
453 Services.prefs.setIntPref(PREF_SEARCH_MAXRESULTS, 15);
455 var searchBox = gManagerWindow.document.getElementById("header-search");
456 searchBox.value = SEARCH_QUERY;
458 EventUtils.synthesizeMouseAtCenter(searchBox, { }, gManagerWindow);
459 EventUtils.synthesizeKey("VK_RETURN", { }, gManagerWindow);
461 wait_for_view_load(gManagerWindow, function() {
462 var filter = gManagerWindow.document.getElementById("search-filter-remote");
463 EventUtils.synthesizeMouseAtCenter(filter, { }, gManagerWindow);
464 executeSoon(function() {
466 var el = get_addon_element(gManagerWindow, "remote1@tests.mozilla.org");
468 gContextMenu.addEventListener("popupshown", function() {
469 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
471 check_contextmenu(false, false, true, false, false);
473 gContextMenu.hidePopup();
474 run_next_test();
475 }, false);
477 info("Opening context menu on remote extension item");
478 el.parentNode.ensureElementIsVisible(el);
479 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
480 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
482 });
483 });
484 });
487 add_test(function() {
488 gManagerWindow.loadView("addons://detail/remote1@tests.mozilla.org");
489 wait_for_view_load(gManagerWindow, function() {
491 gContextMenu.addEventListener("popupshown", function() {
492 gContextMenu.removeEventListener("popupshown", arguments.callee, false);
494 check_contextmenu(false, false, true, true, false);
496 gContextMenu.hidePopup();
498 // Delete the created install
499 AddonManager.getAllInstalls(function(aInstalls) {
500 is(aInstalls.length, 1, "Should be one available install");
501 aInstalls[0].cancel();
503 run_next_test();
504 });
505 }, false);
507 info("Opening context menu on remote extension, in detail view");
508 var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container");
509 EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow);
510 EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow);
511 });
512 });