blob: 00693b9d8181dd3a69ddb7aa012e0c2ecda16546 [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_SEARCH_ENGINES_RECONCILING_TEMPLATE_URL_DATA_HOLDER_H_
#define COMPONENTS_SEARCH_ENGINES_RECONCILING_TEMPLATE_URL_DATA_HOLDER_H_
#include <memory>
#include <string>
#include <utility>
#include "base/memory/raw_ptr.h"
#include "components/search_engines/template_url_data.h"
#include "components/search_engines/template_url_prepopulate_data_resolver.h"
// TemplateURLData holder that reconciles (where appropriate) supplied Search
// Engine definitions with Chrome built-in definitions.
// Reconciliation aims to fill gaps in partial TemplateURLData definitions.
class ReconcilingTemplateURLDataHolder {
public:
explicit ReconcilingTemplateURLDataHolder(
TemplateURLPrepopulateData::Resolver& prepopulate_data_resolver);
~ReconcilingTemplateURLDataHolder();
// Stores the supplied Search Engine definition. Attempts to reconcile
// supplied definition with Chrome built-in definitions.
void SetAndReconcile(std::unique_ptr<TemplateURLData> data);
// Testing call that bypasses all merge logic.
void SetSearchEngineBypassingReconciliationForTesting(
std::unique_ptr<TemplateURLData> data) {
search_engine_ = std::move(data);
}
// Retrieves the currently set Search Engine definition.
// The definition reported by this call may differ from the definition
// supplied via Set() if the internal logic determined the possibility to
// reconcile it with Chrome prepopulated engines.
const TemplateURLData* Get() const { return search_engine_.get(); }
// Returns the keyword associated with currently set search engine.
// If the SE definition comes from Play API, applies necessary changes
// to compute keyword equivalent that can be matched with prepopulated
// engines. Returns a pair of values:
// - a string - keyword that can be matched with prepopulated_engines, and
// - a boolean - indicating whether returned value had to be computed from
// engine's Search URL.
std::pair<std::u16string, bool> GetOrComputeKeyword() const;
// Find Chrome built-in Search Engine definitions matching supplied |keyword|.
// Use sparingly: this method may be moderately expensive to call:
// - iterates lengthy, unsorted PrepopulatedEngine list,
// - creates TemplateURLData equivalents from PrepopulatedEngine definitions,
std::unique_ptr<TemplateURLData> FindMatchingBuiltInDefinitionsByKeyword(
const std::u16string& keyword) const;
// Find Chrome built-in Search Engine definitions matching supplied
// |prepopulate_id|.
// Use sparingly: this method may be moderately expensive to call:
// - iterates lengthy, unsorted PrepopulatedEngine list,
// - creates TemplateURLData equivalents from PrepopulatedEngine definitions,
std::unique_ptr<TemplateURLData> FindMatchingBuiltInDefinitionsById(
int prepopulate_id) const;
private:
raw_ref<TemplateURLPrepopulateData::Resolver> prepopulate_data_resolver_;
std::unique_ptr<TemplateURLData> search_engine_;
};
#endif // COMPONENTS_SEARCH_ENGINES_RECONCILING_TEMPLATE_URL_DATA_HOLDER_H_