mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 21:00:42 +02:00
Differential Revision: https://phabricator.services.mozilla.com/D49652 --HG-- extra : moz-landing-system : lando
114 lines
3.3 KiB
JavaScript
114 lines
3.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { UrlbarTestUtils } = ChromeUtils.import(
|
|
"resource://testing-common/UrlbarTestUtils.jsm"
|
|
);
|
|
|
|
const kSearchEngineID = "browser_urifixup_search_engine";
|
|
const kSearchEngineURL = "http://example.com/?search={searchTerms}";
|
|
const kPrivateSearchEngineID = "browser_urifixup_search_engine_private";
|
|
const kPrivateSearchEngineURL = "http://example.com/?private={searchTerms}";
|
|
|
|
add_task(async function setup() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.search.separatePrivateDefault.ui.enabled", true],
|
|
["browser.search.separatePrivateDefault", true],
|
|
],
|
|
});
|
|
|
|
let oldCurrentEngine = await Services.search.getDefault();
|
|
let oldPrivateEngine = await Services.search.getDefaultPrivate();
|
|
|
|
// Add new fake search engines.
|
|
let newCurrentEngine = await Services.search.addEngineWithDetails(
|
|
kSearchEngineID,
|
|
{
|
|
method: "get",
|
|
template: kSearchEngineURL,
|
|
}
|
|
);
|
|
await Services.search.setDefault(newCurrentEngine);
|
|
|
|
let newPrivateEngine = await Services.search.addEngineWithDetails(
|
|
kPrivateSearchEngineID,
|
|
{
|
|
method: "get",
|
|
template: kPrivateSearchEngineURL,
|
|
}
|
|
);
|
|
await Services.search.setDefaultPrivate(newPrivateEngine);
|
|
|
|
// Remove the fake engines when done.
|
|
registerCleanupFunction(async () => {
|
|
if (oldCurrentEngine) {
|
|
await Services.search.setDefault(oldCurrentEngine);
|
|
}
|
|
if (oldPrivateEngine) {
|
|
await Services.search.setDefault(oldPrivateEngine);
|
|
}
|
|
await Services.search.removeEngine(newCurrentEngine);
|
|
await Services.search.removeEngine(newPrivateEngine);
|
|
});
|
|
});
|
|
|
|
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);
|
|
}
|