| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_OMNIBOX_BROWSER_FEATURED_SEARCH_PROVIDER_H_ |
| #define COMPONENTS_OMNIBOX_BROWSER_FEATURED_SEARCH_PROVIDER_H_ |
| |
| #include <stddef.h> |
| |
| #include <string> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "components/omnibox/browser/autocomplete_match.h" |
| #include "components/omnibox/browser/autocomplete_provider.h" |
| #include "components/search_engines/template_url_service.h" |
| |
| class AutocompleteInput; |
| class AutocompleteProviderClient; |
| class TemplateURLService; |
| class AutocompleteResult; |
| |
| // This is the provider for built-in URLs, such as about:settings and |
| // chrome://version, as well as the built-in Starter Pack search engines. |
| class FeaturedSearchProvider : public AutocompleteProvider { |
| public: |
| explicit FeaturedSearchProvider(AutocompleteProviderClient* client); |
| FeaturedSearchProvider(const FeaturedSearchProvider&) = delete; |
| FeaturedSearchProvider& operator=(const FeaturedSearchProvider&) = delete; |
| |
| // AutocompleteProvider: |
| void Start(const AutocompleteInput& input, bool minimal_changes) override; |
| void DeleteMatch(const AutocompleteMatch& match) override; |
| |
| // Called by `AutocompleteController` after ranking has settled. Increments |
| // IPH shown counts. |
| void RegisterDisplayedMatches(const AutocompleteResult& result); |
| |
| private: |
| ~FeaturedSearchProvider() override; |
| |
| // Populates `matches_` with matching starter pack keywords such as @history, |
| // and @bookmarks |
| void AddFeaturedKeywordMatches(const AutocompleteInput& input); |
| |
| // Constructs an AutocompleteMatch for starter pack suggestions such as |
| // @bookmarks, @history, etc. and adds it to `matches_`. |
| void AddStarterPackMatch(const TemplateURL& template_url, |
| const AutocompleteInput& input); |
| |
| // Constructs a NULL_RESULT_MESSAGE match that is informational only and |
| // cannot be acted upon. This match delivers an IPH message directing users |
| // to the starter pack feature. |
| void AddIPHMatch(IphType iph_type, |
| const std::u16string& iph_contents, |
| const std::u16string& matched_term, |
| const std::u16string& iph_link_text, |
| const GURL& iph_link_url, |
| int relevance, |
| bool deletable); |
| |
| void AddFeaturedEnterpriseSearchMatch(const TemplateURL& template_url, |
| const AutocompleteInput& input); |
| |
| // Returns whether to show the IPH match for `iph_type`. |
| bool ShouldShowIPH(IphType iph_type) const; |
| |
| // Whether to show the @gemini keyword promo row in zero-state. |
| bool ShouldShowGeminiIPHMatch() const; |
| void AddGeminiIPHMatch(); |
| |
| // Whether to show the Enterprise Search Aggregator keyword promo row |
| // in zero-state. |
| bool ShouldShowEnterpriseSearchAggregatorIPHMatch() const; |
| void AddEnterpriseSearchAggregatorIPHMatch(); |
| |
| // Whether to show the Featured Enterprise Site Search keyword promo row in |
| // zero-state. |
| bool ShouldShowFeaturedEnterpriseSiteSearchIPHMatch() const; |
| void AddFeaturedEnterpriseSiteSearchIPHMatch(); |
| |
| // Whether to show the History Embeddings promo row in @history scope. |
| bool ShouldShowHistoryEmbeddingsSettingsPromoIphMatch() const; |
| void AddHistoryEmbeddingsSettingsPromoIphMatch(); |
| |
| // Whether to show the History Embeddings disclaimer row in @history scope. |
| bool ShouldShowHistoryEmbeddingsDisclaimerIphMatch() const; |
| void AddHistoryEmbeddingsDisclaimerIphMatch(); |
| |
| // Whether to show the @history keyword promo row in zero-state. |
| bool ShouldShowHistoryScopePromoIphMatch() const; |
| void AddHistoryScopePromoIphMatch(); |
| |
| // Whether to show the @history (embeddings) keyword promo row in zero-state. |
| bool ShouldShowHistoryEmbeddingsScopePromoIphMatch() const; |
| void AddHistoryEmbeddingsScopePromoIphMatch(); |
| |
| raw_ptr<AutocompleteProviderClient> client_; |
| raw_ptr<TemplateURLService> template_url_service_; |
| |
| // The number of times the IPH row has been shown so far in this browser |
| // session. Shared by all IPH types. Reset when, e.g., the user opens a new |
| // browser window. |
| size_t iph_shown_in_browser_session_count_{0}; |
| |
| // Whether an IPH match was shown during the current omnibox session. Used to |
| // avoid incrementing `iph_shown_in_browser_session_count_` more than once per |
| // omnibox session. Reset when, e.g., the user refocuses the omnibox. |
| // omnibox. |
| bool iph_shown_in_omnibox_session_ = false; |
| }; |
| |
| #endif // COMPONENTS_OMNIBOX_BROWSER_FEATURED_SEARCH_PROVIDER_H_ |