1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/browser/browser_bug591465.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,512 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.6 + */ 1.7 + 1.8 +// Bug 591465 - Context menu of add-ons miss context related state change entries 1.9 + 1.10 + 1.11 +let tempScope = {}; 1.12 +Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", tempScope); 1.13 +let LightweightThemeManager = tempScope.LightweightThemeManager; 1.14 + 1.15 + 1.16 +const PREF_GETADDONS_MAXRESULTS = "extensions.getAddons.maxResults"; 1.17 +const PREF_GETADDONS_GETSEARCHRESULTS = "extensions.getAddons.search.url"; 1.18 +const SEARCH_URL = TESTROOT + "browser_bug591465.xml"; 1.19 +const SEARCH_QUERY = "SEARCH"; 1.20 + 1.21 +var gManagerWindow; 1.22 +var gProvider; 1.23 +var gContextMenu; 1.24 +var gLWTheme = { 1.25 + id: "4", 1.26 + version: "1", 1.27 + name: "Bling", 1.28 + description: "SO MUCH BLING!", 1.29 + author: "Pixel Pusher", 1.30 + homepageURL: "http://mochi.test:8888/data/index.html", 1.31 + headerURL: "http://mochi.test:8888/data/header.png", 1.32 + footerURL: "http://mochi.test:8888/data/footer.png", 1.33 + previewURL: "http://mochi.test:8888/data/preview.png", 1.34 + iconURL: "http://mochi.test:8888/data/icon.png" 1.35 + }; 1.36 + 1.37 + 1.38 +function test() { 1.39 + waitForExplicitFinish(); 1.40 + 1.41 + gProvider = new MockProvider(); 1.42 + 1.43 + gProvider.createAddons([{ 1.44 + id: "addon1@tests.mozilla.org", 1.45 + name: "addon 1", 1.46 + version: "1.0" 1.47 + }, { 1.48 + id: "addon2@tests.mozilla.org", 1.49 + name: "addon 2", 1.50 + version: "1.0", 1.51 + _userDisabled: true 1.52 + }, { 1.53 + id: "theme1@tests.mozilla.org", 1.54 + name: "theme 1", 1.55 + version: "1.0", 1.56 + type: "theme" 1.57 + }, { 1.58 + id: "theme2@tests.mozilla.org", 1.59 + name: "theme 2", 1.60 + version: "1.0", 1.61 + type: "theme", 1.62 + _userDisabled: true 1.63 + }, { 1.64 + id: "theme3@tests.mozilla.org", 1.65 + name: "theme 3", 1.66 + version: "1.0", 1.67 + type: "theme", 1.68 + permissions: 0 1.69 + }]); 1.70 + 1.71 + 1.72 + open_manager("addons://list/extension", function(aWindow) { 1.73 + gManagerWindow = aWindow; 1.74 + gContextMenu = aWindow.document.getElementById("addonitem-popup"); 1.75 + run_next_test(); 1.76 + }); 1.77 +} 1.78 + 1.79 + 1.80 +function end_test() { 1.81 + close_manager(gManagerWindow, finish); 1.82 +} 1.83 + 1.84 + 1.85 +function check_contextmenu(aIsTheme, aIsEnabled, aIsRemote, aIsDetails, aIsSingleItemCase) { 1.86 + if (aIsTheme || aIsEnabled || aIsRemote) 1.87 + is_element_hidden(gManagerWindow.document.getElementById("menuitem_enableItem"), 1.88 + "'Enable' should be hidden"); 1.89 + else 1.90 + is_element_visible(gManagerWindow.document.getElementById("menuitem_enableItem"), 1.91 + "'Enable' should be visible"); 1.92 + 1.93 + if (aIsTheme || !aIsEnabled || aIsRemote) 1.94 + is_element_hidden(gManagerWindow.document.getElementById("menuitem_disableItem"), 1.95 + "'Disable' should be hidden"); 1.96 + else 1.97 + is_element_visible(gManagerWindow.document.getElementById("menuitem_disableItem"), 1.98 + "'Disable' should be visible"); 1.99 + 1.100 + if (!aIsTheme || aIsEnabled || aIsRemote || aIsSingleItemCase) 1.101 + is_element_hidden(gManagerWindow.document.getElementById("menuitem_enableTheme"), 1.102 + "'Wear Theme' should be hidden"); 1.103 + else 1.104 + is_element_visible(gManagerWindow.document.getElementById("menuitem_enableTheme"), 1.105 + "'Wear Theme' should be visible"); 1.106 + 1.107 + if (!aIsTheme || !aIsEnabled || aIsRemote || aIsSingleItemCase) 1.108 + is_element_hidden(gManagerWindow.document.getElementById("menuitem_disableTheme"), 1.109 + "'Stop Wearing Theme' should be hidden"); 1.110 + else 1.111 + is_element_visible(gManagerWindow.document.getElementById("menuitem_disableTheme"), 1.112 + "'Stop Wearing Theme' should be visible"); 1.113 + 1.114 + if (aIsRemote) 1.115 + is_element_visible(gManagerWindow.document.getElementById("menuitem_installItem"), 1.116 + "'Install' should be visible"); 1.117 + else 1.118 + is_element_hidden(gManagerWindow.document.getElementById("menuitem_installItem"), 1.119 + "'Install' should be hidden"); 1.120 + 1.121 + if (aIsDetails) 1.122 + is_element_hidden(gManagerWindow.document.getElementById("menuitem_showDetails"), 1.123 + "'Show More Information' should be hidden in details view"); 1.124 + else 1.125 + is_element_visible(gManagerWindow.document.getElementById("menuitem_showDetails"), 1.126 + "'Show More Information' should be visible in list view"); 1.127 + 1.128 + if (aIsSingleItemCase) 1.129 + is_element_hidden(gManagerWindow.document.getElementById("addonitem-menuseparator"), 1.130 + "Menu separator should be hidden with only one menu item"); 1.131 + else 1.132 + is_element_visible(gManagerWindow.document.getElementById("addonitem-menuseparator"), 1.133 + "Menu separator should be visible with multiple menu items"); 1.134 + 1.135 +} 1.136 + 1.137 + 1.138 +add_test(function() { 1.139 + var el = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org"); 1.140 + isnot(el, null, "Should have found addon element"); 1.141 + 1.142 + gContextMenu.addEventListener("popupshown", function() { 1.143 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.144 + 1.145 + check_contextmenu(false, true, false, false, false); 1.146 + 1.147 + gContextMenu.hidePopup(); 1.148 + run_next_test(); 1.149 + }, false); 1.150 + 1.151 + info("Opening context menu on enabled extension item"); 1.152 + el.parentNode.ensureElementIsVisible(el); 1.153 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.154 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.155 +}); 1.156 + 1.157 +add_test(function() { 1.158 + var el = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org"); 1.159 + isnot(el, null, "Should have found addon element"); 1.160 + el.mAddon.userDisabled = true; 1.161 + 1.162 + gContextMenu.addEventListener("popupshown", function() { 1.163 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.164 + 1.165 + check_contextmenu(false, false, false, false, false); 1.166 + 1.167 + gContextMenu.hidePopup(); 1.168 + run_next_test(); 1.169 + }, false); 1.170 + 1.171 + info("Opening context menu on newly disabled extension item"); 1.172 + el.parentNode.ensureElementIsVisible(el); 1.173 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.174 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.175 +}); 1.176 + 1.177 +add_test(function() { 1.178 + var el = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org"); 1.179 + isnot(el, null, "Should have found addon element"); 1.180 + el.mAddon.userDisabled = false; 1.181 + 1.182 + gContextMenu.addEventListener("popupshown", function() { 1.183 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.184 + 1.185 + check_contextmenu(false, true, false, false, false); 1.186 + 1.187 + gContextMenu.hidePopup(); 1.188 + run_next_test(); 1.189 + }, false); 1.190 + 1.191 + info("Opening context menu on newly enabled extension item"); 1.192 + el.parentNode.ensureElementIsVisible(el); 1.193 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.194 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.195 +}); 1.196 + 1.197 +add_test(function() { 1.198 + var el = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org"); 1.199 + 1.200 + gContextMenu.addEventListener("popupshown", function() { 1.201 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.202 + 1.203 + check_contextmenu(false, false, false, false, false); 1.204 + 1.205 + gContextMenu.hidePopup(); 1.206 + run_next_test(); 1.207 + }, false); 1.208 + 1.209 + info("Opening context menu on disabled extension item"); 1.210 + el.parentNode.ensureElementIsVisible(el); 1.211 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.212 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.213 +}); 1.214 + 1.215 + 1.216 +add_test(function() { 1.217 + gManagerWindow.loadView("addons://list/theme"); 1.218 + wait_for_view_load(gManagerWindow, function() { 1.219 + var el = get_addon_element(gManagerWindow, "theme1@tests.mozilla.org"); 1.220 + 1.221 + gContextMenu.addEventListener("popupshown", function() { 1.222 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.223 + 1.224 + check_contextmenu(true, true, false, false, false); 1.225 + 1.226 + gContextMenu.hidePopup(); 1.227 + run_next_test(); 1.228 + }, false); 1.229 + 1.230 + info("Opening context menu on enabled theme item"); 1.231 + el.parentNode.ensureElementIsVisible(el); 1.232 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.233 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.234 + }); 1.235 +}); 1.236 + 1.237 + 1.238 +add_test(function() { 1.239 + var el = get_addon_element(gManagerWindow, "theme2@tests.mozilla.org"); 1.240 + 1.241 + gContextMenu.addEventListener("popupshown", function() { 1.242 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.243 + 1.244 + check_contextmenu(true, false, false, false, false); 1.245 + 1.246 + gContextMenu.hidePopup(); 1.247 + run_next_test(); 1.248 + }, false); 1.249 + 1.250 + info("Opening context menu on disabled theme item"); 1.251 + el.parentNode.ensureElementIsVisible(el); 1.252 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.253 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.254 +}); 1.255 + 1.256 + 1.257 +add_test(function() { 1.258 + LightweightThemeManager.currentTheme = gLWTheme; 1.259 + 1.260 + var el = get_addon_element(gManagerWindow, "4@personas.mozilla.org"); 1.261 + 1.262 + gContextMenu.addEventListener("popupshown", function() { 1.263 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.264 + 1.265 + check_contextmenu(true, true, false, false, false); 1.266 + 1.267 + gContextMenu.hidePopup(); 1.268 + run_next_test(); 1.269 + }, false); 1.270 + 1.271 + info("Opening context menu on enabled LW theme item"); 1.272 + el.parentNode.ensureElementIsVisible(el); 1.273 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.274 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.275 +}); 1.276 + 1.277 + 1.278 +add_test(function() { 1.279 + LightweightThemeManager.currentTheme = null; 1.280 + 1.281 + var el = get_addon_element(gManagerWindow, "4@personas.mozilla.org"); 1.282 + 1.283 + gContextMenu.addEventListener("popupshown", function() { 1.284 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.285 + 1.286 + check_contextmenu(true, false, false, false, false); 1.287 + 1.288 + gContextMenu.hidePopup(); 1.289 + run_next_test(); 1.290 + }, false); 1.291 + 1.292 + info("Opening context menu on disabled LW theme item"); 1.293 + el.parentNode.ensureElementIsVisible(el); 1.294 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.295 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.296 +}); 1.297 + 1.298 + 1.299 +add_test(function() { 1.300 + LightweightThemeManager.currentTheme = gLWTheme; 1.301 + 1.302 + gManagerWindow.loadView("addons://detail/4@personas.mozilla.org"); 1.303 + wait_for_view_load(gManagerWindow, function() { 1.304 + 1.305 + gContextMenu.addEventListener("popupshown", function() { 1.306 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.307 + 1.308 + check_contextmenu(true, true, false, true, false); 1.309 + 1.310 + gContextMenu.hidePopup(); 1.311 + run_next_test(); 1.312 + }, false); 1.313 + 1.314 + info("Opening context menu on enabled LW theme, in detail view"); 1.315 + var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container"); 1.316 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.317 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.318 + }); 1.319 +}); 1.320 + 1.321 + 1.322 +add_test(function() { 1.323 + LightweightThemeManager.currentTheme = null; 1.324 + 1.325 + gManagerWindow.loadView("addons://detail/4@personas.mozilla.org"); 1.326 + wait_for_view_load(gManagerWindow, function() { 1.327 + 1.328 + gContextMenu.addEventListener("popupshown", function() { 1.329 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.330 + 1.331 + check_contextmenu(true, false, false, true, false); 1.332 + 1.333 + gContextMenu.hidePopup(); 1.334 + 1.335 + AddonManager.getAddonByID("4@personas.mozilla.org", function(aAddon) { 1.336 + aAddon.uninstall(); 1.337 + run_next_test(); 1.338 + }); 1.339 + }, false); 1.340 + 1.341 + info("Opening context menu on disabled LW theme, in detail view"); 1.342 + var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container"); 1.343 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.344 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.345 + }); 1.346 +}); 1.347 + 1.348 + 1.349 +add_test(function() { 1.350 + gManagerWindow.loadView("addons://detail/addon1@tests.mozilla.org"); 1.351 + wait_for_view_load(gManagerWindow, function() { 1.352 + 1.353 + gContextMenu.addEventListener("popupshown", function() { 1.354 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.355 + 1.356 + check_contextmenu(false, true, false, true, false); 1.357 + 1.358 + gContextMenu.hidePopup(); 1.359 + run_next_test(); 1.360 + }, false); 1.361 + 1.362 + info("Opening context menu on enabled extension, in detail view"); 1.363 + var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container"); 1.364 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.365 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.366 + }); 1.367 +}); 1.368 + 1.369 + 1.370 +add_test(function() { 1.371 + gManagerWindow.loadView("addons://detail/addon2@tests.mozilla.org"); 1.372 + wait_for_view_load(gManagerWindow, function() { 1.373 + 1.374 + gContextMenu.addEventListener("popupshown", function() { 1.375 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.376 + 1.377 + check_contextmenu(false, false, false, true, false); 1.378 + 1.379 + gContextMenu.hidePopup(); 1.380 + run_next_test(); 1.381 + }, false); 1.382 + 1.383 + info("Opening context menu on disabled extension, in detail view"); 1.384 + var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container"); 1.385 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.386 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.387 + }); 1.388 +}); 1.389 + 1.390 + 1.391 +add_test(function() { 1.392 + gManagerWindow.loadView("addons://detail/theme1@tests.mozilla.org"); 1.393 + wait_for_view_load(gManagerWindow, function() { 1.394 + 1.395 + gContextMenu.addEventListener("popupshown", function() { 1.396 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.397 + 1.398 + check_contextmenu(true, true, false, true, false); 1.399 + 1.400 + gContextMenu.hidePopup(); 1.401 + run_next_test(); 1.402 + }, false); 1.403 + 1.404 + info("Opening context menu on enabled theme, in detail view"); 1.405 + var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container"); 1.406 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.407 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.408 + }); 1.409 +}); 1.410 + 1.411 + 1.412 +add_test(function() { 1.413 + gManagerWindow.loadView("addons://detail/theme2@tests.mozilla.org"); 1.414 + wait_for_view_load(gManagerWindow, function() { 1.415 + 1.416 + gContextMenu.addEventListener("popupshown", function() { 1.417 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.418 + 1.419 + check_contextmenu(true, false, false, true, false); 1.420 + 1.421 + gContextMenu.hidePopup(); 1.422 + run_next_test(); 1.423 + }, false); 1.424 + 1.425 + info("Opening context menu on disabled theme, in detail view"); 1.426 + var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container"); 1.427 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.428 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.429 + }); 1.430 +}); 1.431 + 1.432 +add_test(function() { 1.433 + gManagerWindow.loadView("addons://detail/theme3@tests.mozilla.org"); 1.434 + wait_for_view_load(gManagerWindow, function() { 1.435 + 1.436 + gContextMenu.addEventListener("popupshown", function() { 1.437 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.438 + 1.439 + check_contextmenu(true, true, false, true, true); 1.440 + 1.441 + gContextMenu.hidePopup(); 1.442 + run_next_test(); 1.443 + }, false); 1.444 + 1.445 + info("Opening context menu with single menu item on enabled theme, in detail view"); 1.446 + var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container"); 1.447 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.448 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.449 + }); 1.450 +}); 1.451 + 1.452 +add_test(function() { 1.453 + info("Searching for remote addons"); 1.454 + 1.455 + Services.prefs.setCharPref(PREF_GETADDONS_GETSEARCHRESULTS, SEARCH_URL); 1.456 + Services.prefs.setIntPref(PREF_SEARCH_MAXRESULTS, 15); 1.457 + 1.458 + var searchBox = gManagerWindow.document.getElementById("header-search"); 1.459 + searchBox.value = SEARCH_QUERY; 1.460 + 1.461 + EventUtils.synthesizeMouseAtCenter(searchBox, { }, gManagerWindow); 1.462 + EventUtils.synthesizeKey("VK_RETURN", { }, gManagerWindow); 1.463 + 1.464 + wait_for_view_load(gManagerWindow, function() { 1.465 + var filter = gManagerWindow.document.getElementById("search-filter-remote"); 1.466 + EventUtils.synthesizeMouseAtCenter(filter, { }, gManagerWindow); 1.467 + executeSoon(function() { 1.468 + 1.469 + var el = get_addon_element(gManagerWindow, "remote1@tests.mozilla.org"); 1.470 + 1.471 + gContextMenu.addEventListener("popupshown", function() { 1.472 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.473 + 1.474 + check_contextmenu(false, false, true, false, false); 1.475 + 1.476 + gContextMenu.hidePopup(); 1.477 + run_next_test(); 1.478 + }, false); 1.479 + 1.480 + info("Opening context menu on remote extension item"); 1.481 + el.parentNode.ensureElementIsVisible(el); 1.482 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.483 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.484 + 1.485 + }); 1.486 + }); 1.487 +}); 1.488 + 1.489 + 1.490 +add_test(function() { 1.491 + gManagerWindow.loadView("addons://detail/remote1@tests.mozilla.org"); 1.492 + wait_for_view_load(gManagerWindow, function() { 1.493 + 1.494 + gContextMenu.addEventListener("popupshown", function() { 1.495 + gContextMenu.removeEventListener("popupshown", arguments.callee, false); 1.496 + 1.497 + check_contextmenu(false, false, true, true, false); 1.498 + 1.499 + gContextMenu.hidePopup(); 1.500 + 1.501 + // Delete the created install 1.502 + AddonManager.getAllInstalls(function(aInstalls) { 1.503 + is(aInstalls.length, 1, "Should be one available install"); 1.504 + aInstalls[0].cancel(); 1.505 + 1.506 + run_next_test(); 1.507 + }); 1.508 + }, false); 1.509 + 1.510 + info("Opening context menu on remote extension, in detail view"); 1.511 + var el = gManagerWindow.document.querySelector("#detail-view .detail-view-container"); 1.512 + EventUtils.synthesizeMouse(el, 4, 4, { }, gManagerWindow); 1.513 + EventUtils.synthesizeMouse(el, 4, 4, { type: "contextmenu", button: 2 }, gManagerWindow); 1.514 + }); 1.515 +});