blob: a9abe27833af49f2e7db4c8294430ab64d42111f [file] [log] [blame]
// 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_