toolkit/mozapps/extensions/test/browser/browser_bug562797.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

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 /**
     6  * Tests that history navigation works for the add-ons manager.
     7  */
     9 const MAIN_URL = "https://example.com/" + RELATIVE_DIR + "discovery.html";
    10 const SECOND_URL = "https://example.com/" + RELATIVE_DIR + "releaseNotes.xhtml";
    12 var gLoadCompleteCallback = null;
    14 var gProgressListener = {
    15   onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
    16     // Only care about the network stop status events
    17     if (!(aStateFlags & (Ci.nsIWebProgressListener.STATE_IS_NETWORK)) ||
    18         !(aStateFlags & (Ci.nsIWebProgressListener.STATE_STOP)))
    19       return;
    21     if (gLoadCompleteCallback)
    22       executeSoon(gLoadCompleteCallback);
    23     gLoadCompleteCallback = null;
    24   },
    26   onLocationChange: function() { },
    27   onSecurityChange: function() { },
    28   onProgressChange: function() { },
    29   onStatusChange: function() { },
    31   QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener,
    32                                          Ci.nsISupportsWeakReference]),
    33 };
    35 function waitForLoad(aManager, aCallback) {
    36   var browser = aManager.document.getElementById("discover-browser");
    37   browser.addProgressListener(gProgressListener);
    39   gLoadCompleteCallback = function() {
    40     browser.removeProgressListener(gProgressListener);
    41     aCallback();
    42   };
    43 }
    45 function clickLink(aManager, aId, aCallback) {
    46   waitForLoad(aManager, aCallback);
    48   var browser = aManager.document.getElementById("discover-browser");
    50   var link = browser.contentDocument.getElementById(aId);
    51   EventUtils.sendMouseEvent({type: "click"}, link);
    52 }
    54 function test() {
    55   requestLongerTimeout(2);
    57   waitForExplicitFinish();
    59   Services.prefs.setCharPref(PREF_DISCOVERURL, MAIN_URL);
    61   var gProvider = new MockProvider();
    62   gProvider.createAddons([{
    63     id: "test1@tests.mozilla.org",
    64     name: "Test add-on 1",
    65     description: "foo"
    66   },
    67   {
    68     id: "test2@tests.mozilla.org",
    69     name: "Test add-on 2",
    70     description: "bar"
    71   },
    72   {
    73     id: "test3@tests.mozilla.org",
    74     name: "Test add-on 3",
    75     type: "theme",
    76     description: "bar"
    77   }]);
    79   run_next_test();
    80 }
    82 function end_test() {
    83   finish();
    84 }
    86 function go_back(aManager) {
    87   if (gUseInContentUI) {
    88     gBrowser.goBack();
    89   } else {
    90     EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("back-btn"),
    91                                        { }, aManager);
    92   }
    93 }
    95 function go_back_backspace(aManager) {
    96     EventUtils.synthesizeKey("VK_BACK_SPACE",{});
    97 }
    99 function go_forward_backspace(aManager) {
   100     EventUtils.synthesizeKey("VK_BACK_SPACE",{shiftKey: true});
   101 }
   103 function go_forward(aManager) {
   104   if (gUseInContentUI) {
   105     gBrowser.goForward();
   106   } else {
   107     EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("forward-btn"),
   108                                        { }, aManager);
   109   }
   110 }
   112 function check_state(aManager, canGoBack, canGoForward) {
   113   var doc = aManager.document;
   115   if (gUseInContentUI) {
   116     is(gBrowser.canGoBack, canGoBack, "canGoBack should be correct");
   117     is(gBrowser.canGoForward, canGoForward, "canGoForward should be correct");
   118   }
   120   if (!is_hidden(doc.getElementById("back-btn"))) {
   121     is(!doc.getElementById("back-btn").disabled, canGoBack, "Back button should have the right state");
   122     is(!doc.getElementById("forward-btn").disabled, canGoForward, "Forward button should have the right state");
   123   }
   124 }
   126 function is_in_list(aManager, view, canGoBack, canGoForward) {
   127   var doc = aManager.document;
   129   is(doc.getElementById("categories").selectedItem.value, view, "Should be on the right category");
   130   is(doc.getElementById("view-port").selectedPanel.id, "list-view", "Should be on the right view");
   132   check_state(aManager, canGoBack, canGoForward);
   133 }
   135 function is_in_search(aManager, query, canGoBack, canGoForward) {
   136   var doc = aManager.document;
   138   is(doc.getElementById("categories").selectedItem.value, "addons://search/", "Should be on the right category");
   139   is(doc.getElementById("view-port").selectedPanel.id, "search-view", "Should be on the right view");
   140   is(doc.getElementById("header-search").value, query, "Should have used the right query");
   142   check_state(aManager, canGoBack, canGoForward);
   143 }
   145 function is_in_detail(aManager, view, canGoBack, canGoForward) {
   146   var doc = aManager.document;
   148   is(doc.getElementById("categories").selectedItem.value, view, "Should be on the right category");
   149   is(doc.getElementById("view-port").selectedPanel.id, "detail-view", "Should be on the right view");
   151   check_state(aManager, canGoBack, canGoForward);
   152 }
   154 function is_in_discovery(aManager, url, canGoBack, canGoForward) {
   155   var browser = aManager.document.getElementById("discover-browser");
   157   is(aManager.document.getElementById("discover-view").selectedPanel, browser,
   158      "Browser should be visible");
   160   var spec = browser.currentURI.spec;
   161   var pos = spec.indexOf("#");
   162   if (pos != -1)
   163     spec = spec.substring(0, pos);
   165   is(spec, url, "Should have loaded the right url");
   167   check_state(aManager, canGoBack, canGoForward);
   168 }
   170 function double_click_addon_element(aManager, aId) {
   171   var addon = get_addon_element(aManager, aId);
   172   addon.parentNode.ensureElementIsVisible(addon);
   173   EventUtils.synthesizeMouseAtCenter(addon, { clickCount: 1 }, aManager);
   174   EventUtils.synthesizeMouseAtCenter(addon, { clickCount: 2 }, aManager);
   175 }
   177 // Tests simple forward and back navigation and that the right heading and
   178 // category is selected
   179 add_test(function() {
   180   open_manager("addons://list/extension", function(aManager) {
   181     info("Part 1");
   182     is_in_list(aManager, "addons://list/extension", false, false);
   184     EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
   186     wait_for_view_load(aManager, function(aManager) {
   187       info("Part 2");
   188       is_in_list(aManager, "addons://list/plugin", true, false);
   190       go_back(aManager);
   192       wait_for_view_load(aManager, function(aManager) {
   193         info("Part 3");
   194         is_in_list(aManager, "addons://list/extension", false, true);
   196         go_forward(aManager);
   198         wait_for_view_load(aManager, function(aManager) {
   199           info("Part 4");
   200           is_in_list(aManager, "addons://list/plugin", true, false);
   202           go_back(aManager);
   204           wait_for_view_load(aManager, function(aManager) {
   205             info("Part 5");
   206             is_in_list(aManager, "addons://list/extension", false, true);
   208             double_click_addon_element(aManager, "test1@tests.mozilla.org");
   210             wait_for_view_load(aManager, function(aManager) {
   211               info("Part 6");
   212               is_in_detail(aManager, "addons://list/extension", true, false);
   214               go_back(aManager);
   216               wait_for_view_load(aManager, function(aManager) {
   217                 info("Part 7");
   218                 is_in_list(aManager, "addons://list/extension", false, true);
   220                 close_manager(aManager, run_next_test);
   221               });
   222             });
   223           });
   224         });
   225       });
   226     });
   227   });
   228 });
   230 // Tests that browsing to the add-ons manager from a website and going back works
   231 // Only relevant for in-content UI
   232 add_test(function() {
   233   if (!gUseInContentUI) {
   234     run_next_test();
   235     return;
   236   }
   238   info("Part 1");
   239   gBrowser.selectedTab = gBrowser.addTab();
   240   gBrowser.loadURI("http://example.com/");
   241   gBrowser.addEventListener("pageshow", function(event) {
   242     if (event.target.location != "http://example.com/")
   243       return;
   244     gBrowser.removeEventListener("pageshow", arguments.callee, false);
   246     //Must let the load complete for it to go into the session history
   247     executeSoon(function() {
   248       info("Part 2");
   249       ok(!gBrowser.canGoBack, "Should not be able to go back");
   250       ok(!gBrowser.canGoForward, "Should not be able to go forward");
   252       gBrowser.loadURI("about:addons");
   253       gBrowser.addEventListener("pageshow", function(event) {
   254         if (event.target.location != "about:addons")
   255           return;
   256         gBrowser.removeEventListener("pageshow", arguments.callee, true);
   258         wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
   259           info("Part 3");
   260           is_in_list(aManager, "addons://list/extension", true, false);
   262           go_back(aManager);
   263           gBrowser.addEventListener("pageshow", function() {
   264             gBrowser.removeEventListener("pageshow", arguments.callee, false);
   265             info("Part 4");
   266             is(gBrowser.currentURI.spec, "http://example.com/", "Should be showing the webpage");
   267             ok(!gBrowser.canGoBack, "Should not be able to go back");
   268             ok(gBrowser.canGoForward, "Should be able to go forward");
   270             go_forward(aManager);
   271             gBrowser.addEventListener("pageshow", function() {
   272               gBrowser.removeEventListener("pageshow", arguments.callee, false);
   273               wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
   274                 info("Part 5");
   275                 is_in_list(aManager, "addons://list/extension", true, false);
   277                 close_manager(aManager, run_next_test);
   278               });
   279             }, false);
   280           }, false);
   281         });
   282       }, true);
   283     });
   284   }, false);
   285 });
   287 // Tests simple forward and back navigation and that the right heading and
   288 // category is selected -- Keyboard navigation [Bug 565359]
   289 // Only add the test if the backspace key navigates back and addon-manager
   290 // loaded in a tab
   291 add_test(function() {
   293   if (!gUseInContentUI || (Services.prefs.getIntPref("browser.backspace_action") != 0)) {
   294     run_next_test();
   295     return;
   296   }
   298   open_manager("addons://list/extension", function(aManager) {
   299     info("Part 1");
   300     is_in_list(aManager, "addons://list/extension", false, false);
   302     EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
   304     wait_for_view_load(aManager, function(aManager) {
   305       info("Part 2");
   306       is_in_list(aManager, "addons://list/plugin", true, false);
   308       go_back_backspace(aManager);
   310       wait_for_view_load(aManager, function(aManager) {
   311         info("Part 3");
   312         is_in_list(aManager, "addons://list/extension", false, true);
   314         go_forward_backspace(aManager);
   316         wait_for_view_load(aManager, function(aManager) {
   317           info("Part 4");
   318           is_in_list(aManager, "addons://list/plugin", true, false);
   320           go_back_backspace(aManager);
   322           wait_for_view_load(aManager, function(aManager) {
   323             info("Part 5");
   324             is_in_list(aManager, "addons://list/extension", false, true);
   326             double_click_addon_element(aManager, "test1@tests.mozilla.org");
   328             wait_for_view_load(aManager, function(aManager) {
   329               info("Part 6");
   330               is_in_detail(aManager, "addons://list/extension", true, false);
   332               go_back_backspace(aManager);
   334               wait_for_view_load(aManager, function(aManager) {
   335                 info("Part 7");
   336                 is_in_list(aManager, "addons://list/extension", false, true);
   338                 close_manager(aManager, run_next_test);
   339               });
   340             });
   341           });
   342         });
   343       });
   344     });
   345   });
   346 });
   349 // Tests that opening a custom first view only stores a single history entry
   350 add_test(function() {
   351   open_manager("addons://list/plugin", function(aManager) {
   352     info("Part 1");
   353     is_in_list(aManager, "addons://list/plugin", false, false);
   355     EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-extension"), { }, aManager);
   357     wait_for_view_load(aManager, function(aManager) {
   358       info("Part 2");
   359       is_in_list(aManager, "addons://list/extension", true, false);
   361       go_back(aManager);
   363       wait_for_view_load(aManager, function(aManager) {
   364         info("Part 3");
   365         is_in_list(aManager, "addons://list/plugin", false, true);
   367         close_manager(aManager, run_next_test);
   368       });
   369     });
   370   });
   371 });
   374 // Tests that opening a view while the manager is already open adds a new
   375 // history entry
   376 add_test(function() {
   377   open_manager("addons://list/extension", function(aManager) {
   378     info("Part 1");
   379     is_in_list(aManager, "addons://list/extension", false, false);
   381     aManager.loadView("addons://list/plugin");
   383     wait_for_view_load(aManager, function(aManager) {
   384       info("Part 2");
   385       is_in_list(aManager, "addons://list/plugin", true, false);
   387       go_back(aManager);
   389       wait_for_view_load(aManager, function(aManager) {
   390         info("Part 3");
   391         is_in_list(aManager, "addons://list/extension", false, true);
   393         go_forward(aManager);
   395         wait_for_view_load(aManager, function(aManager) {
   396           info("Part 4");
   397           is_in_list(aManager, "addons://list/plugin", true, false);
   399           close_manager(aManager, run_next_test);
   400         });
   401       });
   402     });
   403   });
   404 });
   406 // Tests than navigating to a website and then going back returns to the
   407 // previous view
   408 // Only relevant for in-content UI
   409 add_test(function() {
   410   if (!gUseInContentUI) {
   411     run_next_test();
   412     return;
   413   }
   415   open_manager("addons://list/plugin", function(aManager) {
   416     info("Part 1");
   417     is_in_list(aManager, "addons://list/plugin", false, false);
   419     gBrowser.loadURI("http://example.com/");
   420     gBrowser.addEventListener("pageshow", function(event) {
   421       if (event.target.location != "http://example.com/")
   422         return;
   423       gBrowser.removeEventListener("pageshow", arguments.callee, false);
   424       info("Part 2");
   426       executeSoon(function() {
   427         ok(gBrowser.canGoBack, "Should be able to go back");
   428         ok(!gBrowser.canGoForward, "Should not be able to go forward");
   430         go_back(aManager);
   432         gBrowser.addEventListener("pageshow", function(event) {
   433           if (event.target.location != "about:addons")
   434             return;
   435           gBrowser.removeEventListener("pageshow", arguments.callee, false);
   437           wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
   438             info("Part 3");
   439             is_in_list(aManager, "addons://list/plugin", false, true);
   441             go_forward(aManager);
   442             gBrowser.addEventListener("pageshow", function(event) {
   443               if (event.target.location != "http://example.com/")
   444                 return;
   445               gBrowser.removeEventListener("pageshow", arguments.callee, false);
   446               info("Part 4");
   448               executeSoon(function() {
   449                 ok(gBrowser.canGoBack, "Should be able to go back");
   450                 ok(!gBrowser.canGoForward, "Should not be able to go forward");
   452                 go_back(aManager);
   454                 gBrowser.addEventListener("pageshow", function(event) {
   455                   if (event.target.location != "about:addons")
   456                     return;
   457                   gBrowser.removeEventListener("pageshow", arguments.callee, false);
   458                   wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
   459                     info("Part 5");
   460                     is_in_list(aManager, "addons://list/plugin", false, true);
   462                     close_manager(aManager, run_next_test);
   463                   });
   464                 }, false);
   465               });
   466             }, false);
   467           });
   468         }, false);
   469       });
   470     }, false);
   471   });
   472 });
   474 // Tests that going back to search results works
   475 add_test(function() {
   476   // Before we open the add-ons manager, we should make sure that no filter
   477   // has been set. If one is set, we remove it.
   478   // This is for the check below, from bug 611459.
   479   let RDF = Cc["@mozilla.org/rdf/rdf-service;1"].getService(Ci.nsIRDFService);
   480   let store = RDF.GetDataSource("rdf:local-store");
   481   let filterResource = RDF.GetResource("about:addons#search-filter-radiogroup");
   482   let filterProperty = RDF.GetResource("value");
   483   let filterTarget = store.GetTarget(filterResource, filterProperty, true);
   485   if (filterTarget) {
   486     is(filterTarget instanceof Ci.nsIRDFLiteral, true,
   487        "Filter should be a value");
   488     store.Unassert(filterResource, filterProperty, filterTarget);
   489   }
   491   open_manager("addons://list/extension", function(aManager) {
   492     info("Part 1");
   493     is_in_list(aManager, "addons://list/extension", false, false);
   495     var search = aManager.document.getElementById("header-search");
   496     search.focus();
   497     search.value = "bar";
   498     EventUtils.synthesizeKey("VK_RETURN", {}, aManager);
   500     wait_for_view_load(aManager, function(aManager) {
   501       // Remote search is meant to be checked by default (bug 611459), so we
   502       // confirm that and then switch to a local search.
   503       var localFilter = aManager.document.getElementById("search-filter-local");
   504       var remoteFilter = aManager.document.getElementById("search-filter-remote");
   506       is(remoteFilter.selected, true, "Remote filter should be set by default");
   508       var list = aManager.document.getElementById("search-list");
   509       list.ensureElementIsVisible(localFilter);
   510       EventUtils.synthesizeMouseAtCenter(localFilter, { }, aManager);
   512       is(localFilter.selected, true, "Should have changed to local filter");
   514       // Now we continue with the normal test.
   516       info("Part 2");
   517       is_in_search(aManager, "bar", true, false);
   518       check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]);
   520       double_click_addon_element(aManager, "test2@tests.mozilla.org");
   522       wait_for_view_load(aManager, function(aManager) {
   523         info("Part 3");
   524         is_in_detail(aManager, "addons://search/", true, false);
   526         go_back(aManager);
   527         wait_for_view_load(aManager, function(aManager) {
   528           info("Part 4");
   529           is_in_search(aManager, "bar", true, true);
   530           check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]);
   532           go_forward(aManager);
   533           wait_for_view_load(aManager, function(aManager) {
   534             info("Part 5");
   535             is_in_detail(aManager, "addons://search/", true, false);
   537             close_manager(aManager, run_next_test);
   538           });
   539         });
   540       });
   541     });
   542   });
   543 });
   545 // Tests that going back from a webpage to a detail view loaded from a search
   546 // result works
   547 // Only relevant for in-content UI
   548 add_test(function() {
   549   if (!gUseInContentUI) {
   550     run_next_test();
   551     return;
   552   }
   554   open_manager("addons://list/extension", function(aManager) {
   555     info("Part 1");
   556     is_in_list(aManager, "addons://list/extension", false, false);
   558     var search = aManager.document.getElementById("header-search");
   559     search.focus();
   560     search.value = "bar";
   561     EventUtils.synthesizeKey("VK_RETURN", {});
   563     wait_for_view_load(aManager, function(aManager) {
   564       info("Part 2");
   565       is_in_search(aManager, "bar", true, false);
   566       check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]);
   568       double_click_addon_element(aManager, "test2@tests.mozilla.org");
   570       wait_for_view_load(aManager, function(aManager) {
   571         info("Part 3");
   572         is_in_detail(aManager, "addons://search/", true, false);
   574         gBrowser.loadURI("http://example.com/");
   575         gBrowser.addEventListener("pageshow", function(event) {
   576           if (event.target.location != "http://example.com/")
   577             return;
   578           gBrowser.removeEventListener("pageshow", arguments.callee, false);
   580           info("Part 4");
   581           executeSoon(function() {
   582             ok(gBrowser.canGoBack, "Should be able to go back");
   583             ok(!gBrowser.canGoForward, "Should not be able to go forward");
   585             go_back(aManager);
   586             gBrowser.addEventListener("pageshow", function(event) {
   587                 if (event.target.location != "about:addons")
   588                 return;
   589               gBrowser.removeEventListener("pageshow", arguments.callee, false);
   591               wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
   592                 info("Part 5");
   593                 is_in_detail(aManager, "addons://search/", true, true);
   595                 go_back(aManager);
   596                 wait_for_view_load(aManager, function(aManager) {
   597                   info("Part 6");
   598                   is_in_search(aManager, "bar", true, true);
   599                   check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]);
   601                   close_manager(aManager, run_next_test);
   602                 });
   603               });
   604             }, false);
   605           });
   606         }, false);
   607       });
   608     });
   609   });
   610 });
   612 // Tests that refreshing a list view does not affect the history
   613 // Only relevant for in-content UI
   614 add_test(function() {
   615   if (!gUseInContentUI) {
   616     run_next_test();
   617     return;
   618   }
   620   open_manager("addons://list/extension", function(aManager) {
   621     info("Part 1");
   622     is_in_list(aManager, "addons://list/extension", false, false);
   624     EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
   626     wait_for_view_load(aManager, function(aManager) {
   627       info("Part 2");
   628       is_in_list(aManager, "addons://list/plugin", true, false);
   630       gBrowser.reload();
   631       gBrowser.addEventListener("pageshow", function(event) {
   632         if (event.target.location != "about:addons")
   633           return;
   634         gBrowser.removeEventListener("pageshow", arguments.callee, false);
   636         wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
   637           info("Part 3");
   638           is_in_list(aManager, "addons://list/plugin", true, false);
   640           go_back(aManager);
   641           wait_for_view_load(aManager, function(aManager) {
   642             info("Part 4");
   643             is_in_list(aManager, "addons://list/extension", false, true);
   645             close_manager(aManager, run_next_test);
   646           });
   647         });
   648       }, false);
   649     });
   650   });
   651 });
   653 // Tests that refreshing a detail view does not affect the history
   654 // Only relevant for in-content UI
   655 add_test(function() {
   656   if (!gUseInContentUI) {
   657     run_next_test();
   658     return;
   659   }
   661   open_manager(null, function(aManager) {
   662     info("Part 1");
   663     is_in_list(aManager, "addons://list/extension", false, false);
   665     double_click_addon_element(aManager, "test1@tests.mozilla.org");
   667     wait_for_view_load(aManager, function(aManager) {
   668       info("Part 2");
   669       is_in_detail(aManager, "addons://list/extension", true, false);
   671       gBrowser.reload();
   672       gBrowser.addEventListener("pageshow", function(event) {
   673         if (event.target.location != "about:addons")
   674           return;
   675         gBrowser.removeEventListener("pageshow", arguments.callee, false);
   677         wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
   678           info("Part 3");
   679           is_in_detail(aManager, "addons://list/extension", true, false);
   681           go_back(aManager);
   682           wait_for_view_load(aManager, function(aManager) {
   683             info("Part 4");
   684             is_in_list(aManager, "addons://list/extension", false, true);
   686             close_manager(aManager, run_next_test);
   687           });
   688         });
   689       }, false);
   690     });
   691   });
   692 });
   694 // Tests that removing an extension from the detail view goes back and doesn't
   695 // allow you to go forward again.
   696 add_test(function() {
   697   open_manager("addons://list/extension", function(aManager) {
   698     info("Part 1");
   699     is_in_list(aManager, "addons://list/extension", false, false);
   701     double_click_addon_element(aManager, "test1@tests.mozilla.org");
   703     wait_for_view_load(aManager, function(aManager) {
   704       info("Part 2");
   705       is_in_detail(aManager, "addons://list/extension", true, false);
   707       EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("detail-uninstall-btn"),
   708                                          { }, aManager);
   710       wait_for_view_load(aManager, function() {
   711         if (gUseInContentUI) {
   712           // TODO until bug 590661 is fixed the back button will be enabled
   713           // when displaying in content
   714           is_in_list(aManager, "addons://list/extension", true, false);
   715         } else {
   716           is_in_list(aManager, "addons://list/extension", false, false);
   717         }
   719         close_manager(aManager, run_next_test);
   720       });
   721     });
   722   });
   723 });
   725 // Tests that the back and forward buttons only show up for windowed mode
   726 add_test(function() {
   727   open_manager(null, function(aManager) {
   728     var doc = aManager.document;
   730     if (gUseInContentUI) {
   731       var btn = document.getElementById("back-button");
   732       if (!btn || is_hidden(btn)) {
   733         is_element_visible(doc.getElementById("back-btn"), "Back button should not be hidden");
   734         is_element_visible(doc.getElementById("forward-btn"), "Forward button should not be hidden");
   735       } else {
   736         is_element_hidden(doc.getElementById("back-btn"), "Back button should be hidden");
   737         is_element_hidden(doc.getElementById("forward-btn"), "Forward button should be hidden");
   738       }
   739     } else {
   740       is_element_visible(doc.getElementById("back-btn"), "Back button should not be hidden");
   741       is_element_visible(doc.getElementById("forward-btn"), "Forward button should not be hidden");
   742     }
   744     close_manager(aManager, run_next_test);
   745   });
   746 });
   748 // Tests that opening the manager opens the last view
   749 add_test(function() {
   750   open_manager("addons://list/plugin", function(aManager) {
   751     info("Part 1");
   752     is_in_list(aManager, "addons://list/plugin", false, false);
   754     close_manager(aManager, function() {
   755       open_manager(null, function(aManager) {
   756         info("Part 2");
   757         is_in_list(aManager, "addons://list/plugin", false, false);
   759         close_manager(aManager, run_next_test);
   760       });
   761     });
   762   });
   763 });
   765 // Tests that navigating the discovery page works when that was the first view
   766 add_test(function() {
   767   open_manager("addons://discover/", function(aManager) {
   768     info("1");
   769     is_in_discovery(aManager, MAIN_URL, false, false);
   771     clickLink(aManager, "link-good", function() {
   772       info("2");
   773       is_in_discovery(aManager, SECOND_URL, true, false);
   775       waitForLoad(aManager, function() {
   776         info("3");
   777         is_in_discovery(aManager, MAIN_URL, false, true);
   779         waitForLoad(aManager, function() {
   780           is_in_discovery(aManager, SECOND_URL, true, false);
   782           EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
   784           wait_for_view_load(aManager, function(aManager) {
   785             is_in_list(aManager, "addons://list/plugin", true, false);
   787             go_back(aManager);
   789             wait_for_view_load(aManager, function(aManager) {
   790               is_in_discovery(aManager, SECOND_URL, true, true);
   792               go_back(aManager);
   794               waitForLoad(aManager, function() {
   795                 is_in_discovery(aManager, MAIN_URL, false, true);
   797                 close_manager(aManager, run_next_test);
   798               });
   799             });
   800           });
   801         });
   803         go_forward(aManager);
   804       });
   806       go_back(aManager);
   807     });
   808   });
   809 });
   811 // Tests that navigating the discovery page works when that was the second view
   812 add_test(function() {
   813   open_manager("addons://list/plugin", function(aManager) {
   814     is_in_list(aManager, "addons://list/plugin", false, false);
   816     EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager);
   818     wait_for_view_load(aManager, function(aManager) {
   819       is_in_discovery(aManager, MAIN_URL, true, false);
   821       clickLink(aManager, "link-good", function() {
   822         is_in_discovery(aManager, SECOND_URL, true, false);
   824         waitForLoad(aManager, function() {
   825           is_in_discovery(aManager, MAIN_URL, true, true);
   827           waitForLoad(aManager, function() {
   828             is_in_discovery(aManager, SECOND_URL, true, false);
   830             EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
   832             wait_for_view_load(aManager, function(aManager) {
   833               is_in_list(aManager, "addons://list/plugin", true, false);
   835               go_back(aManager);
   837               wait_for_view_load(aManager, function(aManager) {
   838                 is_in_discovery(aManager, SECOND_URL, true, true);
   840                 go_back(aManager);
   842                 waitForLoad(aManager, function() {
   843                   is_in_discovery(aManager, MAIN_URL, true, true);
   845                   go_back(aManager);
   847                   wait_for_view_load(aManager, function(aManager) {
   848                     is_in_list(aManager, "addons://list/plugin", false, true);
   850                     go_forward(aManager);
   852                     wait_for_view_load(aManager, function(aManager) {
   853                       is_in_discovery(aManager, MAIN_URL, true, true);
   855                       waitForLoad(aManager, function() {
   856                         is_in_discovery(aManager, SECOND_URL, true, true);
   858                         close_manager(aManager, run_next_test);
   859                       });
   861                       go_forward(aManager);
   862                     });
   863                   });
   864                 });
   865               });
   866             });
   867           });
   869           go_forward(aManager);
   870         });
   872         go_back(aManager);
   873       });
   874     });
   875   });
   876 });
   878 // Tests that when displaying in-content and opened in the background the back
   879 // and forward buttons still appear when switching tabs
   880 add_test(function() {
   881   if (!gUseInContentUI) {
   882     run_next_test();
   883     return;
   884   }
   886   var tab = gBrowser.addTab("about:addons");
   887   var browser = gBrowser.getBrowserForTab(tab);
   889   browser.addEventListener("pageshow", function(event) {
   890     if (event.target.location.href != "about:addons")
   891       return;
   892     browser.removeEventListener("pageshow", arguments.callee, true);
   894     wait_for_manager_load(browser.contentWindow.wrappedJSObject, function() {
   895       wait_for_view_load(browser.contentWindow.wrappedJSObject, function(aManager) {
   896         gBrowser.selectedTab = tab;
   898         var doc = aManager.document;
   899         var btn = document.getElementById("back-button");
   900         if (!btn || is_hidden(btn)) {
   901           is_element_visible(doc.getElementById("back-btn"), "Back button should not be hidden");
   902           is_element_visible(doc.getElementById("forward-btn"), "Forward button should not be hidden");
   903         } else {
   904           is_element_hidden(doc.getElementById("back-btn"), "Back button should be hidden");
   905           is_element_hidden(doc.getElementById("forward-btn"), "Forward button should be hidden");
   906         }
   908         close_manager(aManager, run_next_test);
   909       });
   910     });
   911   }, true);
   912 });
   914 // Tests that refreshing the disicovery pane integrates properly with history
   915 add_test(function() {
   916   open_manager("addons://list/plugin", function(aManager) {
   917     is_in_list(aManager, "addons://list/plugin", false, false);
   919     EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager);
   921     wait_for_view_load(aManager, function(aManager) {
   922       is_in_discovery(aManager, MAIN_URL, true, false);
   924       clickLink(aManager, "link-good", function() {
   925         is_in_discovery(aManager, SECOND_URL, true, false);
   927         EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager);
   929         waitForLoad(aManager, function() {
   930           is_in_discovery(aManager, MAIN_URL, true, false);
   932           go_back(aManager);
   934           waitForLoad(aManager, function() {
   935             is_in_discovery(aManager, SECOND_URL, true, true);
   937             go_back(aManager);
   939             waitForLoad(aManager, function() {
   940               is_in_discovery(aManager, MAIN_URL, true, true);
   942               go_back(aManager);
   944               wait_for_view_load(aManager, function(aManager) {
   945                 is_in_list(aManager, "addons://list/plugin", false, true);
   947                 go_forward(aManager);
   949                 wait_for_view_load(aManager, function(aManager) {
   950                   is_in_discovery(aManager, MAIN_URL, true, true);
   952                   waitForLoad(aManager, function() {
   953                     is_in_discovery(aManager, SECOND_URL, true, true);
   955                     waitForLoad(aManager, function() {
   956                       is_in_discovery(aManager, MAIN_URL, true, false);
   958                       close_manager(aManager, run_next_test);
   959                     });
   960                     go_forward(aManager);
   961                   });
   963                   go_forward(aManager);
   964                 });
   965               });
   966             });
   967           });
   968         });
   969       });
   970     });
   971   });
   972 });

mercurial