#include "components/omnibox/browser/document_provider.h"
#include <stddef.h>
#include <algorithm>
#include <iterator>
#include <memory>
#include <numeric>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
#include "base/containers/adapters.h"
#include "base/containers/fixed_flat_map.h"
#include "base/containers/fixed_flat_set.h"
#include "base/containers/lru_cache.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/i18n/case_conversion.h"
#include "base/i18n/time_formatting.h"
#include "base/json/json_reader.h"
#include "base/metrics/histogram_functions.h"
#include "base/no_destructor.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/trace_event/trace_event.h"
#include "base/values.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.h"
#include "components/omnibox/browser/autocomplete_provider_client.h"
#include "components/omnibox/browser/autocomplete_provider_listener.h"
#include "components/omnibox/browser/in_memory_url_index_types.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/remote_suggestions_service.h"
#include "components/omnibox/browser/search_suggestion_parser.h"
#include "components/omnibox/common/omnibox_features.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_service.h"
#include "components/search/search.h"
#include "components/search_engines/search_engine_type.h"
#include "components/search_engines/template_url_service.h"
#include "components/strings/grit/components_strings.h"
#include "net/base/url_util.h"
#include "services/network/public/cpp/simple_url_loader.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "third_party/metrics_proto/omnibox_event.pb.h"
#include "third_party/metrics_proto/omnibox_focus_type.pb.h"
#include "third_party/re2/src/re2/re2.h"
#include "ui/base/l10n/l10n_util.h"
namespace {
const size_t kMaxQueryLength = …;
enum class DocumentProviderAllowedReason : int { … };
void LogOmniboxDocumentRequest(RemoteRequestEvent request_event) { … }
void LogTotalTime(base::TimeTicks start_time, bool interrupted) { … }
void LogRequestTime(base::TimeTicks start_time, bool interrupted) { … }
constexpr char kDocumentMimetype[] = …;
constexpr char kFormMimetype[] = …;
constexpr char kSpreadsheetMimetype[] = …;
constexpr char kPresentationMimetype[] = …;
AutocompleteMatch::DocumentType GetIconForMIMEType(std::string_view mimetype) { … }
template <typename T>
std::vector<T> Concat(std::vector<T>& v1, const std::vector<T>& v2) { … }
std::vector<const std::string*> ExtractResultList(
const base::Value::Dict& result,
std::string_view list_path,
std::string_view field_path) { … }
bool IsOwnedByUser(const std::string& user, const base::Value::Dict& result) { … }
bool IsCompletelyMatchedInTitleOrOwner(const std::u16string& input,
const base::Value::Dict& result) { … }
std::string ExtractDocIdFromUrl(const std::string& url) { … }
bool ValidHostPrefix(const std::string& host) { … }
std::string FindStringKeyOrFallback(const base::Value::Dict& value,
std::string_view key,
std::string fallback = "") { … }
}
DocumentProvider* DocumentProvider::Create(
AutocompleteProviderClient* client,
AutocompleteProviderListener* listener) { … }
void DocumentProvider::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) { … }
bool DocumentProvider::IsDocumentProviderAllowed(
const AutocompleteInput& input) { … }
bool DocumentProvider::IsInputLikelyURL(const AutocompleteInput& input) { … }
void DocumentProvider::Start(const AutocompleteInput& input,
bool minimal_changes) { … }
void DocumentProvider::Run() { … }
void DocumentProvider::Stop(bool clear_cached_results,
bool due_to_user_inactivity) { … }
void DocumentProvider::DeleteMatch(const AutocompleteMatch& match) { … }
void DocumentProvider::AddProviderInfo(ProvidersInfo* provider_info) const { … }
DocumentProvider::DocumentProvider(AutocompleteProviderClient* client,
AutocompleteProviderListener* listener)
: … { … }
DocumentProvider::~DocumentProvider() = default;
void DocumentProvider::OnURLLoadComplete(
const network::SimpleURLLoader* source,
const int response_code,
std::unique_ptr<std::string> response_body) { … }
bool DocumentProvider::UpdateResults(const std::string& json_data) { … }
void DocumentProvider::OnDocumentSuggestionsLoaderAvailable(
std::unique_ptr<network::SimpleURLLoader> loader) { … }
std::u16string DocumentProvider::GenerateLastModifiedString(
const std::string& modified_timestamp_string,
base::Time now) { … }
std::u16string DocumentProvider::GetProductDescriptionString(
const std::string& mimetype) { … }
std::u16string DocumentProvider::GetMatchDescription(
const std::string& update_time,
const std::string& mimetype,
const std::string& owner) { … }
ACMatches DocumentProvider::ParseDocumentSearchResults(
const base::Value& root_val) { … }
void DocumentProvider::CopyCachedMatchesToMatches() { … }
void DocumentProvider::SetCachedMatchesScoresTo0() { … }
void DocumentProvider::DemoteMatchesBeyondMax() { … }
ACMatchClassifications DocumentProvider::Classify(
const std::u16string& text,
const std::u16string& input_text) { … }
const GURL DocumentProvider::GetURLForDeduping(const GURL& url) { … }