blob: c9f9e3981831edddef953e9ba90f29c216e2bd22 [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_SEARCH_ENGINES_TEST_ENVIRONMENT_H_
#define COMPONENTS_SEARCH_ENGINES_SEARCH_ENGINES_TEST_ENVIRONMENT_H_
#include <memory>
#include "base/memory/raw_ptr.h"
#include "base/memory/raw_span.h"
#include "components/prefs/testing_pref_service.h"
#include "components/search_engines/search_engine_choice/search_engine_choice_service.h"
#include "components/search_engines/template_url_service.h"
#include "components/sync_preferences/testing_pref_service_syncable.h"
namespace search_engines {
// Test helper that makes it easier to create a `TemplateURLService` and a
// `SearchEngineChoiceService`. The caller should not worry about the
// dependencies needed to create those classes.
// `pref_service` and `local_state` can be passed by the caller using `Deps`. It
// will be the caller's responsibility to make sure the incoming pref services
// have the needed registrations.
class SearchEnginesTestEnvironment {
public:
struct Deps {
raw_ptr<sync_preferences::TestingPrefServiceSyncable> pref_service =
nullptr;
raw_ptr<TestingPrefServiceSimple> local_state = nullptr;
base::raw_span<const TemplateURLService::Initializer>
template_url_service_initializer;
};
explicit SearchEnginesTestEnvironment(
const Deps& deps = {/*pref_service=*/nullptr,
/*local_state=*/nullptr,
/*template_url_service_initializer=*/{}});
SearchEnginesTestEnvironment(const SearchEnginesTestEnvironment&) = delete;
SearchEnginesTestEnvironment& operator=(const SearchEnginesTestEnvironment&) =
delete;
~SearchEnginesTestEnvironment();
sync_preferences::TestingPrefServiceSyncable& pref_service();
sync_preferences::TestingPrefServiceSyncable& pref_service() const;
TestingPrefServiceSimple& local_state();
SearchEngineChoiceService& search_engine_choice_service();
// Guaranteed to be non-null unless `ReleaseTemplateURLService` has been
// called.
TemplateURLService* template_url_service();
const TemplateURLService* template_url_service() const;
[[nodiscard]] std::unique_ptr<TemplateURLService> ReleaseTemplateURLService();
private:
// Created when `Deps::local_state` is not provided.
// Don't access it directly, prefer using `local_state_` instead.
std::unique_ptr<TestingPrefServiceSimple> owned_local_state_;
raw_ptr<TestingPrefServiceSimple> local_state_;
// Created when `Deps::pref_service` is not provided.
// Don't access it directly, prefer using `pref_service_` instead.
std::unique_ptr<sync_preferences::TestingPrefServiceSyncable>
owned_pref_service_;
raw_ptr<sync_preferences::TestingPrefServiceSyncable> pref_service_;
std::unique_ptr<SearchEngineChoiceService> search_engine_choice_service_;
std::unique_ptr<TemplateURLService> template_url_service_;
};
} // namespace search_engines
#endif // COMPONENTS_SEARCH_ENGINES_SEARCH_ENGINES_TEST_ENVIRONMENT_H_