blob: c4f61875341cd435b05a3f335b179bbf39a5f687 [file] [log] [blame]
vabr9e9222f2016-01-21 10:18:031// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
maxbogue26f40222016-09-16 20:22:185#include "components/browser_sync/profile_sync_test_util.h"
6
7#include <utility>
vabr9e9222f2016-01-21 10:18:038
Gabriel Charette5ff87ce2017-05-16 18:03:459#include "base/single_thread_task_runner.h"
fdoraya19b7702016-12-23 14:19:3110#include "base/threading/thread_task_runner_handle.h"
vabr0b75a3452016-02-23 10:14:5511#include "components/bookmarks/browser/bookmark_model.h"
vabr9352dd92016-02-19 16:09:4912#include "components/history/core/browser/history_model_worker.h"
fdorayea7a7ec2016-11-07 16:35:0813#include "components/history/core/browser/history_service.h"
vabr0c775a12016-01-29 08:50:5914#include "components/pref_registry/pref_registry_syncable.h"
15#include "components/signin/core/browser/signin_manager_base.h"
maxbogue2f960e52016-10-07 01:24:1516#include "components/sync/base/sync_prefs.h"
maxbogue455a57e32016-08-14 00:08:3217#include "components/sync/driver/signin_manager_wrapper.h"
Max Boguefef332d2016-07-28 22:09:0918#include "components/sync/engine/passive_model_worker.h"
stanisc5c6a2942017-06-19 20:56:5419#include "components/sync/engine/sequenced_model_worker.h"
maxbogue288c69172016-11-18 05:27:3220#include "components/sync/engine/ui_model_worker.h"
vabr0c775a12016-01-29 08:50:5921#include "net/url_request/url_request_test_util.h"
22
vabr9e9222f2016-01-21 10:18:0323namespace browser_sync {
24
vabr0c775a12016-01-29 08:50:5925namespace {
26
maxbogue7e006db2016-10-03 19:48:2827class BundleSyncClient : public syncer::FakeSyncClient {
vabr0c775a12016-01-29 08:50:5928 public:
maxbogue7e006db2016-10-03 19:48:2829 BundleSyncClient(syncer::SyncApiComponentFactory* factory,
maxbogue26f40222016-09-16 20:22:1830 PrefService* pref_service,
31 sync_sessions::SyncSessionsClient* sync_sessions_client,
32 autofill::PersonalDataManager* personal_data_manager,
33 const base::Callback<base::WeakPtr<syncer::SyncableService>(
34 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2835 const base::Callback<syncer::SyncService*(void)>&
maxbogue26f40222016-09-16 20:22:1836 get_sync_service_callback,
37 const base::Callback<bookmarks::BookmarkModel*(void)>&
38 get_bookmark_model_callback,
39 scoped_refptr<base::SingleThreadTaskRunner> db_thread,
40 scoped_refptr<base::SingleThreadTaskRunner> file_thread,
41 history::HistoryService* history_service);
vabr0c775a12016-01-29 08:50:5942
43 ~BundleSyncClient() override;
44
45 PrefService* GetPrefService() override;
vabr0c775a12016-01-29 08:50:5946 sync_sessions::SyncSessionsClient* GetSyncSessionsClient() override;
vabr9352dd92016-02-19 16:09:4947 autofill::PersonalDataManager* GetPersonalDataManager() override;
skyma56dd492017-04-06 19:20:2748 base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
49 syncer::ModelType type) override;
maxbogue7e006db2016-10-03 19:48:2850 syncer::SyncService* GetSyncService() override;
vabr9352dd92016-02-19 16:09:4951 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup(
fdorayea7a7ec2016-11-07 16:35:0852 syncer::ModelSafeGroup group) override;
vabr9352dd92016-02-19 16:09:4953 history::HistoryService* GetHistoryService() override;
vabr0b75a3452016-02-23 10:14:5554 bookmarks::BookmarkModel* GetBookmarkModel() override;
vabr0c775a12016-01-29 08:50:5955
56 private:
57 PrefService* const pref_service_;
vabr0c775a12016-01-29 08:50:5958 sync_sessions::SyncSessionsClient* const sync_sessions_client_;
vabr9352dd92016-02-19 16:09:4959 autofill::PersonalDataManager* const personal_data_manager_;
60 const base::Callback<base::WeakPtr<syncer::SyncableService>(
61 syncer::ModelType type)>
62 get_syncable_service_callback_;
maxbogue7e006db2016-10-03 19:48:2863 const base::Callback<syncer::SyncService*(void)> get_sync_service_callback_;
vabr0b75a3452016-02-23 10:14:5564 const base::Callback<bookmarks::BookmarkModel*(void)>
65 get_bookmark_model_callback_;
vabr9352dd92016-02-19 16:09:4966 // These task runners, if not null, are used in CreateModelWorkerForGroup.
67 const scoped_refptr<base::SingleThreadTaskRunner> db_thread_;
68 const scoped_refptr<base::SingleThreadTaskRunner> file_thread_;
69 history::HistoryService* history_service_;
vabr0c775a12016-01-29 08:50:5970};
71
72BundleSyncClient::BundleSyncClient(
maxbogue7e006db2016-10-03 19:48:2873 syncer::SyncApiComponentFactory* factory,
vabr0c775a12016-01-29 08:50:5974 PrefService* pref_service,
vabr9352dd92016-02-19 16:09:4975 sync_sessions::SyncSessionsClient* sync_sessions_client,
76 autofill::PersonalDataManager* personal_data_manager,
77 const base::Callback<base::WeakPtr<syncer::SyncableService>(
78 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2879 const base::Callback<syncer::SyncService*(void)>& get_sync_service_callback,
vabr0b75a3452016-02-23 10:14:5580 const base::Callback<bookmarks::BookmarkModel*(void)>&
81 get_bookmark_model_callback,
vabr9352dd92016-02-19 16:09:4982 scoped_refptr<base::SingleThreadTaskRunner> db_thread,
83 scoped_refptr<base::SingleThreadTaskRunner> file_thread,
84 history::HistoryService* history_service)
maxbogue7e006db2016-10-03 19:48:2885 : syncer::FakeSyncClient(factory),
vabr0c775a12016-01-29 08:50:5986 pref_service_(pref_service),
vabr9352dd92016-02-19 16:09:4987 sync_sessions_client_(sync_sessions_client),
88 personal_data_manager_(personal_data_manager),
89 get_syncable_service_callback_(get_syncable_service_callback),
90 get_sync_service_callback_(get_sync_service_callback),
vabr0b75a3452016-02-23 10:14:5591 get_bookmark_model_callback_(get_bookmark_model_callback),
vabr9352dd92016-02-19 16:09:4992 db_thread_(db_thread),
93 file_thread_(file_thread),
94 history_service_(history_service) {
95 DCHECK_EQ(!!db_thread_, !!file_thread_);
96}
vabr0c775a12016-01-29 08:50:5997
98BundleSyncClient::~BundleSyncClient() = default;
99
100PrefService* BundleSyncClient::GetPrefService() {
101 return pref_service_;
102}
103
vabr0c775a12016-01-29 08:50:59104sync_sessions::SyncSessionsClient* BundleSyncClient::GetSyncSessionsClient() {
105 return sync_sessions_client_;
106}
107
vabr9352dd92016-02-19 16:09:49108autofill::PersonalDataManager* BundleSyncClient::GetPersonalDataManager() {
109 return personal_data_manager_;
110}
111
skyma56dd492017-04-06 19:20:27112base::WeakPtr<syncer::SyncableService>
113BundleSyncClient::GetSyncableServiceForType(syncer::ModelType type) {
vabr9352dd92016-02-19 16:09:49114 if (get_syncable_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28115 return syncer::FakeSyncClient::GetSyncableServiceForType(type);
skyma56dd492017-04-06 19:20:27116 return get_syncable_service_callback_.Run(type);
vabr9352dd92016-02-19 16:09:49117}
118
maxbogue7e006db2016-10-03 19:48:28119syncer::SyncService* BundleSyncClient::GetSyncService() {
vabr9352dd92016-02-19 16:09:49120 if (get_sync_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28121 return syncer::FakeSyncClient::GetSyncService();
vabr9352dd92016-02-19 16:09:49122 return get_sync_service_callback_.Run();
123}
124
125scoped_refptr<syncer::ModelSafeWorker>
fdorayea7a7ec2016-11-07 16:35:08126BundleSyncClient::CreateModelWorkerForGroup(syncer::ModelSafeGroup group) {
vabr9352dd92016-02-19 16:09:49127 if (!db_thread_)
fdorayea7a7ec2016-11-07 16:35:08128 return FakeSyncClient::CreateModelWorkerForGroup(group);
vabr9352dd92016-02-19 16:09:49129 DCHECK(file_thread_) << "DB thread was specified but FILE thread was not.";
130 switch (group) {
131 case syncer::GROUP_DB:
stanisc5c6a2942017-06-19 20:56:54132 return new syncer::SequencedModelWorker(db_thread_, syncer::GROUP_DB);
vabr9352dd92016-02-19 16:09:49133 case syncer::GROUP_FILE:
stanisc5c6a2942017-06-19 20:56:54134 return new syncer::SequencedModelWorker(file_thread_, syncer::GROUP_FILE);
vabr9352dd92016-02-19 16:09:49135 case syncer::GROUP_UI:
fdorayea7a7ec2016-11-07 16:35:08136 return new syncer::UIModelWorker(base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49137 case syncer::GROUP_PASSIVE:
fdorayea7a7ec2016-11-07 16:35:08138 return new syncer::PassiveModelWorker();
vabr9352dd92016-02-19 16:09:49139 case syncer::GROUP_HISTORY: {
140 history::HistoryService* history_service = GetHistoryService();
141 if (!history_service)
142 return nullptr;
143 return new HistoryModelWorker(history_service->AsWeakPtr(),
fdorayea7a7ec2016-11-07 16:35:08144 base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49145 }
146 default:
147 return nullptr;
148 }
149}
150
151history::HistoryService* BundleSyncClient::GetHistoryService() {
152 if (history_service_)
153 return history_service_;
154 return FakeSyncClient::GetHistoryService();
155}
156
vabr0b75a3452016-02-23 10:14:55157bookmarks::BookmarkModel* BundleSyncClient::GetBookmarkModel() {
158 if (get_bookmark_model_callback_.is_null())
159 return FakeSyncClient::GetBookmarkModel();
160 return get_bookmark_model_callback_.Run();
161}
162
vabr0c775a12016-01-29 08:50:59163} // namespace
164
vabr9e9222f2016-01-21 10:18:03165void EmptyNetworkTimeUpdate(const base::Time&,
166 const base::TimeDelta&,
167 const base::TimeDelta&) {}
168
vabr0c775a12016-01-29 08:50:59169void RegisterPrefsForProfileSyncService(
170 user_prefs::PrefRegistrySyncable* registry) {
maxbogue7e006db2016-10-03 19:48:28171 syncer::SyncPrefs::RegisterProfilePrefs(registry);
vabr0c775a12016-01-29 08:50:59172 AccountTrackerService::RegisterPrefs(registry);
173 SigninManagerBase::RegisterProfilePrefs(registry);
174 SigninManagerBase::RegisterPrefs(registry);
175}
vabr9e9222f2016-01-21 10:18:03176
vabr0c775a12016-01-29 08:50:59177ProfileSyncServiceBundle::SyncClientBuilder::~SyncClientBuilder() = default;
178
179ProfileSyncServiceBundle::SyncClientBuilder::SyncClientBuilder(
180 ProfileSyncServiceBundle* bundle)
181 : bundle_(bundle) {}
182
vabr9352dd92016-02-19 16:09:49183void ProfileSyncServiceBundle::SyncClientBuilder::SetPersonalDataManager(
184 autofill::PersonalDataManager* personal_data_manager) {
185 personal_data_manager_ = personal_data_manager;
186}
187
188// The client will call this callback to produce the service.
189void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncableServiceCallback(
190 const base::Callback<base::WeakPtr<syncer::SyncableService>(
191 syncer::ModelType type)>& get_syncable_service_callback) {
192 get_syncable_service_callback_ = get_syncable_service_callback;
193}
194
195// The client will call this callback to produce the service.
196void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncServiceCallback(
maxbogue7e006db2016-10-03 19:48:28197 const base::Callback<syncer::SyncService*(void)>&
vabr9352dd92016-02-19 16:09:49198 get_sync_service_callback) {
199 get_sync_service_callback_ = get_sync_service_callback;
200}
201
202void ProfileSyncServiceBundle::SyncClientBuilder::SetHistoryService(
203 history::HistoryService* history_service) {
204 history_service_ = history_service;
205}
206
vabr0b75a3452016-02-23 10:14:55207void ProfileSyncServiceBundle::SyncClientBuilder::SetBookmarkModelCallback(
208 const base::Callback<bookmarks::BookmarkModel*(void)>&
209 get_bookmark_model_callback) {
210 get_bookmark_model_callback_ = get_bookmark_model_callback;
211}
212
maxbogue7e006db2016-10-03 19:48:28213std::unique_ptr<syncer::FakeSyncClient>
vabr0c775a12016-01-29 08:50:59214ProfileSyncServiceBundle::SyncClientBuilder::Build() {
Sky Malice08a04b72017-08-24 21:43:24215 return std::make_unique<BundleSyncClient>(
vabr0c775a12016-01-29 08:50:59216 bundle_->component_factory(), bundle_->pref_service(),
zea32a7684cf2016-02-24 20:41:48217 bundle_->sync_sessions_client(), personal_data_manager_,
218 get_syncable_service_callback_, get_sync_service_callback_,
219 get_bookmark_model_callback_,
vabr9352dd92016-02-19 16:09:49220 activate_model_creation_ ? bundle_->db_thread() : nullptr,
vabr6b1e9712016-02-19 16:45:01221 activate_model_creation_ ? base::ThreadTaskRunnerHandle::Get() : nullptr,
ricea799a1fd2016-08-22 02:45:53222 history_service_);
vabr0c775a12016-01-29 08:50:59223}
224
225ProfileSyncServiceBundle::ProfileSyncServiceBundle()
vabr6b1e9712016-02-19 16:45:01226 : db_thread_(base::ThreadTaskRunnerHandle::Get()),
227 worker_pool_owner_(2, "sync test worker pool"),
vabr0c775a12016-01-29 08:50:59228 signin_client_(&pref_service_),
229#if defined(OS_CHROMEOS)
230 signin_manager_(&signin_client_, &account_tracker_),
231#else
232 signin_manager_(&signin_client_,
233 &auth_service_,
234 &account_tracker_,
235 nullptr),
236#endif
237 url_request_context_(new net::TestURLRequestContextGetter(
238 base::ThreadTaskRunnerHandle::Get())) {
maxbogue0a379452016-09-22 21:35:05239 RegisterPrefsForProfileSyncService(pref_service_.registry());
vabr0c775a12016-01-29 08:50:59240 auth_service_.set_auto_post_fetch_response_on_message_loop(true);
241 account_tracker_.Initialize(&signin_client_);
242 signin_manager_.Initialize(&pref_service_);
243}
244
vabr6b1e9712016-02-19 16:45:01245ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {}
246
247ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
maxbogue1a84b142016-03-15 01:58:16248 ProfileSyncService::StartBehavior start_behavior,
maxbogue7e006db2016-10-03 19:48:28249 std::unique_ptr<syncer::SyncClient> sync_client) {
vabr6b1e9712016-02-19 16:45:01250 ProfileSyncService::InitParams init_params;
251
252 init_params.start_behavior = start_behavior;
253 init_params.sync_client = std::move(sync_client);
254 init_params.signin_wrapper =
Sky Malice08a04b72017-08-24 21:43:24255 std::make_unique<SigninManagerWrapper>(signin_manager());
vabr6b1e9712016-02-19 16:45:01256 init_params.oauth2_token_service = auth_service();
257 init_params.network_time_update_callback =
258 base::Bind(&EmptyNetworkTimeUpdate);
Pavel Yatsukb8825972017-08-01 21:24:57259 CHECK(base_directory_.CreateUniqueTempDir());
260 init_params.base_directory = base_directory_.GetPath();
vabr6b1e9712016-02-19 16:45:01261 init_params.url_request_context = url_request_context();
262 init_params.debug_identifier = "dummyDebugName";
263 init_params.channel = version_info::Channel::UNKNOWN;
vabr6b1e9712016-02-19 16:45:01264
265 return init_params;
266}
267
vabr9e9222f2016-01-21 10:18:03268} // namespace browser_sync