104 lines
3 KiB
JavaScript
104 lines
3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { UrlbarTestUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/UrlbarTestUtils.sys.mjs"
|
|
);
|
|
const { SearchTestUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/SearchTestUtils.sys.mjs"
|
|
);
|
|
|
|
SearchTestUtils.init(this);
|
|
|
|
const kSearchEngineID = "browser_urifixup_search_engine";
|
|
const kSearchEngineURL = "https://example.com/?search={searchTerms}";
|
|
const kPrivateSearchEngineID = "browser_urifixup_search_engine_private";
|
|
const kPrivateSearchEngineURL = "https://example.com/?private={searchTerms}";
|
|
|
|
add_setup(async function () {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.search.separatePrivateDefault.ui.enabled", true],
|
|
["browser.search.separatePrivateDefault", true],
|
|
],
|
|
});
|
|
|
|
// Add new fake search engines.
|
|
await SearchTestUtils.installSearchExtension(
|
|
{
|
|
name: kSearchEngineID,
|
|
search_url: "https://example.com/",
|
|
search_url_get_params: "search={searchTerms}",
|
|
},
|
|
{ setAsDefault: true }
|
|
);
|
|
|
|
await SearchTestUtils.installSearchExtension(
|
|
{
|
|
name: kPrivateSearchEngineID,
|
|
search_url: "https://example.com/",
|
|
search_url_get_params: "private={searchTerms}",
|
|
},
|
|
{ setAsDefaultPrivate: true }
|
|
);
|
|
});
|
|
|
|
add_task(async function test() {
|
|
// Test both directly setting a value and pressing enter, or setting the
|
|
// value through input events, like the user would do.
|
|
const setValueFns = [
|
|
(value, win) => {
|
|
win.gURLBar.value = value;
|
|
},
|
|
(value, win) => {
|
|
return UrlbarTestUtils.promiseAutocompleteResultPopup({
|
|
window: win,
|
|
waitForFocus: SimpleTest.waitForFocus,
|
|
value,
|
|
});
|
|
},
|
|
];
|
|
|
|
for (let value of ["foo bar", "brokenprotocol:somethingelse"]) {
|
|
for (let setValueFn of setValueFns) {
|
|
for (let inPrivateWindow of [false, true]) {
|
|
await do_test(value, setValueFn, inPrivateWindow);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
async function do_test(value, setValueFn, inPrivateWindow) {
|
|
info(`Search ${value} in a ${inPrivateWindow ? "private" : "normal"} window`);
|
|
let win = await BrowserTestUtils.openNewBrowserWindow({
|
|
private: inPrivateWindow,
|
|
});
|
|
// Enter search terms and start a search.
|
|
win.gURLBar.focus();
|
|
await setValueFn(value, win);
|
|
|
|
EventUtils.synthesizeKey("KEY_Enter", {}, win);
|
|
|
|
// Check that we load the correct URL.
|
|
let escapedValue = encodeURIComponent(value).replace("%20", "+");
|
|
let searchEngineUrl = inPrivateWindow
|
|
? kPrivateSearchEngineURL
|
|
: kSearchEngineURL;
|
|
let expectedURL = searchEngineUrl.replace("{searchTerms}", escapedValue);
|
|
await BrowserTestUtils.browserLoaded(
|
|
win.gBrowser.selectedBrowser,
|
|
false,
|
|
expectedURL
|
|
);
|
|
// There should be at least one test.
|
|
Assert.equal(
|
|
win.gBrowser.selectedBrowser.currentURI.spec,
|
|
expectedURL,
|
|
"New tab should have loaded with expected url."
|
|
);
|
|
|
|
// Cleanup.
|
|
await BrowserTestUtils.closeWindow(win);
|
|
}
|