blob: 4e987409e854bd031d0e4400aea4131bb7bf6964 [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_TEMPLATE_URL_SERVICE_TEST_UTIL_H_
#define COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_TEST_UTIL_H_
#include "base/scoped_observation.h"
#include "base/test/task_environment.h"
#include "components/prefs/testing_pref_service.h"
#include "components/search_engines/template_url_service.h"
#include "components/search_engines/template_url_service_observer.h"
#include "components/sync_preferences/testing_pref_service_syncable.h"
#include "testing/gtest/include/gtest/gtest.h"
class WebDatabaseService;
class KeywordWebDataService;
namespace search_engines {
class SearchEngineChoiceService;
}
namespace base {
class RunLoop;
}
namespace os_crypt_async {
class OSCryptAsync;
}
void RegisterPrefsForTemplateURLService(
user_prefs::PrefRegistrySyncable* registry);
// One-shot observer that blocks until `template_url_service` is done loading.
class TemplateURLServiceLoadWaiter : public TemplateURLServiceObserver {
public:
TemplateURLServiceLoadWaiter();
~TemplateURLServiceLoadWaiter() override;
void WaitForLoadComplete(TemplateURLService& template_url_service);
void OnTemplateURLServiceChanged() override;
void OnTemplateURLServiceShuttingDown() override;
private:
void UpdateStatus(bool force_quit = false);
base::RunLoop run_loop_;
base::ScopedObservation<TemplateURLService, TemplateURLServiceObserver>
scoped_template_url_service_observation_{this};
};
class TemplateURLServiceUnitTestBase : public testing::Test {
public:
TemplateURLServiceUnitTestBase();
~TemplateURLServiceUnitTestBase() override;
void SetUp() override;
PrefService& pref_service() { return pref_service_; }
search_engines::SearchEngineChoiceService& search_engine_choice_service() {
return *search_engine_choice_service_.get();
}
TemplateURLService& template_url_service() {
return *template_url_service_.get();
}
protected:
virtual std::unique_ptr<TemplateURLService> CreateService();
private:
sync_preferences::TestingPrefServiceSyncable pref_service_;
TestingPrefServiceSimple local_state_;
std::unique_ptr<search_engines::SearchEngineChoiceService>
search_engine_choice_service_;
std::unique_ptr<TemplateURLService> template_url_service_;
};
class LoadedTemplateURLServiceUnitTestBase
: public TemplateURLServiceUnitTestBase {
public:
LoadedTemplateURLServiceUnitTestBase();
~LoadedTemplateURLServiceUnitTestBase() override;
protected:
std::unique_ptr<TemplateURLService> CreateService() override;
void SetUp() override;
void TearDown() override;
// Same as `TemplateURLService::GetTemplateURLs()`, but removes the starter
// pack entries.
TemplateURLService::TemplateURLVector GetKeywordTemplateURLs();
// Returns `TemplateURLService::GetTemplateURLs()`, filtering to only entries
// that have `keyword` as their keyword. In general it should return a single
// elements, but in some cases there may be more.
TemplateURLService::TemplateURLVector GetTemplateURLsMatchingKeyword(
std::u16string keyword);
private:
base::test::TaskEnvironment task_environment{
base::test::TaskEnvironment::MainThreadType::UI};
scoped_refptr<WebDatabaseService> database_;
std::unique_ptr<os_crypt_async::OSCryptAsync> os_crypt_;
scoped_refptr<KeywordWebDataService> keyword_data_service_;
TemplateURLServiceLoadWaiter template_url_service_load_waiter_;
};
#endif // COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_TEST_UTIL_H_