diff options
Diffstat (limited to 'browser/components/customizableui/test/browser_901207_searchbar_in_panel.js')
-rw-r--r-- | browser/components/customizableui/test/browser_901207_searchbar_in_panel.js | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/browser/components/customizableui/test/browser_901207_searchbar_in_panel.js b/browser/components/customizableui/test/browser_901207_searchbar_in_panel.js new file mode 100644 index 000000000..3bc449add --- /dev/null +++ b/browser/components/customizableui/test/browser_901207_searchbar_in_panel.js @@ -0,0 +1,113 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +logActiveElement(); + +function* waitForSearchBarFocus() +{ + let searchbar = document.getElementById("searchbar"); + yield waitForCondition(function () { + logActiveElement(); + return document.activeElement === searchbar.textbox.inputField; + }); +} + +// Ctrl+K should open the menu panel and focus the search bar if the search bar is in the panel. +add_task(function*() { + let searchbar = document.getElementById("searchbar"); + gCustomizeMode.addToPanel(searchbar); + let placement = CustomizableUI.getPlacementOfWidget("search-container"); + is(placement.area, CustomizableUI.AREA_PANEL, "Should be in panel"); + + let shownPanelPromise = promisePanelShown(window); + sendWebSearchKeyCommand(); + yield shownPanelPromise; + + yield waitForSearchBarFocus(); + + let hiddenPanelPromise = promisePanelHidden(window); + EventUtils.synthesizeKey("VK_ESCAPE", {}); + yield hiddenPanelPromise; + CustomizableUI.reset(); +}); + +// Ctrl+K should give focus to the searchbar when the searchbar is in the menupanel and the panel is already opened. +add_task(function*() { + let searchbar = document.getElementById("searchbar"); + gCustomizeMode.addToPanel(searchbar); + let placement = CustomizableUI.getPlacementOfWidget("search-container"); + is(placement.area, CustomizableUI.AREA_PANEL, "Should be in panel"); + + let shownPanelPromise = promisePanelShown(window); + PanelUI.toggle({type: "command"}); + yield shownPanelPromise; + + sendWebSearchKeyCommand(); + + yield waitForSearchBarFocus(); + + let hiddenPanelPromise = promisePanelHidden(window); + EventUtils.synthesizeKey("VK_ESCAPE", {}); + yield hiddenPanelPromise; + CustomizableUI.reset(); +}); + +// Ctrl+K should open the overflow panel and focus the search bar if the search bar is overflowed. +add_task(function*() { + this.originalWindowWidth = window.outerWidth; + let navbar = document.getElementById(CustomizableUI.AREA_NAVBAR); + ok(!navbar.hasAttribute("overflowing"), "Should start with a non-overflowing toolbar."); + ok(CustomizableUI.inDefaultState, "Should start in default state."); + + window.resizeTo(360, window.outerHeight); + yield waitForCondition(() => navbar.getAttribute("overflowing") == "true"); + ok(!navbar.querySelector("#search-container"), "Search container should be overflowing"); + + let shownPanelPromise = promiseOverflowShown(window); + sendWebSearchKeyCommand(); + yield shownPanelPromise; + + let chevron = document.getElementById("nav-bar-overflow-button"); + yield waitForCondition(() => chevron.open); + + yield waitForSearchBarFocus(); + + let hiddenPanelPromise = promiseOverflowHidden(window); + EventUtils.synthesizeKey("VK_ESCAPE", {}); + yield hiddenPanelPromise; + navbar = document.getElementById(CustomizableUI.AREA_NAVBAR); + window.resizeTo(this.originalWindowWidth, window.outerHeight); + yield waitForCondition(() => !navbar.hasAttribute("overflowing")); + ok(!navbar.hasAttribute("overflowing"), "Should not have an overflowing toolbar."); +}); + +// Ctrl+K should focus the search bar if it is in the navbar and not overflowing. +add_task(function*() { + let placement = CustomizableUI.getPlacementOfWidget("search-container"); + is(placement.area, CustomizableUI.AREA_NAVBAR, "Should be in nav-bar"); + + sendWebSearchKeyCommand(); + + yield waitForSearchBarFocus(); +}); + + +function sendWebSearchKeyCommand() { + if (Services.appinfo.OS === "Darwin") + EventUtils.synthesizeKey("k", { accelKey: true }); + else + EventUtils.synthesizeKey("k", { ctrlKey: true }); +} + +function logActiveElement() { + let element = document.activeElement; + let str = ""; + while (element && element.parentNode) { + str = " (" + element.localName + "#" + element.id + "." + [...element.classList].join(".") + ") >" + str; + element = element.parentNode; + } + info("Active element: " + element ? str : "null"); +} |