71 lines
2.4 KiB
JavaScript
71 lines
2.4 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
import { SuggestProvider } from "resource:///modules/urlbar/private/SuggestFeature.sys.mjs";
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineESModuleGetters(lazy, {
|
|
UrlbarPrefs: "resource:///modules/UrlbarPrefs.sys.mjs",
|
|
UrlbarResult: "resource:///modules/UrlbarResult.sys.mjs",
|
|
UrlbarUtils: "resource:///modules/UrlbarUtils.sys.mjs",
|
|
});
|
|
|
|
/**
|
|
* A feature for exposure suggestions.
|
|
*/
|
|
export class ExposureSuggestions extends SuggestProvider {
|
|
get enablingPreferences() {
|
|
return ["quicksuggest.exposureSuggestionTypes"];
|
|
}
|
|
|
|
get additionalEnablingPredicate() {
|
|
return !!this.exposureSuggestionTypes.size;
|
|
}
|
|
|
|
get rustSuggestionType() {
|
|
return "Exposure";
|
|
}
|
|
|
|
get rustProviderConstraints() {
|
|
return {
|
|
exposureSuggestionTypes: [...this.exposureSuggestionTypes],
|
|
};
|
|
}
|
|
|
|
getSuggestionTelemetryType() {
|
|
return "exposure";
|
|
}
|
|
|
|
get exposureSuggestionTypes() {
|
|
// UrlbarPrefs converts this pref to a `Set` of type strings.
|
|
return lazy.UrlbarPrefs.get("quicksuggest.exposureSuggestionTypes");
|
|
}
|
|
|
|
async makeResult(queryContext, suggestion, _searchString) {
|
|
// It doesn't really matter what kind of result we return since it won't be
|
|
// shown. Use a dynamic result since that kind of makes sense and there are
|
|
// no requirements for its payload other than `dynamicType`.
|
|
return Object.assign(
|
|
new lazy.UrlbarResult(
|
|
lazy.UrlbarUtils.RESULT_TYPE.DYNAMIC,
|
|
lazy.UrlbarUtils.RESULT_SOURCE.SEARCH,
|
|
{
|
|
// Include `exposureSuggestionType` so tests can verify a suggestion
|
|
// of the expected type is returned. We don't use it otherwise.
|
|
exposureSuggestionType: suggestion.suggestionType,
|
|
dynamicType: "exposure",
|
|
}
|
|
),
|
|
{
|
|
// Exposure suggestions should always be hidden, and it's assumed that
|
|
// exposure telemetry should be recorded for them, so as a convenience
|
|
// set `exposureTelemetry` here. Otherwise experiments would need to set
|
|
// the corresponding Nimbus variables properly. (They can still do that,
|
|
// it's just not required.)
|
|
exposureTelemetry: lazy.UrlbarUtils.EXPOSURE_TELEMETRY.HIDDEN,
|
|
}
|
|
);
|
|
}
|
|
}
|