diff --git a/browser/components/urlbar/UrlbarProvidersManager.jsm b/browser/components/urlbar/UrlbarProvidersManager.jsm index 45b9c3bc3a72..c5549edb0fe1 100644 --- a/browser/components/urlbar/UrlbarProvidersManager.jsm +++ b/browser/components/urlbar/UrlbarProvidersManager.jsm @@ -441,31 +441,27 @@ function getAcceptableMatchSources(context) { // Check prefs and restriction tokens. switch (source) { case UrlbarUtils.RESULT_SOURCE.BOOKMARKS: - if (UrlbarPrefs.get("suggest.bookmark") && - (!restrictTokenType || - restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_BOOKMARK || - restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_TAG)) { + if (restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_BOOKMARK || + restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_TAG || + (!restrictTokenType && UrlbarPrefs.get("suggest.bookmark"))) { acceptedSources.push(source); } break; case UrlbarUtils.RESULT_SOURCE.HISTORY: - if (UrlbarPrefs.get("suggest.history") && - (!restrictTokenType || - restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_HISTORY)) { + if (restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_HISTORY || + (!restrictTokenType && UrlbarPrefs.get("suggest.history"))) { acceptedSources.push(source); } break; case UrlbarUtils.RESULT_SOURCE.SEARCH: - if (UrlbarPrefs.get("suggest.searches") && - (!restrictTokenType || - restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_SEARCH)) { + if (restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_SEARCH || + (!restrictTokenType && UrlbarPrefs.get("suggest.searches"))) { acceptedSources.push(source); } break; case UrlbarUtils.RESULT_SOURCE.TABS: - if (UrlbarPrefs.get("suggest.openpage") && - (!restrictTokenType || - restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_OPENPAGE)) { + if (restrictTokenType === UrlbarTokenizer.TYPE.RESTRICT_OPENPAGE || + (!restrictTokenType && UrlbarPrefs.get("suggest.openpage"))) { acceptedSources.push(source); } break; diff --git a/browser/components/urlbar/tests/unit/test_providersManager_filtering.js b/browser/components/urlbar/tests/unit/test_providersManager_filtering.js index d9f3f4b7805e..e5de3179b4ae 100644 --- a/browser/components/urlbar/tests/unit/test_providersManager_filtering.js +++ b/browser/components/urlbar/tests/unit/test_providersManager_filtering.js @@ -250,3 +250,85 @@ add_task(async function test_nofilter_immediate() { Assert.deepEqual(context.results[0].source, UrlbarUtils.RESULT_SOURCE.TABS, "Should find only a tab match"); }); + +add_task(async function test_nofilter_restrict() { + // Checks that even if a pref is disabled, we still return results on a + // restriction token. + let controller = new UrlbarController({ + browserWindow: { + location: { + href: AppConstants.BROWSER_CHROME_URL, + }, + }, + }); + + let matches = [ + new UrlbarResult(UrlbarUtils.RESULT_TYPE.TAB_SWITCH, + UrlbarUtils.RESULT_SOURCE.TABS, + { url: "http://mozilla.org/foo_tab/" }), + new UrlbarResult(UrlbarUtils.RESULT_TYPE.URL, + UrlbarUtils.RESULT_SOURCE.BOOKMARKS, + { url: "http://mozilla.org/foo_bookmark/" }), + new UrlbarResult(UrlbarUtils.RESULT_TYPE.URL, + UrlbarUtils.RESULT_SOURCE.HISTORY, + { url: "http://mozilla.org/foo_history/" }), + new UrlbarResult(UrlbarUtils.RESULT_TYPE.SEARCH, + UrlbarUtils.RESULT_SOURCE.SEARCH, + { engine: "noengine" }), + ]; + + /** + * A test provider. + */ + class TestProvider extends UrlbarProvider { + get name() { + return "MyProvider"; + } + get type() { + return UrlbarUtils.PROVIDER_TYPE.IMMEDIATE; + } + get sources() { + return [ + UrlbarUtils.RESULT_SOURCE.TABS, + UrlbarUtils.RESULT_SOURCE.BOOKMARKS, + UrlbarUtils.RESULT_SOURCE.HISTORY, + UrlbarUtils.RESULT_SOURCE.SEARCH, + ]; + } + async startQuery(context, add) { + Assert.ok(true, "expected provider was invoked"); + for (let match of matches) { + add(this, match); + } + } + cancelQuery(context) {} + } + UrlbarProvidersManager.registerProvider(new TestProvider()); + + let typeToPropertiesMap = new Map([ + ["HISTORY", {source: "HISTORY", pref: "history"}], + ["BOOKMARK", {source: "BOOKMARKS", pref: "bookmark"}], + ["OPENPAGE", {source: "TABS", pref: "openpage"}], + ["SEARCH", {source: "SEARCH", pref: "searches"}], + ]); + for (let [type, token] of Object.entries(UrlbarTokenizer.RESTRICT)) { + let properties = typeToPropertiesMap.get(type); + if (!properties) { + continue; + } + info("Restricting on " + type); + let context = createContext(token + " foo", { + providers: ["MyProvider"], + }); + // Disable the corresponding pref. + const pref = "browser.urlbar.suggest." + properties.pref; + info("Disabling " + pref); + Services.prefs.setBoolPref(pref, false); + await controller.startQuery(context, controller); + Assert.equal(context.results.length, 1, "Should find one result"); + Assert.equal(context.results[0].source, + UrlbarUtils.RESULT_SOURCE[properties.source], + "Check result source"); + Services.prefs.clearUserPref(pref); + } +});