Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test the behavior for enter key.
add_setup(async function () {
await gCUITestUtils.addSearchBar();
await SearchTestUtils.installSearchExtension({}, { setAsDefault: true });
registerCleanupFunction(async function () {
gCUITestUtils.removeSearchBar();
});
});
add_task(async function searchOnEnterSoon() {
info("Search on Enter as soon as typing a char");
const win = await BrowserTestUtils.openNewBrowserWindow();
const browser = win.gBrowser.selectedBrowser;
const browserSearch = win.BrowserSearch;
const onPageHide = SpecialPowers.spawn(browser, [], () => {
return new Promise(resolve => {
content.addEventListener("pagehide", () => {
resolve();
});
});
});
const onResult = SpecialPowers.spawn(browser, [], () => {
return new Promise(resolve => {
content.addEventListener("keyup", () => {
resolve("keyup");
});
content.addEventListener("unload", () => {
resolve("unload");
});
});
});
info("Focus on the search bar");
const searchBarTextBox = browserSearch.searchBar.textbox;
EventUtils.synthesizeMouseAtCenter(searchBarTextBox, {}, win);
const ownerDocument = browser.ownerDocument;
is(ownerDocument.activeElement, searchBarTextBox, "The search bar has focus");
info("Keydown a char and Enter");
EventUtils.synthesizeKey("x", { type: "keydown" }, win);
EventUtils.synthesizeKey("KEY_Enter", { type: "keydown" }, win);
info("Wait for pagehide event in the content");
await onPageHide;
is(
ownerDocument.activeElement,
searchBarTextBox,
"The search bar still has focus"
);
// Keyup both key as soon as pagehide event happens.
EventUtils.synthesizeKey("x", { type: "keyup" }, win);
EventUtils.synthesizeKey("KEY_Enter", { type: "keyup" }, win);
await TestUtils.waitForCondition(
() => ownerDocument.activeElement === browser,
"Wait for focus to be moved to the browser"
);
info("The focus is moved to the browser");
// Check whether keyup event is not captured before unload event happens.
const result = await onResult;
is(result, "unload", "Keyup event is not captured");
await BrowserTestUtils.closeWindow(win);
});
add_task(async function typeCharWhileProcessingEnter() {
info("Typing a char while processing enter key");
const win = await BrowserTestUtils.openNewBrowserWindow();
const browser = win.gBrowser.selectedBrowser;
const searchBar = win.BrowserSearch.searchBar;
const SEARCH_WORD = "test";
const onLoad = BrowserTestUtils.browserLoaded(
browser,
false,
`https://example.com/?q=${SEARCH_WORD}`
);
searchBar.textbox.focus();
searchBar.textbox.value = SEARCH_WORD;
info("Keydown Enter");
EventUtils.synthesizeKey("KEY_Enter", { type: "keydown" }, win);
await TestUtils.waitForCondition(
() => searchBar._needBrowserFocusAtEnterKeyUp,
"Wait for starting process for the enter key"
);
info("Keydown a char");
EventUtils.synthesizeKey("x", { type: "keydown" }, win);
info("Keyup both");
EventUtils.synthesizeKey("x", { type: "keyup" }, win);
EventUtils.synthesizeKey("KEY_Enter", { type: "keyup" }, win);
Assert.equal(
searchBar.textbox.value,
SEARCH_WORD,
"The value of searchbar is correct"
);
await onLoad;
Assert.ok("Browser loaded the correct url");
// Cleanup.
await BrowserTestUtils.closeWindow(win);
});
add_task(async function keyupEnterWhilePressingMeta() {
const win = await BrowserTestUtils.openNewBrowserWindow();
const browser = win.gBrowser.selectedBrowser;
const searchBar = win.BrowserSearch.searchBar;
info("Keydown Meta+Enter");
searchBar.textbox.focus();
searchBar.textbox.value = "";
EventUtils.synthesizeKey(
"KEY_Enter",
{ type: "keydown", metaKey: true },
win
);
// Pressing Enter key while pressing Meta key, and next, even when releasing
// Enter key before releasing Meta key, the keyup event is not fired.
// Therefor, we fire Meta keyup event only.
info("Keyup Meta");
EventUtils.synthesizeKey("KEY_Meta", { type: "keyup" }, win);
await TestUtils.waitForCondition(
() => browser.ownerDocument.activeElement === browser,
"Wait for focus to be moved to the browser"
);
info("The focus is moved to the browser");
info("Check whether we can input on the search bar");
searchBar.textbox.focus();
EventUtils.synthesizeKey("a", {}, win);
is(searchBar.textbox.value, "a", "Can input a char");
// Cleanup.
await BrowserTestUtils.closeWindow(win);
});