#include "components/omnibox/browser/shortcuts_provider.h"
#include <stddef.h>
#include <algorithm>
#include <cmath>
#include <limits>
#include <map>
#include <numeric>
#include <utility>
#include <vector>
#include "base/check_op.h"
#include "base/feature_list.h"
#include "base/i18n/case_conversion.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/histogram.h"
#include "base/metrics/histogram_macros.h"
#include "base/numerics/safe_conversions.h"
#include "base/ranges/algorithm.h"
#include "base/strings/strcat.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
#include "components/history/core/browser/history_service.h"
#include "components/omnibox/browser/autocomplete_i18n.h"
#include "components/omnibox/browser/autocomplete_input.h"
#include "components/omnibox/browser/autocomplete_match.h"
#include "components/omnibox/browser/autocomplete_match_classification.h"
#include "components/omnibox/browser/autocomplete_provider_client.h"
#include "components/omnibox/browser/autocomplete_scoring_signals_annotator.h"
#include "components/omnibox/browser/history_cluster_provider.h"
#include "components/omnibox/browser/history_url_provider.h"
#include "components/omnibox/browser/omnibox_feature_configs.h"
#include "components/omnibox/browser/omnibox_field_trial.h"
#include "components/omnibox/browser/omnibox_triggered_feature_service.h"
#include "components/omnibox/browser/url_prefix.h"
#include "components/omnibox/common/omnibox_features.h"
#include "components/prefs/pref_service.h"
#include "components/search_engines/template_url_service.h"
#include "components/url_formatter/url_fixer.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/metrics_proto/omnibox_scoring_signals.pb.h"
#include "third_party/omnibox_proto/groups.pb.h"
#if !BUILDFLAG(IS_IOS)
#include "components/history_clusters/core/config.h"
#endif
constexpr bool kIsDesktop = …;
namespace {
ShortcutMatch;
ScoringSignals;
class DestinationURLEqualsURL { … };
const ShortcutsDatabase::Shortcut* ShortestShortcutText(
std::vector<const ShortcutsDatabase::Shortcut*> shortcuts) { … }
const ShortcutsDatabase::Shortcut* MostRecentShortcut(
std::vector<const ShortcutsDatabase::Shortcut*> shortcuts) { … }
int SumNumberOfHits(std::vector<const ShortcutsDatabase::Shortcut*> shortcuts) { … }
const ShortcutsDatabase::Shortcut* ShortestShortcutContent(
std::vector<const ShortcutsDatabase::Shortcut*> shortcuts) { … }
int CalculateScoreFromFactors(size_t typed_length,
size_t shortcut_text_length,
const base::Time& last_access_time,
int number_of_hits,
int max_relevance) { … }
void PopulateScoringSignals(const ShortcutMatch& shortcut_match,
AutocompleteMatch* match) { … }
}
const int ShortcutsProvider::kShortcutsProviderDefaultMaxRelevance = …;
ShortcutsProvider::ShortcutMatch::ShortcutMatch(
int relevance,
int aggregate_number_of_hits,
base::Time most_recent_access_time,
size_t shortest_text_length,
const GURL& stripped_destination_url,
const ShortcutsDatabase::Shortcut* shortcut)
: … { … }
ShortcutsProvider::ShortcutMatch::ShortcutMatch(const ShortcutMatch& other) =
default;
ShortcutMatch& ShortcutsProvider::ShortcutMatch::operator=(
const ShortcutMatch& other) = default;
ShortcutsProvider::ShortcutsProvider(AutocompleteProviderClient* client)
: … { … }
void ShortcutsProvider::Start(const AutocompleteInput& input,
bool minimal_changes) { … }
void ShortcutsProvider::DeleteMatch(const AutocompleteMatch& match) { … }
ShortcutsProvider::~ShortcutsProvider() { … }
void ShortcutsProvider::OnShortcutsLoaded() { … }
void ShortcutsProvider::DoAutocomplete(const AutocompleteInput& input,
bool populate_scoring_signals) { … }
ShortcutMatch ShortcutsProvider::CreateScoredShortcutMatch(
size_t input_length,
const GURL& stripped_destination_url,
const std::vector<const ShortcutsDatabase::Shortcut*>& shortcuts,
int max_relevance) { … }
AutocompleteMatch ShortcutsProvider::ShortcutMatchToACMatch(
const ShortcutMatch& shortcut_match,
int relevance,
const AutocompleteInput& input,
const std::u16string& fixed_up_input_text,
const std::u16string lower_input) { … }
ShortcutsBackend::ShortcutMap::const_iterator ShortcutsProvider::FindFirstMatch(
const std::u16string& keyword,
ShortcutsBackend* backend) { … }