1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/browser/browser_bug562797.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,972 @@ 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 +/** 1.9 + * Tests that history navigation works for the add-ons manager. 1.10 + */ 1.11 + 1.12 +const MAIN_URL = "https://example.com/" + RELATIVE_DIR + "discovery.html"; 1.13 +const SECOND_URL = "https://example.com/" + RELATIVE_DIR + "releaseNotes.xhtml"; 1.14 + 1.15 +var gLoadCompleteCallback = null; 1.16 + 1.17 +var gProgressListener = { 1.18 + onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) { 1.19 + // Only care about the network stop status events 1.20 + if (!(aStateFlags & (Ci.nsIWebProgressListener.STATE_IS_NETWORK)) || 1.21 + !(aStateFlags & (Ci.nsIWebProgressListener.STATE_STOP))) 1.22 + return; 1.23 + 1.24 + if (gLoadCompleteCallback) 1.25 + executeSoon(gLoadCompleteCallback); 1.26 + gLoadCompleteCallback = null; 1.27 + }, 1.28 + 1.29 + onLocationChange: function() { }, 1.30 + onSecurityChange: function() { }, 1.31 + onProgressChange: function() { }, 1.32 + onStatusChange: function() { }, 1.33 + 1.34 + QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, 1.35 + Ci.nsISupportsWeakReference]), 1.36 +}; 1.37 + 1.38 +function waitForLoad(aManager, aCallback) { 1.39 + var browser = aManager.document.getElementById("discover-browser"); 1.40 + browser.addProgressListener(gProgressListener); 1.41 + 1.42 + gLoadCompleteCallback = function() { 1.43 + browser.removeProgressListener(gProgressListener); 1.44 + aCallback(); 1.45 + }; 1.46 +} 1.47 + 1.48 +function clickLink(aManager, aId, aCallback) { 1.49 + waitForLoad(aManager, aCallback); 1.50 + 1.51 + var browser = aManager.document.getElementById("discover-browser"); 1.52 + 1.53 + var link = browser.contentDocument.getElementById(aId); 1.54 + EventUtils.sendMouseEvent({type: "click"}, link); 1.55 +} 1.56 + 1.57 +function test() { 1.58 + requestLongerTimeout(2); 1.59 + 1.60 + waitForExplicitFinish(); 1.61 + 1.62 + Services.prefs.setCharPref(PREF_DISCOVERURL, MAIN_URL); 1.63 + 1.64 + var gProvider = new MockProvider(); 1.65 + gProvider.createAddons([{ 1.66 + id: "test1@tests.mozilla.org", 1.67 + name: "Test add-on 1", 1.68 + description: "foo" 1.69 + }, 1.70 + { 1.71 + id: "test2@tests.mozilla.org", 1.72 + name: "Test add-on 2", 1.73 + description: "bar" 1.74 + }, 1.75 + { 1.76 + id: "test3@tests.mozilla.org", 1.77 + name: "Test add-on 3", 1.78 + type: "theme", 1.79 + description: "bar" 1.80 + }]); 1.81 + 1.82 + run_next_test(); 1.83 +} 1.84 + 1.85 +function end_test() { 1.86 + finish(); 1.87 +} 1.88 + 1.89 +function go_back(aManager) { 1.90 + if (gUseInContentUI) { 1.91 + gBrowser.goBack(); 1.92 + } else { 1.93 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("back-btn"), 1.94 + { }, aManager); 1.95 + } 1.96 +} 1.97 + 1.98 +function go_back_backspace(aManager) { 1.99 + EventUtils.synthesizeKey("VK_BACK_SPACE",{}); 1.100 +} 1.101 + 1.102 +function go_forward_backspace(aManager) { 1.103 + EventUtils.synthesizeKey("VK_BACK_SPACE",{shiftKey: true}); 1.104 +} 1.105 + 1.106 +function go_forward(aManager) { 1.107 + if (gUseInContentUI) { 1.108 + gBrowser.goForward(); 1.109 + } else { 1.110 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("forward-btn"), 1.111 + { }, aManager); 1.112 + } 1.113 +} 1.114 + 1.115 +function check_state(aManager, canGoBack, canGoForward) { 1.116 + var doc = aManager.document; 1.117 + 1.118 + if (gUseInContentUI) { 1.119 + is(gBrowser.canGoBack, canGoBack, "canGoBack should be correct"); 1.120 + is(gBrowser.canGoForward, canGoForward, "canGoForward should be correct"); 1.121 + } 1.122 + 1.123 + if (!is_hidden(doc.getElementById("back-btn"))) { 1.124 + is(!doc.getElementById("back-btn").disabled, canGoBack, "Back button should have the right state"); 1.125 + is(!doc.getElementById("forward-btn").disabled, canGoForward, "Forward button should have the right state"); 1.126 + } 1.127 +} 1.128 + 1.129 +function is_in_list(aManager, view, canGoBack, canGoForward) { 1.130 + var doc = aManager.document; 1.131 + 1.132 + is(doc.getElementById("categories").selectedItem.value, view, "Should be on the right category"); 1.133 + is(doc.getElementById("view-port").selectedPanel.id, "list-view", "Should be on the right view"); 1.134 + 1.135 + check_state(aManager, canGoBack, canGoForward); 1.136 +} 1.137 + 1.138 +function is_in_search(aManager, query, canGoBack, canGoForward) { 1.139 + var doc = aManager.document; 1.140 + 1.141 + is(doc.getElementById("categories").selectedItem.value, "addons://search/", "Should be on the right category"); 1.142 + is(doc.getElementById("view-port").selectedPanel.id, "search-view", "Should be on the right view"); 1.143 + is(doc.getElementById("header-search").value, query, "Should have used the right query"); 1.144 + 1.145 + check_state(aManager, canGoBack, canGoForward); 1.146 +} 1.147 + 1.148 +function is_in_detail(aManager, view, canGoBack, canGoForward) { 1.149 + var doc = aManager.document; 1.150 + 1.151 + is(doc.getElementById("categories").selectedItem.value, view, "Should be on the right category"); 1.152 + is(doc.getElementById("view-port").selectedPanel.id, "detail-view", "Should be on the right view"); 1.153 + 1.154 + check_state(aManager, canGoBack, canGoForward); 1.155 +} 1.156 + 1.157 +function is_in_discovery(aManager, url, canGoBack, canGoForward) { 1.158 + var browser = aManager.document.getElementById("discover-browser"); 1.159 + 1.160 + is(aManager.document.getElementById("discover-view").selectedPanel, browser, 1.161 + "Browser should be visible"); 1.162 + 1.163 + var spec = browser.currentURI.spec; 1.164 + var pos = spec.indexOf("#"); 1.165 + if (pos != -1) 1.166 + spec = spec.substring(0, pos); 1.167 + 1.168 + is(spec, url, "Should have loaded the right url"); 1.169 + 1.170 + check_state(aManager, canGoBack, canGoForward); 1.171 +} 1.172 + 1.173 +function double_click_addon_element(aManager, aId) { 1.174 + var addon = get_addon_element(aManager, aId); 1.175 + addon.parentNode.ensureElementIsVisible(addon); 1.176 + EventUtils.synthesizeMouseAtCenter(addon, { clickCount: 1 }, aManager); 1.177 + EventUtils.synthesizeMouseAtCenter(addon, { clickCount: 2 }, aManager); 1.178 +} 1.179 + 1.180 +// Tests simple forward and back navigation and that the right heading and 1.181 +// category is selected 1.182 +add_test(function() { 1.183 + open_manager("addons://list/extension", function(aManager) { 1.184 + info("Part 1"); 1.185 + is_in_list(aManager, "addons://list/extension", false, false); 1.186 + 1.187 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); 1.188 + 1.189 + wait_for_view_load(aManager, function(aManager) { 1.190 + info("Part 2"); 1.191 + is_in_list(aManager, "addons://list/plugin", true, false); 1.192 + 1.193 + go_back(aManager); 1.194 + 1.195 + wait_for_view_load(aManager, function(aManager) { 1.196 + info("Part 3"); 1.197 + is_in_list(aManager, "addons://list/extension", false, true); 1.198 + 1.199 + go_forward(aManager); 1.200 + 1.201 + wait_for_view_load(aManager, function(aManager) { 1.202 + info("Part 4"); 1.203 + is_in_list(aManager, "addons://list/plugin", true, false); 1.204 + 1.205 + go_back(aManager); 1.206 + 1.207 + wait_for_view_load(aManager, function(aManager) { 1.208 + info("Part 5"); 1.209 + is_in_list(aManager, "addons://list/extension", false, true); 1.210 + 1.211 + double_click_addon_element(aManager, "test1@tests.mozilla.org"); 1.212 + 1.213 + wait_for_view_load(aManager, function(aManager) { 1.214 + info("Part 6"); 1.215 + is_in_detail(aManager, "addons://list/extension", true, false); 1.216 + 1.217 + go_back(aManager); 1.218 + 1.219 + wait_for_view_load(aManager, function(aManager) { 1.220 + info("Part 7"); 1.221 + is_in_list(aManager, "addons://list/extension", false, true); 1.222 + 1.223 + close_manager(aManager, run_next_test); 1.224 + }); 1.225 + }); 1.226 + }); 1.227 + }); 1.228 + }); 1.229 + }); 1.230 + }); 1.231 +}); 1.232 + 1.233 +// Tests that browsing to the add-ons manager from a website and going back works 1.234 +// Only relevant for in-content UI 1.235 +add_test(function() { 1.236 + if (!gUseInContentUI) { 1.237 + run_next_test(); 1.238 + return; 1.239 + } 1.240 + 1.241 + info("Part 1"); 1.242 + gBrowser.selectedTab = gBrowser.addTab(); 1.243 + gBrowser.loadURI("http://example.com/"); 1.244 + gBrowser.addEventListener("pageshow", function(event) { 1.245 + if (event.target.location != "http://example.com/") 1.246 + return; 1.247 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.248 + 1.249 + //Must let the load complete for it to go into the session history 1.250 + executeSoon(function() { 1.251 + info("Part 2"); 1.252 + ok(!gBrowser.canGoBack, "Should not be able to go back"); 1.253 + ok(!gBrowser.canGoForward, "Should not be able to go forward"); 1.254 + 1.255 + gBrowser.loadURI("about:addons"); 1.256 + gBrowser.addEventListener("pageshow", function(event) { 1.257 + if (event.target.location != "about:addons") 1.258 + return; 1.259 + gBrowser.removeEventListener("pageshow", arguments.callee, true); 1.260 + 1.261 + wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { 1.262 + info("Part 3"); 1.263 + is_in_list(aManager, "addons://list/extension", true, false); 1.264 + 1.265 + go_back(aManager); 1.266 + gBrowser.addEventListener("pageshow", function() { 1.267 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.268 + info("Part 4"); 1.269 + is(gBrowser.currentURI.spec, "http://example.com/", "Should be showing the webpage"); 1.270 + ok(!gBrowser.canGoBack, "Should not be able to go back"); 1.271 + ok(gBrowser.canGoForward, "Should be able to go forward"); 1.272 + 1.273 + go_forward(aManager); 1.274 + gBrowser.addEventListener("pageshow", function() { 1.275 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.276 + wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { 1.277 + info("Part 5"); 1.278 + is_in_list(aManager, "addons://list/extension", true, false); 1.279 + 1.280 + close_manager(aManager, run_next_test); 1.281 + }); 1.282 + }, false); 1.283 + }, false); 1.284 + }); 1.285 + }, true); 1.286 + }); 1.287 + }, false); 1.288 +}); 1.289 + 1.290 +// Tests simple forward and back navigation and that the right heading and 1.291 +// category is selected -- Keyboard navigation [Bug 565359] 1.292 +// Only add the test if the backspace key navigates back and addon-manager 1.293 +// loaded in a tab 1.294 +add_test(function() { 1.295 + 1.296 + if (!gUseInContentUI || (Services.prefs.getIntPref("browser.backspace_action") != 0)) { 1.297 + run_next_test(); 1.298 + return; 1.299 + } 1.300 + 1.301 + open_manager("addons://list/extension", function(aManager) { 1.302 + info("Part 1"); 1.303 + is_in_list(aManager, "addons://list/extension", false, false); 1.304 + 1.305 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); 1.306 + 1.307 + wait_for_view_load(aManager, function(aManager) { 1.308 + info("Part 2"); 1.309 + is_in_list(aManager, "addons://list/plugin", true, false); 1.310 + 1.311 + go_back_backspace(aManager); 1.312 + 1.313 + wait_for_view_load(aManager, function(aManager) { 1.314 + info("Part 3"); 1.315 + is_in_list(aManager, "addons://list/extension", false, true); 1.316 + 1.317 + go_forward_backspace(aManager); 1.318 + 1.319 + wait_for_view_load(aManager, function(aManager) { 1.320 + info("Part 4"); 1.321 + is_in_list(aManager, "addons://list/plugin", true, false); 1.322 + 1.323 + go_back_backspace(aManager); 1.324 + 1.325 + wait_for_view_load(aManager, function(aManager) { 1.326 + info("Part 5"); 1.327 + is_in_list(aManager, "addons://list/extension", false, true); 1.328 + 1.329 + double_click_addon_element(aManager, "test1@tests.mozilla.org"); 1.330 + 1.331 + wait_for_view_load(aManager, function(aManager) { 1.332 + info("Part 6"); 1.333 + is_in_detail(aManager, "addons://list/extension", true, false); 1.334 + 1.335 + go_back_backspace(aManager); 1.336 + 1.337 + wait_for_view_load(aManager, function(aManager) { 1.338 + info("Part 7"); 1.339 + is_in_list(aManager, "addons://list/extension", false, true); 1.340 + 1.341 + close_manager(aManager, run_next_test); 1.342 + }); 1.343 + }); 1.344 + }); 1.345 + }); 1.346 + }); 1.347 + }); 1.348 + }); 1.349 +}); 1.350 + 1.351 + 1.352 +// Tests that opening a custom first view only stores a single history entry 1.353 +add_test(function() { 1.354 + open_manager("addons://list/plugin", function(aManager) { 1.355 + info("Part 1"); 1.356 + is_in_list(aManager, "addons://list/plugin", false, false); 1.357 + 1.358 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-extension"), { }, aManager); 1.359 + 1.360 + wait_for_view_load(aManager, function(aManager) { 1.361 + info("Part 2"); 1.362 + is_in_list(aManager, "addons://list/extension", true, false); 1.363 + 1.364 + go_back(aManager); 1.365 + 1.366 + wait_for_view_load(aManager, function(aManager) { 1.367 + info("Part 3"); 1.368 + is_in_list(aManager, "addons://list/plugin", false, true); 1.369 + 1.370 + close_manager(aManager, run_next_test); 1.371 + }); 1.372 + }); 1.373 + }); 1.374 +}); 1.375 + 1.376 + 1.377 +// Tests that opening a view while the manager is already open adds a new 1.378 +// history entry 1.379 +add_test(function() { 1.380 + open_manager("addons://list/extension", function(aManager) { 1.381 + info("Part 1"); 1.382 + is_in_list(aManager, "addons://list/extension", false, false); 1.383 + 1.384 + aManager.loadView("addons://list/plugin"); 1.385 + 1.386 + wait_for_view_load(aManager, function(aManager) { 1.387 + info("Part 2"); 1.388 + is_in_list(aManager, "addons://list/plugin", true, false); 1.389 + 1.390 + go_back(aManager); 1.391 + 1.392 + wait_for_view_load(aManager, function(aManager) { 1.393 + info("Part 3"); 1.394 + is_in_list(aManager, "addons://list/extension", false, true); 1.395 + 1.396 + go_forward(aManager); 1.397 + 1.398 + wait_for_view_load(aManager, function(aManager) { 1.399 + info("Part 4"); 1.400 + is_in_list(aManager, "addons://list/plugin", true, false); 1.401 + 1.402 + close_manager(aManager, run_next_test); 1.403 + }); 1.404 + }); 1.405 + }); 1.406 + }); 1.407 +}); 1.408 + 1.409 +// Tests than navigating to a website and then going back returns to the 1.410 +// previous view 1.411 +// Only relevant for in-content UI 1.412 +add_test(function() { 1.413 + if (!gUseInContentUI) { 1.414 + run_next_test(); 1.415 + return; 1.416 + } 1.417 + 1.418 + open_manager("addons://list/plugin", function(aManager) { 1.419 + info("Part 1"); 1.420 + is_in_list(aManager, "addons://list/plugin", false, false); 1.421 + 1.422 + gBrowser.loadURI("http://example.com/"); 1.423 + gBrowser.addEventListener("pageshow", function(event) { 1.424 + if (event.target.location != "http://example.com/") 1.425 + return; 1.426 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.427 + info("Part 2"); 1.428 + 1.429 + executeSoon(function() { 1.430 + ok(gBrowser.canGoBack, "Should be able to go back"); 1.431 + ok(!gBrowser.canGoForward, "Should not be able to go forward"); 1.432 + 1.433 + go_back(aManager); 1.434 + 1.435 + gBrowser.addEventListener("pageshow", function(event) { 1.436 + if (event.target.location != "about:addons") 1.437 + return; 1.438 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.439 + 1.440 + wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { 1.441 + info("Part 3"); 1.442 + is_in_list(aManager, "addons://list/plugin", false, true); 1.443 + 1.444 + go_forward(aManager); 1.445 + gBrowser.addEventListener("pageshow", function(event) { 1.446 + if (event.target.location != "http://example.com/") 1.447 + return; 1.448 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.449 + info("Part 4"); 1.450 + 1.451 + executeSoon(function() { 1.452 + ok(gBrowser.canGoBack, "Should be able to go back"); 1.453 + ok(!gBrowser.canGoForward, "Should not be able to go forward"); 1.454 + 1.455 + go_back(aManager); 1.456 + 1.457 + gBrowser.addEventListener("pageshow", function(event) { 1.458 + if (event.target.location != "about:addons") 1.459 + return; 1.460 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.461 + wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { 1.462 + info("Part 5"); 1.463 + is_in_list(aManager, "addons://list/plugin", false, true); 1.464 + 1.465 + close_manager(aManager, run_next_test); 1.466 + }); 1.467 + }, false); 1.468 + }); 1.469 + }, false); 1.470 + }); 1.471 + }, false); 1.472 + }); 1.473 + }, false); 1.474 + }); 1.475 +}); 1.476 + 1.477 +// Tests that going back to search results works 1.478 +add_test(function() { 1.479 + // Before we open the add-ons manager, we should make sure that no filter 1.480 + // has been set. If one is set, we remove it. 1.481 + // This is for the check below, from bug 611459. 1.482 + let RDF = Cc["@mozilla.org/rdf/rdf-service;1"].getService(Ci.nsIRDFService); 1.483 + let store = RDF.GetDataSource("rdf:local-store"); 1.484 + let filterResource = RDF.GetResource("about:addons#search-filter-radiogroup"); 1.485 + let filterProperty = RDF.GetResource("value"); 1.486 + let filterTarget = store.GetTarget(filterResource, filterProperty, true); 1.487 + 1.488 + if (filterTarget) { 1.489 + is(filterTarget instanceof Ci.nsIRDFLiteral, true, 1.490 + "Filter should be a value"); 1.491 + store.Unassert(filterResource, filterProperty, filterTarget); 1.492 + } 1.493 + 1.494 + open_manager("addons://list/extension", function(aManager) { 1.495 + info("Part 1"); 1.496 + is_in_list(aManager, "addons://list/extension", false, false); 1.497 + 1.498 + var search = aManager.document.getElementById("header-search"); 1.499 + search.focus(); 1.500 + search.value = "bar"; 1.501 + EventUtils.synthesizeKey("VK_RETURN", {}, aManager); 1.502 + 1.503 + wait_for_view_load(aManager, function(aManager) { 1.504 + // Remote search is meant to be checked by default (bug 611459), so we 1.505 + // confirm that and then switch to a local search. 1.506 + var localFilter = aManager.document.getElementById("search-filter-local"); 1.507 + var remoteFilter = aManager.document.getElementById("search-filter-remote"); 1.508 + 1.509 + is(remoteFilter.selected, true, "Remote filter should be set by default"); 1.510 + 1.511 + var list = aManager.document.getElementById("search-list"); 1.512 + list.ensureElementIsVisible(localFilter); 1.513 + EventUtils.synthesizeMouseAtCenter(localFilter, { }, aManager); 1.514 + 1.515 + is(localFilter.selected, true, "Should have changed to local filter"); 1.516 + 1.517 + // Now we continue with the normal test. 1.518 + 1.519 + info("Part 2"); 1.520 + is_in_search(aManager, "bar", true, false); 1.521 + check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]); 1.522 + 1.523 + double_click_addon_element(aManager, "test2@tests.mozilla.org"); 1.524 + 1.525 + wait_for_view_load(aManager, function(aManager) { 1.526 + info("Part 3"); 1.527 + is_in_detail(aManager, "addons://search/", true, false); 1.528 + 1.529 + go_back(aManager); 1.530 + wait_for_view_load(aManager, function(aManager) { 1.531 + info("Part 4"); 1.532 + is_in_search(aManager, "bar", true, true); 1.533 + check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]); 1.534 + 1.535 + go_forward(aManager); 1.536 + wait_for_view_load(aManager, function(aManager) { 1.537 + info("Part 5"); 1.538 + is_in_detail(aManager, "addons://search/", true, false); 1.539 + 1.540 + close_manager(aManager, run_next_test); 1.541 + }); 1.542 + }); 1.543 + }); 1.544 + }); 1.545 + }); 1.546 +}); 1.547 + 1.548 +// Tests that going back from a webpage to a detail view loaded from a search 1.549 +// result works 1.550 +// Only relevant for in-content UI 1.551 +add_test(function() { 1.552 + if (!gUseInContentUI) { 1.553 + run_next_test(); 1.554 + return; 1.555 + } 1.556 + 1.557 + open_manager("addons://list/extension", function(aManager) { 1.558 + info("Part 1"); 1.559 + is_in_list(aManager, "addons://list/extension", false, false); 1.560 + 1.561 + var search = aManager.document.getElementById("header-search"); 1.562 + search.focus(); 1.563 + search.value = "bar"; 1.564 + EventUtils.synthesizeKey("VK_RETURN", {}); 1.565 + 1.566 + wait_for_view_load(aManager, function(aManager) { 1.567 + info("Part 2"); 1.568 + is_in_search(aManager, "bar", true, false); 1.569 + check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]); 1.570 + 1.571 + double_click_addon_element(aManager, "test2@tests.mozilla.org"); 1.572 + 1.573 + wait_for_view_load(aManager, function(aManager) { 1.574 + info("Part 3"); 1.575 + is_in_detail(aManager, "addons://search/", true, false); 1.576 + 1.577 + gBrowser.loadURI("http://example.com/"); 1.578 + gBrowser.addEventListener("pageshow", function(event) { 1.579 + if (event.target.location != "http://example.com/") 1.580 + return; 1.581 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.582 + 1.583 + info("Part 4"); 1.584 + executeSoon(function() { 1.585 + ok(gBrowser.canGoBack, "Should be able to go back"); 1.586 + ok(!gBrowser.canGoForward, "Should not be able to go forward"); 1.587 + 1.588 + go_back(aManager); 1.589 + gBrowser.addEventListener("pageshow", function(event) { 1.590 + if (event.target.location != "about:addons") 1.591 + return; 1.592 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.593 + 1.594 + wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { 1.595 + info("Part 5"); 1.596 + is_in_detail(aManager, "addons://search/", true, true); 1.597 + 1.598 + go_back(aManager); 1.599 + wait_for_view_load(aManager, function(aManager) { 1.600 + info("Part 6"); 1.601 + is_in_search(aManager, "bar", true, true); 1.602 + check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]); 1.603 + 1.604 + close_manager(aManager, run_next_test); 1.605 + }); 1.606 + }); 1.607 + }, false); 1.608 + }); 1.609 + }, false); 1.610 + }); 1.611 + }); 1.612 + }); 1.613 +}); 1.614 + 1.615 +// Tests that refreshing a list view does not affect the history 1.616 +// Only relevant for in-content UI 1.617 +add_test(function() { 1.618 + if (!gUseInContentUI) { 1.619 + run_next_test(); 1.620 + return; 1.621 + } 1.622 + 1.623 + open_manager("addons://list/extension", function(aManager) { 1.624 + info("Part 1"); 1.625 + is_in_list(aManager, "addons://list/extension", false, false); 1.626 + 1.627 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); 1.628 + 1.629 + wait_for_view_load(aManager, function(aManager) { 1.630 + info("Part 2"); 1.631 + is_in_list(aManager, "addons://list/plugin", true, false); 1.632 + 1.633 + gBrowser.reload(); 1.634 + gBrowser.addEventListener("pageshow", function(event) { 1.635 + if (event.target.location != "about:addons") 1.636 + return; 1.637 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.638 + 1.639 + wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { 1.640 + info("Part 3"); 1.641 + is_in_list(aManager, "addons://list/plugin", true, false); 1.642 + 1.643 + go_back(aManager); 1.644 + wait_for_view_load(aManager, function(aManager) { 1.645 + info("Part 4"); 1.646 + is_in_list(aManager, "addons://list/extension", false, true); 1.647 + 1.648 + close_manager(aManager, run_next_test); 1.649 + }); 1.650 + }); 1.651 + }, false); 1.652 + }); 1.653 + }); 1.654 +}); 1.655 + 1.656 +// Tests that refreshing a detail view does not affect the history 1.657 +// Only relevant for in-content UI 1.658 +add_test(function() { 1.659 + if (!gUseInContentUI) { 1.660 + run_next_test(); 1.661 + return; 1.662 + } 1.663 + 1.664 + open_manager(null, function(aManager) { 1.665 + info("Part 1"); 1.666 + is_in_list(aManager, "addons://list/extension", false, false); 1.667 + 1.668 + double_click_addon_element(aManager, "test1@tests.mozilla.org"); 1.669 + 1.670 + wait_for_view_load(aManager, function(aManager) { 1.671 + info("Part 2"); 1.672 + is_in_detail(aManager, "addons://list/extension", true, false); 1.673 + 1.674 + gBrowser.reload(); 1.675 + gBrowser.addEventListener("pageshow", function(event) { 1.676 + if (event.target.location != "about:addons") 1.677 + return; 1.678 + gBrowser.removeEventListener("pageshow", arguments.callee, false); 1.679 + 1.680 + wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { 1.681 + info("Part 3"); 1.682 + is_in_detail(aManager, "addons://list/extension", true, false); 1.683 + 1.684 + go_back(aManager); 1.685 + wait_for_view_load(aManager, function(aManager) { 1.686 + info("Part 4"); 1.687 + is_in_list(aManager, "addons://list/extension", false, true); 1.688 + 1.689 + close_manager(aManager, run_next_test); 1.690 + }); 1.691 + }); 1.692 + }, false); 1.693 + }); 1.694 + }); 1.695 +}); 1.696 + 1.697 +// Tests that removing an extension from the detail view goes back and doesn't 1.698 +// allow you to go forward again. 1.699 +add_test(function() { 1.700 + open_manager("addons://list/extension", function(aManager) { 1.701 + info("Part 1"); 1.702 + is_in_list(aManager, "addons://list/extension", false, false); 1.703 + 1.704 + double_click_addon_element(aManager, "test1@tests.mozilla.org"); 1.705 + 1.706 + wait_for_view_load(aManager, function(aManager) { 1.707 + info("Part 2"); 1.708 + is_in_detail(aManager, "addons://list/extension", true, false); 1.709 + 1.710 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("detail-uninstall-btn"), 1.711 + { }, aManager); 1.712 + 1.713 + wait_for_view_load(aManager, function() { 1.714 + if (gUseInContentUI) { 1.715 + // TODO until bug 590661 is fixed the back button will be enabled 1.716 + // when displaying in content 1.717 + is_in_list(aManager, "addons://list/extension", true, false); 1.718 + } else { 1.719 + is_in_list(aManager, "addons://list/extension", false, false); 1.720 + } 1.721 + 1.722 + close_manager(aManager, run_next_test); 1.723 + }); 1.724 + }); 1.725 + }); 1.726 +}); 1.727 + 1.728 +// Tests that the back and forward buttons only show up for windowed mode 1.729 +add_test(function() { 1.730 + open_manager(null, function(aManager) { 1.731 + var doc = aManager.document; 1.732 + 1.733 + if (gUseInContentUI) { 1.734 + var btn = document.getElementById("back-button"); 1.735 + if (!btn || is_hidden(btn)) { 1.736 + is_element_visible(doc.getElementById("back-btn"), "Back button should not be hidden"); 1.737 + is_element_visible(doc.getElementById("forward-btn"), "Forward button should not be hidden"); 1.738 + } else { 1.739 + is_element_hidden(doc.getElementById("back-btn"), "Back button should be hidden"); 1.740 + is_element_hidden(doc.getElementById("forward-btn"), "Forward button should be hidden"); 1.741 + } 1.742 + } else { 1.743 + is_element_visible(doc.getElementById("back-btn"), "Back button should not be hidden"); 1.744 + is_element_visible(doc.getElementById("forward-btn"), "Forward button should not be hidden"); 1.745 + } 1.746 + 1.747 + close_manager(aManager, run_next_test); 1.748 + }); 1.749 +}); 1.750 + 1.751 +// Tests that opening the manager opens the last view 1.752 +add_test(function() { 1.753 + open_manager("addons://list/plugin", function(aManager) { 1.754 + info("Part 1"); 1.755 + is_in_list(aManager, "addons://list/plugin", false, false); 1.756 + 1.757 + close_manager(aManager, function() { 1.758 + open_manager(null, function(aManager) { 1.759 + info("Part 2"); 1.760 + is_in_list(aManager, "addons://list/plugin", false, false); 1.761 + 1.762 + close_manager(aManager, run_next_test); 1.763 + }); 1.764 + }); 1.765 + }); 1.766 +}); 1.767 + 1.768 +// Tests that navigating the discovery page works when that was the first view 1.769 +add_test(function() { 1.770 + open_manager("addons://discover/", function(aManager) { 1.771 + info("1"); 1.772 + is_in_discovery(aManager, MAIN_URL, false, false); 1.773 + 1.774 + clickLink(aManager, "link-good", function() { 1.775 + info("2"); 1.776 + is_in_discovery(aManager, SECOND_URL, true, false); 1.777 + 1.778 + waitForLoad(aManager, function() { 1.779 + info("3"); 1.780 + is_in_discovery(aManager, MAIN_URL, false, true); 1.781 + 1.782 + waitForLoad(aManager, function() { 1.783 + is_in_discovery(aManager, SECOND_URL, true, false); 1.784 + 1.785 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); 1.786 + 1.787 + wait_for_view_load(aManager, function(aManager) { 1.788 + is_in_list(aManager, "addons://list/plugin", true, false); 1.789 + 1.790 + go_back(aManager); 1.791 + 1.792 + wait_for_view_load(aManager, function(aManager) { 1.793 + is_in_discovery(aManager, SECOND_URL, true, true); 1.794 + 1.795 + go_back(aManager); 1.796 + 1.797 + waitForLoad(aManager, function() { 1.798 + is_in_discovery(aManager, MAIN_URL, false, true); 1.799 + 1.800 + close_manager(aManager, run_next_test); 1.801 + }); 1.802 + }); 1.803 + }); 1.804 + }); 1.805 + 1.806 + go_forward(aManager); 1.807 + }); 1.808 + 1.809 + go_back(aManager); 1.810 + }); 1.811 + }); 1.812 +}); 1.813 + 1.814 +// Tests that navigating the discovery page works when that was the second view 1.815 +add_test(function() { 1.816 + open_manager("addons://list/plugin", function(aManager) { 1.817 + is_in_list(aManager, "addons://list/plugin", false, false); 1.818 + 1.819 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager); 1.820 + 1.821 + wait_for_view_load(aManager, function(aManager) { 1.822 + is_in_discovery(aManager, MAIN_URL, true, false); 1.823 + 1.824 + clickLink(aManager, "link-good", function() { 1.825 + is_in_discovery(aManager, SECOND_URL, true, false); 1.826 + 1.827 + waitForLoad(aManager, function() { 1.828 + is_in_discovery(aManager, MAIN_URL, true, true); 1.829 + 1.830 + waitForLoad(aManager, function() { 1.831 + is_in_discovery(aManager, SECOND_URL, true, false); 1.832 + 1.833 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); 1.834 + 1.835 + wait_for_view_load(aManager, function(aManager) { 1.836 + is_in_list(aManager, "addons://list/plugin", true, false); 1.837 + 1.838 + go_back(aManager); 1.839 + 1.840 + wait_for_view_load(aManager, function(aManager) { 1.841 + is_in_discovery(aManager, SECOND_URL, true, true); 1.842 + 1.843 + go_back(aManager); 1.844 + 1.845 + waitForLoad(aManager, function() { 1.846 + is_in_discovery(aManager, MAIN_URL, true, true); 1.847 + 1.848 + go_back(aManager); 1.849 + 1.850 + wait_for_view_load(aManager, function(aManager) { 1.851 + is_in_list(aManager, "addons://list/plugin", false, true); 1.852 + 1.853 + go_forward(aManager); 1.854 + 1.855 + wait_for_view_load(aManager, function(aManager) { 1.856 + is_in_discovery(aManager, MAIN_URL, true, true); 1.857 + 1.858 + waitForLoad(aManager, function() { 1.859 + is_in_discovery(aManager, SECOND_URL, true, true); 1.860 + 1.861 + close_manager(aManager, run_next_test); 1.862 + }); 1.863 + 1.864 + go_forward(aManager); 1.865 + }); 1.866 + }); 1.867 + }); 1.868 + }); 1.869 + }); 1.870 + }); 1.871 + 1.872 + go_forward(aManager); 1.873 + }); 1.874 + 1.875 + go_back(aManager); 1.876 + }); 1.877 + }); 1.878 + }); 1.879 +}); 1.880 + 1.881 +// Tests that when displaying in-content and opened in the background the back 1.882 +// and forward buttons still appear when switching tabs 1.883 +add_test(function() { 1.884 + if (!gUseInContentUI) { 1.885 + run_next_test(); 1.886 + return; 1.887 + } 1.888 + 1.889 + var tab = gBrowser.addTab("about:addons"); 1.890 + var browser = gBrowser.getBrowserForTab(tab); 1.891 + 1.892 + browser.addEventListener("pageshow", function(event) { 1.893 + if (event.target.location.href != "about:addons") 1.894 + return; 1.895 + browser.removeEventListener("pageshow", arguments.callee, true); 1.896 + 1.897 + wait_for_manager_load(browser.contentWindow.wrappedJSObject, function() { 1.898 + wait_for_view_load(browser.contentWindow.wrappedJSObject, function(aManager) { 1.899 + gBrowser.selectedTab = tab; 1.900 + 1.901 + var doc = aManager.document; 1.902 + var btn = document.getElementById("back-button"); 1.903 + if (!btn || is_hidden(btn)) { 1.904 + is_element_visible(doc.getElementById("back-btn"), "Back button should not be hidden"); 1.905 + is_element_visible(doc.getElementById("forward-btn"), "Forward button should not be hidden"); 1.906 + } else { 1.907 + is_element_hidden(doc.getElementById("back-btn"), "Back button should be hidden"); 1.908 + is_element_hidden(doc.getElementById("forward-btn"), "Forward button should be hidden"); 1.909 + } 1.910 + 1.911 + close_manager(aManager, run_next_test); 1.912 + }); 1.913 + }); 1.914 + }, true); 1.915 +}); 1.916 + 1.917 +// Tests that refreshing the disicovery pane integrates properly with history 1.918 +add_test(function() { 1.919 + open_manager("addons://list/plugin", function(aManager) { 1.920 + is_in_list(aManager, "addons://list/plugin", false, false); 1.921 + 1.922 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager); 1.923 + 1.924 + wait_for_view_load(aManager, function(aManager) { 1.925 + is_in_discovery(aManager, MAIN_URL, true, false); 1.926 + 1.927 + clickLink(aManager, "link-good", function() { 1.928 + is_in_discovery(aManager, SECOND_URL, true, false); 1.929 + 1.930 + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager); 1.931 + 1.932 + waitForLoad(aManager, function() { 1.933 + is_in_discovery(aManager, MAIN_URL, true, false); 1.934 + 1.935 + go_back(aManager); 1.936 + 1.937 + waitForLoad(aManager, function() { 1.938 + is_in_discovery(aManager, SECOND_URL, true, true); 1.939 + 1.940 + go_back(aManager); 1.941 + 1.942 + waitForLoad(aManager, function() { 1.943 + is_in_discovery(aManager, MAIN_URL, true, true); 1.944 + 1.945 + go_back(aManager); 1.946 + 1.947 + wait_for_view_load(aManager, function(aManager) { 1.948 + is_in_list(aManager, "addons://list/plugin", false, true); 1.949 + 1.950 + go_forward(aManager); 1.951 + 1.952 + wait_for_view_load(aManager, function(aManager) { 1.953 + is_in_discovery(aManager, MAIN_URL, true, true); 1.954 + 1.955 + waitForLoad(aManager, function() { 1.956 + is_in_discovery(aManager, SECOND_URL, true, true); 1.957 + 1.958 + waitForLoad(aManager, function() { 1.959 + is_in_discovery(aManager, MAIN_URL, true, false); 1.960 + 1.961 + close_manager(aManager, run_next_test); 1.962 + }); 1.963 + go_forward(aManager); 1.964 + }); 1.965 + 1.966 + go_forward(aManager); 1.967 + }); 1.968 + }); 1.969 + }); 1.970 + }); 1.971 + }); 1.972 + }); 1.973 + }); 1.974 + }); 1.975 +});