Please see the bug for the motivation. This adds a new `SuggestFeature.primaryUserControlledPreference` getter that returns the feature-specific pref that lets the user toggle on/off the feature. That way we can add `QuickSuggest.clearDismissedSuggestions()`, which goes through each feature and clears that pref, and `canClearDismissedSuggestions()`, which goes through and checks whether there are any prefs that can be cleared. I also added a couple of notification topics for dismissals that the settings UI uses to update the disabled state of its Restore button. All of this will let us more easily move to the Suggest Rust component's dismissal API too, which we should sooner or later. Depends on D244865 Differential Revision: https://phabricator.services.mozilla.com/D244866
74 lines
2.2 KiB
JavaScript
74 lines
2.2 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, {
|
|
QuickSuggest: "resource:///modules/QuickSuggest.sys.mjs",
|
|
UrlbarResult: "resource:///modules/UrlbarResult.sys.mjs",
|
|
UrlbarUtils: "resource:///modules/UrlbarUtils.sys.mjs",
|
|
});
|
|
|
|
/**
|
|
* A feature that manages offline (non-Merino) Wikipedia suggestions. Online
|
|
* (Merino) Wikipedia suggestions don't have their own `SuggestProvider`.
|
|
* Instead they're handled directly by `UrlbarProviderQuickSuggest`.
|
|
*/
|
|
export class OfflineWikipediaSuggestions extends SuggestProvider {
|
|
get enablingPreferences() {
|
|
return ["suggest.quicksuggest.nonsponsored"];
|
|
}
|
|
|
|
get primaryUserControlledPreference() {
|
|
// Wikipedia suggestions can't be toggled separately from nonsponsored
|
|
// suggestions.
|
|
return null;
|
|
}
|
|
|
|
get rustSuggestionType() {
|
|
return "Wikipedia";
|
|
}
|
|
|
|
isSuggestionSponsored() {
|
|
return false;
|
|
}
|
|
|
|
getSuggestionTelemetryType() {
|
|
return "adm_nonsponsored";
|
|
}
|
|
|
|
makeResult(queryContext, suggestion) {
|
|
return new lazy.UrlbarResult(
|
|
lazy.UrlbarUtils.RESULT_TYPE.URL,
|
|
lazy.UrlbarUtils.RESULT_SOURCE.SEARCH,
|
|
...lazy.UrlbarResult.payloadAndSimpleHighlights(queryContext.tokens, {
|
|
url: suggestion.url,
|
|
title: suggestion.title,
|
|
qsSuggestion: [
|
|
suggestion.fullKeyword,
|
|
lazy.UrlbarUtils.HIGHLIGHT.SUGGESTED,
|
|
],
|
|
sponsoredAdvertiser: "Wikipedia",
|
|
sponsoredIabCategory: "5 - Education",
|
|
isBlockable: true,
|
|
isManageable: true,
|
|
})
|
|
);
|
|
}
|
|
|
|
onEngagement(queryContext, controller, details, _searchString) {
|
|
let { result } = details;
|
|
|
|
// Handle commands. These suggestions support the Dismissal and Manage
|
|
// commands. Dismissal is the only one we need to handle here. `UrlbarInput`
|
|
// handles Manage.
|
|
if (details.selType == "dismiss") {
|
|
lazy.QuickSuggest.blockedSuggestions.blockResult(result);
|
|
controller.removeResult(result);
|
|
}
|
|
}
|
|
}
|