#include "components/omnibox/browser/autocomplete_result.h"
#include <functional>
#include <iterator>
#include <optional>
#include <string>
#include <unordered_set>
#include <utility>
#include <vector>
#include "base/check.h"
#include "base/check_op.h"
#include "base/command_line.h"
#include "base/containers/adapters.h"
#include "base/containers/contains.h"
#include "base/debug/stack_trace.h"
#include "base/metrics/field_trial_params.h"
#include "base/metrics/histogram_macros.h"
#include "base/notreached.h"
#include "base/ranges/algorithm.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/trace_event/memory_usage_estimator.h"
#include "base/trace_event/typed_macros.h"
#include "build/build_config.h"
#include "components/omnibox/browser/actions/omnibox_action_concepts.h"
#include "components/omnibox/browser/actions/omnibox_pedal.h"
#include "components/omnibox/browser/actions/omnibox_pedal_provider.h"
#include "components/omnibox/browser/actions/tab_switch_action.h"
#include "components/omnibox/browser/autocomplete_grouper_sections.h"
#include "components/omnibox/browser/autocomplete_input.h"
#include "components/omnibox/browser/autocomplete_match_type.h"
#include "components/omnibox/browser/autocomplete_provider.h"
#include "components/omnibox/browser/autocomplete_provider_client.h"
#include "components/omnibox/browser/base_search_provider.h"
#include "components/omnibox/browser/intranet_redirector_state.h"
#include "components/omnibox/browser/omnibox_feature_configs.h"
#include "components/omnibox/browser/omnibox_field_trial.h"
#include "components/omnibox/browser/omnibox_prefs.h"
#include "components/omnibox/browser/page_classification_functions.h"
#include "components/omnibox/browser/tab_matcher.h"
#include "components/omnibox/common/omnibox_features.h"
#include "components/search_engines/template_url_service.h"
#include "components/strings/grit/components_strings.h"
#include "components/url_formatter/url_fixer.h"
#include "omnibox_triggered_feature_service.h"
#include "third_party/metrics_proto/omnibox_event.pb.h"
#include "third_party/metrics_proto/omnibox_focus_type.pb.h"
#include "third_party/metrics_proto/omnibox_input_type.pb.h"
#include "third_party/omnibox_proto/groups.pb.h"
#include "ui/base/device_form_factor.h"
#include "ui/base/l10n/l10n_util.h"
OmniboxEventProto;
ACMatchType;
namespace …
size_t AutocompleteResult::GetMaxMatches(bool is_zero_suggest) { … }
size_t AutocompleteResult::GetDynamicMaxMatches() { … }
AutocompleteResult::AutocompleteResult() { … }
AutocompleteResult::~AutocompleteResult() { … }
void AutocompleteResult::TransferOldMatches(const AutocompleteInput& input,
AutocompleteResult* old_matches) { … }
void AutocompleteResult::AppendMatches(const ACMatches& matches) { … }
void AutocompleteResult::DeduplicateMatches(
const AutocompleteInput& input,
TemplateURLService* template_url_service) { … }
void AutocompleteResult::Sort(
const AutocompleteInput& input,
TemplateURLService* template_url_service,
std::optional<AutocompleteMatch> default_match_to_preserve) { … }
void AutocompleteResult::SortAndCull(
const AutocompleteInput& input,
TemplateURLService* template_url_service,
OmniboxTriggeredFeatureService* triggered_feature_service,
std::optional<AutocompleteMatch> default_match_to_preserve) { … }
void AutocompleteResult::TrimOmniboxActions(bool is_zero_suggest) { … }
void AutocompleteResult::SplitActionsToSuggestions() { … }
void AutocompleteResult::GroupAndDemoteMatchesInGroups() { … }
void AutocompleteResult::DemoteOnDeviceSearchSuggestions() { … }
void AutocompleteResult::AttachPedalsToMatches(
const AutocompleteInput& input,
const AutocompleteProviderClient& client) { … }
void AutocompleteResult::ConvertOpenTabMatches(
AutocompleteProviderClient* client,
const AutocompleteInput* input) { … }
bool AutocompleteResult::HasCopiedMatches() const { … }
size_t AutocompleteResult::size() const { … }
bool AutocompleteResult::empty() const { … }
AutocompleteResult::const_iterator AutocompleteResult::begin() const { … }
AutocompleteResult::iterator AutocompleteResult::begin() { … }
AutocompleteResult::const_iterator AutocompleteResult::end() const { … }
AutocompleteResult::iterator AutocompleteResult::end() { … }
const AutocompleteMatch& AutocompleteResult::match_at(size_t index) const { … }
AutocompleteMatch* AutocompleteResult::match_at(size_t index) { … }
const AutocompleteMatch* AutocompleteResult::default_match() const { … }
ACMatches::const_iterator AutocompleteResult::FindTopMatch(
const AutocompleteInput& input,
const ACMatches& matches) { … }
ACMatches::iterator AutocompleteResult::FindTopMatch(
const AutocompleteInput& input,
ACMatches* matches) { … }
bool AutocompleteResult::UndedupTopSearchEntityMatch(ACMatches* matches) { … }
size_t AutocompleteResult::CalculateNumMatches(
bool is_zero_suggest,
const ACMatches& matches,
const CompareWithDemoteByType<AutocompleteMatch>& comparing_object) { … }
size_t AutocompleteResult::CalculateNumMatchesPerUrlCount(
const ACMatches& matches,
const CompareWithDemoteByType<AutocompleteMatch>& comparing_object) { … }
void AutocompleteResult::Reset() { … }
void AutocompleteResult::ClearMatches() { … }
void AutocompleteResult::SessionData::Reset() { … }
void AutocompleteResult::SwapMatchesWith(AutocompleteResult* other) { … }
void AutocompleteResult::CopyMatchesFrom(const AutocompleteResult& other) { … }
#if DCHECK_IS_ON()
void AutocompleteResult::Validate() const { … }
#endif
GURL AutocompleteResult::ComputeAlternateNavUrl(
const AutocompleteInput& input,
const AutocompleteMatch& match,
AutocompleteProviderClient* provider_client) { … }
void AutocompleteResult::DeduplicateMatches(
ACMatches* matches,
const AutocompleteInput& input,
TemplateURLService* template_url_service) { … }
std::u16string AutocompleteResult::GetCommonPrefix() { … }
size_t AutocompleteResult::EstimateMemoryUsage() const { … }
std::vector<AutocompleteResult::MatchDedupComparator>
AutocompleteResult::GetMatchDedupComparators() const { … }
std::u16string AutocompleteResult::GetHeaderForSuggestionGroup(
omnibox::GroupId suggestion_group_id) const { … }
bool AutocompleteResult::IsSuggestionGroupHidden(
PrefService* prefs,
omnibox::GroupId suggestion_group_id) const { … }
void AutocompleteResult::SetSuggestionGroupHidden(
PrefService* prefs,
omnibox::GroupId suggestion_group_id,
bool hidden) const { … }
omnibox::GroupSection AutocompleteResult::GetSectionForSuggestionGroup(
omnibox::GroupId suggestion_group_id) const { … }
omnibox::GroupConfig_SideType AutocompleteResult::GetSideTypeForSuggestionGroup(
omnibox::GroupId suggestion_group_id) const { … }
omnibox::GroupConfig_RenderType
AutocompleteResult::GetRenderTypeForSuggestionGroup(
omnibox::GroupId suggestion_group_id) const { … }
void AutocompleteResult::MergeSuggestionGroupsMap(
const omnibox::GroupConfigMap& suggestion_groups_map) { … }
bool AutocompleteResult::HasMatchByDestination(const AutocompleteMatch& match,
const ACMatches& matches) { … }
void AutocompleteResult::MaybeCullTailSuggestions(
ACMatches* matches,
const CompareWithDemoteByType<AutocompleteMatch>& comparing_object) { … }
void AutocompleteResult::BuildProviderToMatchesCopy(
ProviderToMatches* provider_to_matches) const { … }
void AutocompleteResult::BuildProviderToMatchesMove(
ProviderToMatches* provider_to_matches) { … }
void AutocompleteResult::MergeMatchesByProvider(ACMatches* old_matches,
const ACMatches& new_matches) { … }
AutocompleteResult::MatchDedupComparator
AutocompleteResult::GetMatchComparisonFields(const AutocompleteMatch& match) { … }
void AutocompleteResult::LimitNumberOfURLsShown(
size_t max_matches,
size_t max_url_count,
const CompareWithDemoteByType<AutocompleteMatch>& comparing_object) { … }
void AutocompleteResult::GroupSuggestionsBySearchVsURL(iterator begin,
iterator end) { … }