tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }