summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/browser/browser_bug714593.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_bug714593.js')
-rw-r--r--toolkit/mozapps/extensions/test/browser/browser_bug714593.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_bug714593.js b/toolkit/mozapps/extensions/test/browser/browser_bug714593.js
new file mode 100644
index 000000000..b9a7faa5e
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug714593.js
@@ -0,0 +1,140 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Tests that installed addons in the search view load inline prefs properly
+
+const PREF_GETADDONS_GETSEARCHRESULTS = "extensions.getAddons.search.url";
+const NO_MATCH_URL = TESTROOT + "browser_searching_empty.xml";
+
+var gManagerWindow;
+var gCategoryUtilities;
+var gProvider;
+
+function test() {
+ // Turn on searching for this test
+ Services.prefs.setIntPref(PREF_SEARCH_MAXRESULTS, 15);
+
+ waitForExplicitFinish();
+
+ gProvider = new MockProvider();
+
+ gProvider.createAddons([{
+ id: "inlinesettings2@tests.mozilla.org",
+ name: "Inline Settings (Regular)",
+ version: "1",
+ optionsURL: CHROMEROOT + "options.xul",
+ optionsType: AddonManager.OPTIONS_TYPE_INLINE
+ }]);
+
+ open_manager("addons://list/extension", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+ run_next_test();
+ });
+}
+
+function end_test() {
+ close_manager(gManagerWindow, finish);
+}
+
+/*
+ * Checks whether or not the Add-ons Manager is currently searching
+ *
+ * @param aExpectedSearching
+ * The expected isSearching state
+ */
+function check_is_searching(aExpectedSearching) {
+ var loading = gManagerWindow.document.getElementById("search-loading");
+ is(!is_hidden(loading), aExpectedSearching,
+ "Search throbber should be showing iff currently searching");
+}
+
+/*
+ * Completes a search
+ *
+ * @param aQuery
+ * The query to search for
+ * @param aFinishImmediately
+ * Boolean representing whether or not the search is expected to
+ * finish immediately
+ * @param aCallback
+ * The callback to call when the search is done
+ * @param aCategoryType
+ * The expected selected category after the search is done.
+ * Optional and defaults to "search"
+ */
+function search(aQuery, aFinishImmediately, aCallback, aCategoryType) {
+ // Point search to the correct xml test file
+ Services.prefs.setCharPref(PREF_GETADDONS_GETSEARCHRESULTS, NO_MATCH_URL);
+
+ aCategoryType = aCategoryType ? aCategoryType : "search";
+
+ var searchBox = gManagerWindow.document.getElementById("header-search");
+ searchBox.value = aQuery;
+
+ EventUtils.synthesizeMouseAtCenter(searchBox, { }, gManagerWindow);
+ EventUtils.synthesizeKey("VK_RETURN", { }, gManagerWindow);
+
+ var finishImmediately = true;
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, aCategoryType, "Expected category view should be selected");
+ is(gCategoryUtilities.isTypeVisible("search"), aCategoryType == "search",
+ "Search category should only be visible if it is the current view");
+ is(finishImmediately, aFinishImmediately, "Search should finish immediately only if expected");
+
+ aCallback();
+ });
+
+ finishImmediately = false
+ if (!aFinishImmediately)
+ check_is_searching(true);
+}
+
+/*
+ * Get item for a specific add-on by name
+ *
+ * @param aName
+ * The name of the add-on to search for
+ * @return Row of add-on if found, null otherwise
+ */
+function get_addon_item(aName) {
+ var id = aName + "@tests.mozilla.org";
+ var list = gManagerWindow.document.getElementById("search-list");
+ var rows = list.getElementsByTagName("richlistitem");
+ for (let row of rows) {
+ if (row.mAddon && row.mAddon.id == id)
+ return row;
+ }
+
+ return null;
+}
+
+add_test(function() {
+ search("settings", false, function() {
+ var localFilter = gManagerWindow.document.getElementById("search-filter-local");
+ EventUtils.synthesizeMouseAtCenter(localFilter, { }, gManagerWindow);
+
+ var item = get_addon_item("inlinesettings2");
+ // Force the XBL binding to apply.
+ item.clientTop;
+ var button = gManagerWindow.document.getAnonymousElementByAttribute(item, "anonid", "preferences-btn");
+ is_element_visible(button, "Preferences button should be visible");
+
+ EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ is(gManagerWindow.gViewController.currentViewObj, gManagerWindow.gDetailView, "View should have changed to detail");
+
+ var searchCategory = gManagerWindow.document.getElementById("category-search");
+ EventUtils.synthesizeMouseAtCenter(searchCategory, { }, gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ is(gManagerWindow.gViewController.currentViewObj, gManagerWindow.gSearchView, "View should have changed back to search");
+
+ // Reset filter to remote to avoid breaking later tests.
+ var remoteFilter = gManagerWindow.document.getElementById("search-filter-remote");
+ EventUtils.synthesizeMouseAtCenter(remoteFilter, { }, gManagerWindow);
+ run_next_test();
+ });
+ });
+ });
+});