Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* 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/. */
// These tests check the behavior of the Urlbar when search terms are shown
// and the user switches between tabs.
let defaultTestEngine;
// The main search keyword used in tests
const SEARCH_STRING = "chocolate cake";
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.showSearchTerms.featureGate", true]],
});
await SearchTestUtils.installSearchExtension(
{
name: "MozSearch",
search_url: "https://www.example.com/",
search_url_get_params: "q={searchTerms}&pc=fake_code",
},
{ setAsDefault: true }
);
defaultTestEngine = Services.search.getEngineByName("MozSearch");
registerCleanupFunction(async function () {
await PlacesUtils.history.clear();
});
});
async function searchWithTab(
searchString,
tab = null,
engine = defaultTestEngine
) {
if (!tab) {
tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
}
let [expectedSearchUrl] = UrlbarUtils.getSearchQueryUrl(engine, searchString);
let browserLoadedPromise = BrowserTestUtils.browserLoaded(
tab.linkedBrowser,
false,
expectedSearchUrl
);
gURLBar.focus();
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
waitForFocus,
value: searchString,
fireInputEvent: true,
});
EventUtils.synthesizeKey("KEY_Enter");
await browserLoadedPromise;
assertSearchStringIsInUrlbar(searchString);
return { tab, expectedSearchUrl };
}
// Users should be able to search, change the tab, and come
// back to the original tab to see the search term again
add_task(async function change_tab() {
let { tab: tab1 } = await searchWithTab(SEARCH_STRING);
let { tab: tab2 } = await searchWithTab("another keyword");
let { tab: tab3 } = await searchWithTab("yet another keyword");
await BrowserTestUtils.switchTab(gBrowser, tab1);
assertSearchStringIsInUrlbar(SEARCH_STRING);
await BrowserTestUtils.switchTab(gBrowser, tab2);
assertSearchStringIsInUrlbar("another keyword");
await BrowserTestUtils.switchTab(gBrowser, tab3);
assertSearchStringIsInUrlbar("yet another keyword");
BrowserTestUtils.removeTab(tab1);
BrowserTestUtils.removeTab(tab2);
BrowserTestUtils.removeTab(tab3);
});
// If a user types in the URL bar, and the user goes to a
// different tab, the original tab should still contain the
// text written by the user.
add_task(async function user_overwrites_search_term() {
let { tab: tab1 } = await searchWithTab(SEARCH_STRING);
gURLBar.focus();
gURLBar.select();
EventUtils.sendString("another_word");
Assert.notEqual(
gURLBar.value,
SEARCH_STRING,
`Search string ${SEARCH_STRING} should not be in the url bar`
);
// Open a new tab, switch back to the first and
// check that the user typed value is still there.
let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser);
await BrowserTestUtils.switchTab(gBrowser, tab1);
Assert.equal(
gURLBar.value,
"another_word",
"another_word should be in the url bar"
);
BrowserTestUtils.removeTab(tab1);
BrowserTestUtils.removeTab(tab2);
});
// If a user clears the URL bar, and goes to a different tab,
// and returns to the initial tab, it should show the search term again.
add_task(async function user_overwrites_search_term() {
let { tab: tab1 } = await searchWithTab(SEARCH_STRING);
gURLBar.focus();
gURLBar.select();
EventUtils.sendKey("delete");
Assert.equal(gURLBar.value, "", "Empty string should be in url bar.");
// Open a new tab, switch back to the first and check
// the blank string is replaced with the search string.
let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser);
await BrowserTestUtils.switchTab(gBrowser, tab1);
assertSearchStringIsInUrlbar(SEARCH_STRING, {
pageProxyState: "invalid",
userTypedValue: "",
});
BrowserTestUtils.removeTab(tab1);
BrowserTestUtils.removeTab(tab2);
});