summaryrefslogtreecommitdiffstats
path: root/docshell/test/browser/browser_uriFixupIntegration.js
diff options
context:
space:
mode:
Diffstat (limited to 'docshell/test/browser/browser_uriFixupIntegration.js')
-rw-r--r--docshell/test/browser/browser_uriFixupIntegration.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/docshell/test/browser/browser_uriFixupIntegration.js b/docshell/test/browser/browser_uriFixupIntegration.js
new file mode 100644
index 0000000000..e00c5e0f63
--- /dev/null
+++ b/docshell/test/browser/browser_uriFixupIntegration.js
@@ -0,0 +1,114 @@
+/* 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);
+}