summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/unit/test_providerTabToSearch_partialHost.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/unit/test_providerTabToSearch_partialHost.js')
-rw-r--r--browser/components/urlbar/tests/unit/test_providerTabToSearch_partialHost.js214
1 files changed, 214 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/unit/test_providerTabToSearch_partialHost.js b/browser/components/urlbar/tests/unit/test_providerTabToSearch_partialHost.js
new file mode 100644
index 0000000000..d2391c0f43
--- /dev/null
+++ b/browser/components/urlbar/tests/unit/test_providerTabToSearch_partialHost.js
@@ -0,0 +1,214 @@
+/* Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Search engine origins are autofilled normally when they get over the
+// threshold, though certain origins redirect to localized subdomains, that
+// the user is unlikely to type, for example wikipedia.org => en.wikipedia.org.
+// We should get a tab to search result also for these cases, where a normal
+// autofill wouldn't happen.
+
+"use strict";
+
+ChromeUtils.defineESModuleGetters(this, {
+ UrlbarProviderAutofill: "resource:///modules/UrlbarProviderAutofill.sys.mjs",
+});
+
+add_task(async function setup() {
+ Services.prefs.setBoolPref("browser.urlbar.suggest.searches", false);
+ Services.prefs.setBoolPref("browser.urlbar.suggest.quickactions", false);
+ // Disable tab-to-search onboarding results.
+ Services.prefs.setIntPref(
+ "browser.urlbar.tabToSearch.onboard.interactionsLeft",
+ 0
+ );
+ Services.prefs.setBoolPref(
+ "browser.search.separatePrivateDefault.ui.enabled",
+ false
+ );
+
+ registerCleanupFunction(() => {
+ Services.prefs.clearUserPref("browser.urlbar.suggest.searches");
+ Services.prefs.clearUserPref("browser.urlbar.suggest.quickactions");
+ Services.prefs.clearUserPref(
+ "browser.search.separatePrivateDefault.ui.enabled"
+ );
+ Services.prefs.clearUserPref(
+ "browser.urlbar.tabToSearch.onboard.interactionsLeft"
+ );
+ });
+});
+
+add_task(async function test() {
+ let url = "https://en.example.com/";
+ await SearchTestUtils.installSearchExtension(
+ {
+ name: "TestEngine",
+ search_url: url,
+ },
+ { setAsDefault: true }
+ );
+
+ // Make sure the engine domain would be autofilled.
+ await PlacesUtils.bookmarks.insert({
+ url,
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "bookmark",
+ });
+
+ info("Test matching cases");
+
+ for (let searchStr of ["ex", "example.c"]) {
+ info("Searching for " + searchStr);
+ let context = createContext(searchStr, { isPrivate: false });
+ await check_results({
+ context,
+ matches: [
+ makeSearchResult(context, {
+ engineName: Services.search.defaultEngine.name,
+ providerName: "HeuristicFallback",
+ heuristic: true,
+ }),
+ makeSearchResult(context, {
+ engineName: "TestEngine",
+ engineIconUri: UrlbarUtils.ICON.SEARCH_GLASS,
+ uri: "en.example.",
+ providesSearchMode: true,
+ query: "",
+ providerName: "TabToSearch",
+ satisfiesAutofillThreshold: true,
+ }),
+ makeBookmarkResult(context, {
+ uri: url,
+ title: "bookmark",
+ }),
+ ],
+ });
+ }
+
+ info("Test a www engine");
+ let url2 = "https://www.it.mochi.com/";
+ await SearchTestUtils.installSearchExtension({
+ name: "TestEngine2",
+ search_url: url2,
+ });
+
+ let engine2 = Services.search.getEngineByName("TestEngine2");
+ // Make sure the engine domain would be autofilled.
+ await PlacesUtils.bookmarks.insert({
+ url: url2,
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "bookmark",
+ });
+
+ for (let searchStr of ["mo", "mochi.c"]) {
+ info("Searching for " + searchStr);
+ let context = createContext(searchStr, { isPrivate: false });
+ await check_results({
+ context,
+ matches: [
+ makeSearchResult(context, {
+ engineName: Services.search.defaultEngine.name,
+ providerName: "HeuristicFallback",
+ heuristic: true,
+ }),
+ makeSearchResult(context, {
+ engineName: engine2.name,
+ engineIconUri: UrlbarUtils.ICON.SEARCH_GLASS,
+ uri: "www.it.mochi.",
+ providesSearchMode: true,
+ query: "",
+ providerName: "TabToSearch",
+ satisfiesAutofillThreshold: true,
+ }),
+ makeBookmarkResult(context, {
+ uri: url2,
+ title: "bookmark",
+ }),
+ ],
+ });
+ }
+
+ info("Test non-matching cases");
+
+ for (let searchStr of ["www.en", "www.ex", "https://ex"]) {
+ info("Searching for " + searchStr);
+ let context = createContext(searchStr, { isPrivate: false });
+ // We don't want to generate all the possible results here, just check
+ // the heuristic result is not autofill.
+ let controller = UrlbarTestUtils.newMockController();
+ await UrlbarProvidersManager.startQuery(context, controller);
+ Assert.ok(context.results[0].heuristic, "Check heuristic result");
+ Assert.notEqual(context.results[0].providerName, "Autofill");
+ }
+
+ info("Tab-to-search is not shown when an unrelated site is autofilled.");
+ let wikiUrl = "https://wikipedia.org/";
+ await SearchTestUtils.installSearchExtension({
+ name: "FakeWikipedia",
+ search_url: url,
+ });
+ let wikiEngine = Services.search.getEngineByName("TestEngine");
+
+ // Make sure that wikiUrl will pass getTopHostOverThreshold.
+ await PlacesUtils.bookmarks.insert({
+ url: wikiUrl,
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "Wikipedia",
+ });
+
+ // Make sure an unrelated www site is autofilled.
+ let wwwUrl = "https://www.example.com";
+ await PlacesUtils.bookmarks.insert({
+ url: wwwUrl,
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "Example",
+ });
+
+ let searchStr = "w";
+ let context = createContext(searchStr, {
+ isPrivate: false,
+ sources: [UrlbarUtils.RESULT_SOURCE.BOOKMARKS],
+ });
+ let host = await UrlbarProviderAutofill.getTopHostOverThreshold(context, [
+ wikiEngine.searchUrlDomain,
+ ]);
+ Assert.equal(
+ host,
+ wikiEngine.searchUrlDomain,
+ "The search satisfies the autofill threshold requirement."
+ );
+ await check_results({
+ context,
+ autofilled: "www.example.com/",
+ completed: "https://www.example.com/",
+ matches: [
+ makeVisitResult(context, {
+ uri: `${wwwUrl}/`,
+ title: "Example",
+ heuristic: true,
+ providerName: "Autofill",
+ }),
+ // Note that tab-to-search is not shown.
+ makeBookmarkResult(context, {
+ uri: wikiUrl,
+ title: "Wikipedia",
+ }),
+ makeBookmarkResult(context, {
+ uri: url2,
+ title: "bookmark",
+ }),
+ ],
+ });
+
+ info("Restricting to history should not autofill our bookmark");
+ context = createContext("ex", {
+ isPrivate: false,
+ sources: [UrlbarUtils.RESULT_SOURCE.HISTORY],
+ });
+ let controller = UrlbarTestUtils.newMockController();
+ await UrlbarProvidersManager.startQuery(context, controller);
+ Assert.ok(context.results[0].heuristic, "Check heuristic result");
+ Assert.notEqual(context.results[0].providerName, "Autofill");
+
+ await cleanupPlaces();
+});