UrlbarProviderRestrictKeywords.sys.mjs (2446B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 /** 6 * This module exports a provider that offers restrict keywords for search mode. 7 */ 8 9 import { 10 UrlbarProvider, 11 UrlbarUtils, 12 } from "moz-src:///browser/components/urlbar/UrlbarUtils.sys.mjs"; 13 14 const lazy = {}; 15 16 ChromeUtils.defineESModuleGetters(lazy, { 17 UrlbarPrefs: "moz-src:///browser/components/urlbar/UrlbarPrefs.sys.mjs", 18 UrlbarResult: "moz-src:///browser/components/urlbar/UrlbarResult.sys.mjs", 19 UrlbarTokenizer: 20 "moz-src:///browser/components/urlbar/UrlbarTokenizer.sys.mjs", 21 }); 22 23 const RESTRICT_KEYWORDS_FEATURE_GATE = "searchRestrictKeywords.featureGate"; 24 25 /** 26 * Class used to create the provider. 27 */ 28 export class UrlbarProviderRestrictKeywords extends UrlbarProvider { 29 constructor() { 30 super(); 31 } 32 33 /** 34 * @returns {Values<typeof UrlbarUtils.PROVIDER_TYPE>} 35 */ 36 get type() { 37 return UrlbarUtils.PROVIDER_TYPE.HEURISTIC; 38 } 39 40 getPriority() { 41 return 1; 42 } 43 44 async isActive(queryContext) { 45 if (!lazy.UrlbarPrefs.getScotchBonnetPref(RESTRICT_KEYWORDS_FEATURE_GATE)) { 46 return false; 47 } 48 49 return !queryContext.searchMode && queryContext.trimmedSearchString == "@"; 50 } 51 52 /** 53 * Starts querying. 54 * 55 * @param {UrlbarQueryContext} queryContext 56 * @param {(provider: UrlbarProvider, result: UrlbarResult) => void} addCallback 57 * Callback invoked by the provider to add a new result. 58 */ 59 async startQuery(queryContext, addCallback) { 60 let instance = this.queryInstance; 61 let tokenToKeyword = await lazy.UrlbarTokenizer.getL10nRestrictKeywords(); 62 63 if (instance != this.queryInstance) { 64 return; 65 } 66 67 for (const [token, l10nRestrictKeywords] of tokenToKeyword.entries()) { 68 let icon = UrlbarUtils.LOCAL_SEARCH_MODES.find( 69 mode => mode.restrict == token 70 )?.icon; 71 72 let result = new lazy.UrlbarResult({ 73 type: UrlbarUtils.RESULT_TYPE.RESTRICT, 74 source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL, 75 hideRowLabel: true, 76 payload: { 77 icon, 78 keyword: token, 79 l10nRestrictKeywords, 80 providesSearchMode: true, 81 }, 82 highlights: { 83 l10nRestrictKeywords: UrlbarUtils.HIGHLIGHT.TYPED, 84 }, 85 }); 86 addCallback(this, result); 87 } 88 } 89 }