diff options
Diffstat (limited to 'components/browser_sync/browser/profile_sync_test_util.cc')
-rw-r--r-- | components/browser_sync/browser/profile_sync_test_util.cc | 225 |
1 files changed, 197 insertions, 28 deletions
diff --git a/components/browser_sync/browser/profile_sync_test_util.cc b/components/browser_sync/browser/profile_sync_test_util.cc index c8c02d5..fd6d916 100644 --- a/components/browser_sync/browser/profile_sync_test_util.cc +++ b/components/browser_sync/browser/profile_sync_test_util.cc @@ -4,11 +4,15 @@ #include "components/browser_sync/browser/profile_sync_test_util.h" +#include "components/history/core/browser/history_model_worker.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/signin/core/browser/signin_manager_base.h" +#include "components/sync_driver/glue/browser_thread_model_worker.h" +#include "components/sync_driver/glue/ui_model_worker.h" #include "components/sync_driver/signin_manager_wrapper.h" #include "components/sync_driver/sync_prefs.h" #include "net/url_request/url_request_test_util.h" +#include "sync/internal_api/public/engine/passive_model_worker.h" using sync_driver::ClearBrowsingDataCallback; @@ -18,32 +22,75 @@ namespace { class BundleSyncClient : public sync_driver::FakeSyncClient { public: - BundleSyncClient(sync_driver::SyncApiComponentFactory* factory, - PrefService* pref_service, - ClearBrowsingDataCallback clear_browsing_data_callback, - sync_sessions::SyncSessionsClient* sync_sessions_client); + BundleSyncClient( + sync_driver::SyncApiComponentFactory* factory, + PrefService* pref_service, + const ClearBrowsingDataCallback& clear_browsing_data_callback, + sync_sessions::SyncSessionsClient* sync_sessions_client, + autofill::PersonalDataManager* personal_data_manager, + const base::Callback<base::WeakPtr<syncer::SyncableService>( + syncer::ModelType type)>& get_syncable_service_callback, + const base::Callback<sync_driver::SyncService*(void)>& + get_sync_service_callback, + scoped_refptr<base::SingleThreadTaskRunner> db_thread, + scoped_refptr<base::SingleThreadTaskRunner> file_thread, + history::HistoryService* history_service); ~BundleSyncClient() override; PrefService* GetPrefService() override; ClearBrowsingDataCallback GetClearBrowsingDataCallback() override; sync_sessions::SyncSessionsClient* GetSyncSessionsClient() override; + autofill::PersonalDataManager* GetPersonalDataManager() override; + base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType( + syncer::ModelType type) override; + sync_driver::SyncService* GetSyncService() override; + scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup( + syncer::ModelSafeGroup group, + syncer::WorkerLoopDestructionObserver* observer) override; + history::HistoryService* GetHistoryService() override; private: PrefService* const pref_service_; const ClearBrowsingDataCallback clear_browsing_data_callback_; sync_sessions::SyncSessionsClient* const sync_sessions_client_; + autofill::PersonalDataManager* const personal_data_manager_; + const base::Callback<base::WeakPtr<syncer::SyncableService>( + syncer::ModelType type)> + get_syncable_service_callback_; + const base::Callback<sync_driver::SyncService*(void)> + get_sync_service_callback_; + // These task runners, if not null, are used in CreateModelWorkerForGroup. + const scoped_refptr<base::SingleThreadTaskRunner> db_thread_; + const scoped_refptr<base::SingleThreadTaskRunner> file_thread_; + history::HistoryService* history_service_; }; BundleSyncClient::BundleSyncClient( sync_driver::SyncApiComponentFactory* factory, PrefService* pref_service, - ClearBrowsingDataCallback clear_browsing_data_callback, - sync_sessions::SyncSessionsClient* sync_sessions_client) + const ClearBrowsingDataCallback& clear_browsing_data_callback, + sync_sessions::SyncSessionsClient* sync_sessions_client, + autofill::PersonalDataManager* personal_data_manager, + const base::Callback<base::WeakPtr<syncer::SyncableService>( + syncer::ModelType type)>& get_syncable_service_callback, + const base::Callback<sync_driver::SyncService*(void)>& + get_sync_service_callback, + scoped_refptr<base::SingleThreadTaskRunner> db_thread, + scoped_refptr<base::SingleThreadTaskRunner> file_thread, + history::HistoryService* history_service) : sync_driver::FakeSyncClient(factory), pref_service_(pref_service), clear_browsing_data_callback_(clear_browsing_data_callback), - sync_sessions_client_(sync_sessions_client) {} + sync_sessions_client_(sync_sessions_client), + personal_data_manager_(personal_data_manager), + get_syncable_service_callback_(get_syncable_service_callback), + get_sync_service_callback_(get_sync_service_callback), + db_thread_(db_thread), + file_thread_(file_thread), + history_service_(history_service) { + DCHECK_EQ(!!db_thread_, !!file_thread_); +} BundleSyncClient::~BundleSyncClient() = default; @@ -59,6 +106,60 @@ sync_sessions::SyncSessionsClient* BundleSyncClient::GetSyncSessionsClient() { return sync_sessions_client_; } +autofill::PersonalDataManager* BundleSyncClient::GetPersonalDataManager() { + return personal_data_manager_; +} + +base::WeakPtr<syncer::SyncableService> +BundleSyncClient::GetSyncableServiceForType(syncer::ModelType type) { + if (get_syncable_service_callback_.is_null()) + return sync_driver::FakeSyncClient::GetSyncableServiceForType(type); + return get_syncable_service_callback_.Run(type); +} + +sync_driver::SyncService* BundleSyncClient::GetSyncService() { + if (get_sync_service_callback_.is_null()) + return sync_driver::FakeSyncClient::GetSyncService(); + return get_sync_service_callback_.Run(); +} + +scoped_refptr<syncer::ModelSafeWorker> +BundleSyncClient::CreateModelWorkerForGroup( + syncer::ModelSafeGroup group, + syncer::WorkerLoopDestructionObserver* observer) { + if (!db_thread_) + return FakeSyncClient::CreateModelWorkerForGroup(group, observer); + DCHECK(file_thread_) << "DB thread was specified but FILE thread was not."; + switch (group) { + case syncer::GROUP_DB: + return new BrowserThreadModelWorker(db_thread_, syncer::GROUP_DB, + observer); + case syncer::GROUP_FILE: + return new BrowserThreadModelWorker(file_thread_, syncer::GROUP_FILE, + observer); + case syncer::GROUP_UI: + return new UIModelWorker(base::ThreadTaskRunnerHandle::Get(), observer); + case syncer::GROUP_PASSIVE: + return new syncer::PassiveModelWorker(observer); + case syncer::GROUP_HISTORY: { + history::HistoryService* history_service = GetHistoryService(); + if (!history_service) + return nullptr; + return new HistoryModelWorker(history_service->AsWeakPtr(), + base::ThreadTaskRunnerHandle::Get(), + observer); + } + default: + return nullptr; + } +} + +history::HistoryService* BundleSyncClient::GetHistoryService() { + if (history_service_) + return history_service_; + return FakeSyncClient::GetHistoryService(); +} + } // namespace void EmptyNetworkTimeUpdate(const base::Time&, @@ -84,37 +185,75 @@ void ProfileSyncServiceBundle::SyncClientBuilder::SetClearBrowsingDataCallback( clear_browsing_data_callback_ = clear_browsing_data_callback; } +void ProfileSyncServiceBundle::SyncClientBuilder::SetPersonalDataManager( + autofill::PersonalDataManager* personal_data_manager) { + personal_data_manager_ = personal_data_manager; +} + +// The client will call this callback to produce the service. +void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncableServiceCallback( + const base::Callback<base::WeakPtr<syncer::SyncableService>( + syncer::ModelType type)>& get_syncable_service_callback) { + get_syncable_service_callback_ = get_syncable_service_callback; +} + +// The client will call this callback to produce the service. +void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncServiceCallback( + const base::Callback<sync_driver::SyncService*(void)>& + get_sync_service_callback) { + get_sync_service_callback_ = get_sync_service_callback; +} + +void ProfileSyncServiceBundle::SyncClientBuilder::SetHistoryService( + history::HistoryService* history_service) { + history_service_ = history_service; +} + scoped_ptr<sync_driver::FakeSyncClient> ProfileSyncServiceBundle::SyncClientBuilder::Build() { return make_scoped_ptr(new BundleSyncClient( bundle_->component_factory(), bundle_->pref_service(), - clear_browsing_data_callback_, bundle_->sync_sessions_client())); + clear_browsing_data_callback_, bundle_->sync_sessions_client(), + personal_data_manager_, get_syncable_service_callback_, + get_sync_service_callback_, + activate_model_creation_ ? bundle_->db_thread() : nullptr, + activate_model_creation_ ? bundle_->file_thread() : nullptr, + history_service_)); } +struct ProfileSyncServiceBundle::ThreadProvider { + public: + ThreadProvider() : worker_pool_owner_(2, "sync test worker pool") { + DCHECK(base::MessageLoop::current()) + << "The test including the bundle also needs to include a MessageLoop"; + } + ~ThreadProvider() = default; + + base::SequencedWorkerPoolOwner worker_pool_owner_; + + private: + DISALLOW_COPY_AND_ASSIGN(ThreadProvider); +}; + ProfileSyncServiceBundle::ProfileSyncServiceBundle() - : worker_pool_owner_(2, "sync test worker pool"), - signin_client_(&pref_service_), -#if defined(OS_CHROMEOS) - signin_manager_(&signin_client_, &account_tracker_), -#else - signin_manager_(&signin_client_, - &auth_service_, - &account_tracker_, - nullptr), -#endif - url_request_context_(new net::TestURLRequestContextGetter( - base::ThreadTaskRunnerHandle::Get())) { - browser_sync::RegisterPrefsForProfileSyncService(pref_service_.registry()); - auth_service_.set_auto_post_fetch_response_on_message_loop(true); - account_tracker_.Initialize(&signin_client_); - signin_manager_.Initialize(&pref_service_); -} + : ProfileSyncServiceBundle(make_scoped_ptr(new ThreadProvider), + nullptr, + nullptr, + nullptr) {} + +ProfileSyncServiceBundle::ProfileSyncServiceBundle( + const scoped_refptr<base::SingleThreadTaskRunner>& db_thread, + const scoped_refptr<base::SingleThreadTaskRunner>& file_thread, + base::SequencedWorkerPool* worker_pool) + : ProfileSyncServiceBundle(nullptr, db_thread, file_thread, worker_pool) {} ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {} ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams( browser_sync::ProfileSyncServiceStartBehavior start_behavior, scoped_ptr<sync_driver::SyncClient> sync_client) { + DCHECK(worker_pool_); + ProfileSyncService::InitParams init_params; init_params.start_behavior = start_behavior; @@ -128,11 +267,41 @@ ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams( init_params.url_request_context = url_request_context(); init_params.debug_identifier = "dummyDebugName"; init_params.channel = version_info::Channel::UNKNOWN; - init_params.db_thread = base::ThreadTaskRunnerHandle::Get(); - init_params.file_thread = base::ThreadTaskRunnerHandle::Get(); - init_params.blocking_pool = worker_pool_owner_.pool().get(); + init_params.db_thread = db_thread_; + init_params.file_thread = file_thread_; + init_params.blocking_pool = worker_pool_; return init_params; } +ProfileSyncServiceBundle::ProfileSyncServiceBundle( + scoped_ptr<ThreadProvider> thread_provider, + scoped_refptr<base::SingleThreadTaskRunner> db_thread, + scoped_refptr<base::SingleThreadTaskRunner> file_thread, + base::SequencedWorkerPool* worker_pool) + : thread_provider_(std::move(thread_provider)), + db_thread_(thread_provider_ ? base::ThreadTaskRunnerHandle::Get() + : db_thread), + file_thread_(thread_provider_ ? base::ThreadTaskRunnerHandle::Get() + : file_thread), + worker_pool_(thread_provider_ + ? thread_provider_->worker_pool_owner_.pool().get() + : worker_pool), + signin_client_(&pref_service_), +#if defined(OS_CHROMEOS) + signin_manager_(&signin_client_, &account_tracker_), +#else + signin_manager_(&signin_client_, + &auth_service_, + &account_tracker_, + nullptr), +#endif + url_request_context_(new net::TestURLRequestContextGetter( + base::ThreadTaskRunnerHandle::Get())) { + browser_sync::RegisterPrefsForProfileSyncService(pref_service_.registry()); + auth_service_.set_auto_post_fetch_response_on_message_loop(true); + account_tracker_.Initialize(&signin_client_); + signin_manager_.Initialize(&pref_service_); +} + } // namespace browser_sync |