blob: d56c08363522123ccc2fcdae49e8effdfd2c9755 [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
dchengd4593e72016-04-22 21:43:289#include "base/memory/ptr_util.h"
vabr0b75a3452016-02-23 10:14:5510#include "components/bookmarks/browser/bookmark_model.h"
vabr9352dd92016-02-19 16:09:4911#include "components/history/core/browser/history_model_worker.h"
vabr0c775a12016-01-29 08:50:5912#include "components/pref_registry/pref_registry_syncable.h"
13#include "components/signin/core/browser/signin_manager_base.h"
maxbogue2f960e52016-10-07 01:24:1514#include "components/sync/base/sync_prefs.h"
maxbogue455a57e32016-08-14 00:08:3215#include "components/sync/driver/glue/browser_thread_model_worker.h"
16#include "components/sync/driver/glue/ui_model_worker.h"
17#include "components/sync/driver/signin_manager_wrapper.h"
Max Boguefef332d2016-07-28 22:09:0918#include "components/sync/engine/passive_model_worker.h"
vabr0c775a12016-01-29 08:50:5919#include "net/url_request/url_request_test_util.h"
vabr0c775a12016-01-29 08:50:5920
vabr9e9222f2016-01-21 10:18:0321namespace browser_sync {
22
vabr0c775a12016-01-29 08:50:5923namespace {
24
maxbogue7e006db2016-10-03 19:48:2825class BundleSyncClient : public syncer::FakeSyncClient {
vabr0c775a12016-01-29 08:50:5926 public:
maxbogue7e006db2016-10-03 19:48:2827 BundleSyncClient(syncer::SyncApiComponentFactory* factory,
maxbogue26f40222016-09-16 20:22:1828 PrefService* pref_service,
29 sync_sessions::SyncSessionsClient* sync_sessions_client,
30 autofill::PersonalDataManager* personal_data_manager,
31 const base::Callback<base::WeakPtr<syncer::SyncableService>(
32 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2833 const base::Callback<syncer::SyncService*(void)>&
maxbogue26f40222016-09-16 20:22:1834 get_sync_service_callback,
35 const base::Callback<bookmarks::BookmarkModel*(void)>&
36 get_bookmark_model_callback,
37 scoped_refptr<base::SingleThreadTaskRunner> db_thread,
38 scoped_refptr<base::SingleThreadTaskRunner> file_thread,
39 history::HistoryService* history_service);
vabr0c775a12016-01-29 08:50:5940
41 ~BundleSyncClient() override;
42
43 PrefService* GetPrefService() override;
vabr0c775a12016-01-29 08:50:5944 sync_sessions::SyncSessionsClient* GetSyncSessionsClient() override;
vabr9352dd92016-02-19 16:09:4945 autofill::PersonalDataManager* GetPersonalDataManager() override;
46 base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
47 syncer::ModelType type) override;
maxbogue7e006db2016-10-03 19:48:2848 syncer::SyncService* GetSyncService() override;
vabr9352dd92016-02-19 16:09:4949 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup(
50 syncer::ModelSafeGroup group,
51 syncer::WorkerLoopDestructionObserver* observer) override;
52 history::HistoryService* GetHistoryService() override;
vabr0b75a3452016-02-23 10:14:5553 bookmarks::BookmarkModel* GetBookmarkModel() override;
vabr0c775a12016-01-29 08:50:5954
55 private:
56 PrefService* const pref_service_;
vabr0c775a12016-01-29 08:50:5957 sync_sessions::SyncSessionsClient* const sync_sessions_client_;
vabr9352dd92016-02-19 16:09:4958 autofill::PersonalDataManager* const personal_data_manager_;
59 const base::Callback<base::WeakPtr<syncer::SyncableService>(
60 syncer::ModelType type)>
61 get_syncable_service_callback_;
maxbogue7e006db2016-10-03 19:48:2862 const base::Callback<syncer::SyncService*(void)> get_sync_service_callback_;
vabr0b75a3452016-02-23 10:14:5563 const base::Callback<bookmarks::BookmarkModel*(void)>
64 get_bookmark_model_callback_;
vabr9352dd92016-02-19 16:09:4965 // These task runners, if not null, are used in CreateModelWorkerForGroup.
66 const scoped_refptr<base::SingleThreadTaskRunner> db_thread_;
67 const scoped_refptr<base::SingleThreadTaskRunner> file_thread_;
68 history::HistoryService* history_service_;
vabr0c775a12016-01-29 08:50:5969};
70
71BundleSyncClient::BundleSyncClient(
maxbogue7e006db2016-10-03 19:48:2872 syncer::SyncApiComponentFactory* factory,
vabr0c775a12016-01-29 08:50:5973 PrefService* pref_service,
vabr9352dd92016-02-19 16:09:4974 sync_sessions::SyncSessionsClient* sync_sessions_client,
75 autofill::PersonalDataManager* personal_data_manager,
76 const base::Callback<base::WeakPtr<syncer::SyncableService>(
77 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2878 const base::Callback<syncer::SyncService*(void)>& get_sync_service_callback,
vabr0b75a3452016-02-23 10:14:5579 const base::Callback<bookmarks::BookmarkModel*(void)>&
80 get_bookmark_model_callback,
vabr9352dd92016-02-19 16:09:4981 scoped_refptr<base::SingleThreadTaskRunner> db_thread,
82 scoped_refptr<base::SingleThreadTaskRunner> file_thread,
83 history::HistoryService* history_service)
maxbogue7e006db2016-10-03 19:48:2884 : syncer::FakeSyncClient(factory),
vabr0c775a12016-01-29 08:50:5985 pref_service_(pref_service),
vabr9352dd92016-02-19 16:09:4986 sync_sessions_client_(sync_sessions_client),
87 personal_data_manager_(personal_data_manager),
88 get_syncable_service_callback_(get_syncable_service_callback),
89 get_sync_service_callback_(get_sync_service_callback),
vabr0b75a3452016-02-23 10:14:5590 get_bookmark_model_callback_(get_bookmark_model_callback),
vabr9352dd92016-02-19 16:09:4991 db_thread_(db_thread),
92 file_thread_(file_thread),
93 history_service_(history_service) {
94 DCHECK_EQ(!!db_thread_, !!file_thread_);
95}
vabr0c775a12016-01-29 08:50:5996
97BundleSyncClient::~BundleSyncClient() = default;
98
99PrefService* BundleSyncClient::GetPrefService() {
100 return pref_service_;
101}
102
vabr0c775a12016-01-29 08:50:59103sync_sessions::SyncSessionsClient* BundleSyncClient::GetSyncSessionsClient() {
104 return sync_sessions_client_;
105}
106
vabr9352dd92016-02-19 16:09:49107autofill::PersonalDataManager* BundleSyncClient::GetPersonalDataManager() {
108 return personal_data_manager_;
109}
110
111base::WeakPtr<syncer::SyncableService>
112BundleSyncClient::GetSyncableServiceForType(syncer::ModelType type) {
113 if (get_syncable_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28114 return syncer::FakeSyncClient::GetSyncableServiceForType(type);
vabr9352dd92016-02-19 16:09:49115 return get_syncable_service_callback_.Run(type);
116}
117
maxbogue7e006db2016-10-03 19:48:28118syncer::SyncService* BundleSyncClient::GetSyncService() {
vabr9352dd92016-02-19 16:09:49119 if (get_sync_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28120 return syncer::FakeSyncClient::GetSyncService();
vabr9352dd92016-02-19 16:09:49121 return get_sync_service_callback_.Run();
122}
123
124scoped_refptr<syncer::ModelSafeWorker>
125BundleSyncClient::CreateModelWorkerForGroup(
126 syncer::ModelSafeGroup group,
127 syncer::WorkerLoopDestructionObserver* observer) {
128 if (!db_thread_)
129 return FakeSyncClient::CreateModelWorkerForGroup(group, observer);
130 DCHECK(file_thread_) << "DB thread was specified but FILE thread was not.";
131 switch (group) {
132 case syncer::GROUP_DB:
maxbogue7e006db2016-10-03 19:48:28133 return new syncer::BrowserThreadModelWorker(db_thread_, syncer::GROUP_DB,
134 observer);
vabr9352dd92016-02-19 16:09:49135 case syncer::GROUP_FILE:
maxbogue7e006db2016-10-03 19:48:28136 return new syncer::BrowserThreadModelWorker(file_thread_,
137 syncer::GROUP_FILE, observer);
vabr9352dd92016-02-19 16:09:49138 case syncer::GROUP_UI:
maxbogue7e006db2016-10-03 19:48:28139 return new syncer::UIModelWorker(base::ThreadTaskRunnerHandle::Get(),
140 observer);
vabr9352dd92016-02-19 16:09:49141 case syncer::GROUP_PASSIVE:
142 return new syncer::PassiveModelWorker(observer);
143 case syncer::GROUP_HISTORY: {
144 history::HistoryService* history_service = GetHistoryService();
145 if (!history_service)
146 return nullptr;
147 return new HistoryModelWorker(history_service->AsWeakPtr(),
148 base::ThreadTaskRunnerHandle::Get(),
149 observer);
150 }
151 default:
152 return nullptr;
153 }
154}
155
156history::HistoryService* BundleSyncClient::GetHistoryService() {
157 if (history_service_)
158 return history_service_;
159 return FakeSyncClient::GetHistoryService();
160}
161
vabr0b75a3452016-02-23 10:14:55162bookmarks::BookmarkModel* BundleSyncClient::GetBookmarkModel() {
163 if (get_bookmark_model_callback_.is_null())
164 return FakeSyncClient::GetBookmarkModel();
165 return get_bookmark_model_callback_.Run();
166}
167
vabr0c775a12016-01-29 08:50:59168} // namespace
169
vabr9e9222f2016-01-21 10:18:03170void EmptyNetworkTimeUpdate(const base::Time&,
171 const base::TimeDelta&,
172 const base::TimeDelta&) {}
173
vabr0c775a12016-01-29 08:50:59174void RegisterPrefsForProfileSyncService(
175 user_prefs::PrefRegistrySyncable* registry) {
maxbogue7e006db2016-10-03 19:48:28176 syncer::SyncPrefs::RegisterProfilePrefs(registry);
vabr0c775a12016-01-29 08:50:59177 AccountTrackerService::RegisterPrefs(registry);
178 SigninManagerBase::RegisterProfilePrefs(registry);
179 SigninManagerBase::RegisterPrefs(registry);
180}
vabr9e9222f2016-01-21 10:18:03181
vabr0c775a12016-01-29 08:50:59182ProfileSyncServiceBundle::SyncClientBuilder::~SyncClientBuilder() = default;
183
184ProfileSyncServiceBundle::SyncClientBuilder::SyncClientBuilder(
185 ProfileSyncServiceBundle* bundle)
186 : bundle_(bundle) {}
187
vabr9352dd92016-02-19 16:09:49188void ProfileSyncServiceBundle::SyncClientBuilder::SetPersonalDataManager(
189 autofill::PersonalDataManager* personal_data_manager) {
190 personal_data_manager_ = personal_data_manager;
191}
192
193// The client will call this callback to produce the service.
194void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncableServiceCallback(
195 const base::Callback<base::WeakPtr<syncer::SyncableService>(
196 syncer::ModelType type)>& get_syncable_service_callback) {
197 get_syncable_service_callback_ = get_syncable_service_callback;
198}
199
200// The client will call this callback to produce the service.
201void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncServiceCallback(
maxbogue7e006db2016-10-03 19:48:28202 const base::Callback<syncer::SyncService*(void)>&
vabr9352dd92016-02-19 16:09:49203 get_sync_service_callback) {
204 get_sync_service_callback_ = get_sync_service_callback;
205}
206
207void ProfileSyncServiceBundle::SyncClientBuilder::SetHistoryService(
208 history::HistoryService* history_service) {
209 history_service_ = history_service;
210}
211
vabr0b75a3452016-02-23 10:14:55212void ProfileSyncServiceBundle::SyncClientBuilder::SetBookmarkModelCallback(
213 const base::Callback<bookmarks::BookmarkModel*(void)>&
214 get_bookmark_model_callback) {
215 get_bookmark_model_callback_ = get_bookmark_model_callback;
216}
217
maxbogue7e006db2016-10-03 19:48:28218std::unique_ptr<syncer::FakeSyncClient>
vabr0c775a12016-01-29 08:50:59219ProfileSyncServiceBundle::SyncClientBuilder::Build() {
ricea799a1fd2016-08-22 02:45:53220 return base::MakeUnique<BundleSyncClient>(
vabr0c775a12016-01-29 08:50:59221 bundle_->component_factory(), bundle_->pref_service(),
zea32a7684cf2016-02-24 20:41:48222 bundle_->sync_sessions_client(), personal_data_manager_,
223 get_syncable_service_callback_, get_sync_service_callback_,
224 get_bookmark_model_callback_,
vabr9352dd92016-02-19 16:09:49225 activate_model_creation_ ? bundle_->db_thread() : nullptr,
vabr6b1e9712016-02-19 16:45:01226 activate_model_creation_ ? base::ThreadTaskRunnerHandle::Get() : nullptr,
ricea799a1fd2016-08-22 02:45:53227 history_service_);
vabr0c775a12016-01-29 08:50:59228}
229
230ProfileSyncServiceBundle::ProfileSyncServiceBundle()
vabr6b1e9712016-02-19 16:45:01231 : db_thread_(base::ThreadTaskRunnerHandle::Get()),
232 worker_pool_owner_(2, "sync test worker pool"),
vabr0c775a12016-01-29 08:50:59233 signin_client_(&pref_service_),
234#if defined(OS_CHROMEOS)
235 signin_manager_(&signin_client_, &account_tracker_),
236#else
237 signin_manager_(&signin_client_,
238 &auth_service_,
239 &account_tracker_,
240 nullptr),
241#endif
242 url_request_context_(new net::TestURLRequestContextGetter(
243 base::ThreadTaskRunnerHandle::Get())) {
maxbogue0a379452016-09-22 21:35:05244 RegisterPrefsForProfileSyncService(pref_service_.registry());
vabr0c775a12016-01-29 08:50:59245 auth_service_.set_auto_post_fetch_response_on_message_loop(true);
246 account_tracker_.Initialize(&signin_client_);
247 signin_manager_.Initialize(&pref_service_);
248}
249
vabr6b1e9712016-02-19 16:45:01250ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {}
251
252ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
maxbogue1a84b142016-03-15 01:58:16253 ProfileSyncService::StartBehavior start_behavior,
maxbogue7e006db2016-10-03 19:48:28254 std::unique_ptr<syncer::SyncClient> sync_client) {
vabr6b1e9712016-02-19 16:45:01255 ProfileSyncService::InitParams init_params;
256
257 init_params.start_behavior = start_behavior;
258 init_params.sync_client = std::move(sync_client);
259 init_params.signin_wrapper =
ricea799a1fd2016-08-22 02:45:53260 base::MakeUnique<SigninManagerWrapper>(signin_manager());
vabr6b1e9712016-02-19 16:45:01261 init_params.oauth2_token_service = auth_service();
262 init_params.network_time_update_callback =
263 base::Bind(&EmptyNetworkTimeUpdate);
264 init_params.base_directory = base::FilePath(FILE_PATH_LITERAL("dummyPath"));
265 init_params.url_request_context = url_request_context();
266 init_params.debug_identifier = "dummyDebugName";
267 init_params.channel = version_info::Channel::UNKNOWN;
268 init_params.db_thread = db_thread_;
269 init_params.file_thread = base::ThreadTaskRunnerHandle::Get();
270 init_params.blocking_pool = worker_pool_owner_.pool().get();
271
272 return init_params;
273}
274
vabr9e9222f2016-01-21 10:18:03275} // namespace browser_sync