blob: ee186d14d3c41cfdd6ee09c2463b6fcb3637eacd [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"
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"
maxbogue288c69172016-11-18 05:27:3218#include "components/sync/engine/browser_thread_model_worker.h"
Max Boguefef332d2016-07-28 22:09:0919#include "components/sync/engine/passive_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"
vabr0c775a12016-01-29 08:50:5922
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:
fdorayea7a7ec2016-11-07 16:35:08132 return new syncer::BrowserThreadModelWorker(db_thread_, syncer::GROUP_DB);
vabr9352dd92016-02-19 16:09:49133 case syncer::GROUP_FILE:
maxbogue7e006db2016-10-03 19:48:28134 return new syncer::BrowserThreadModelWorker(file_thread_,
fdorayea7a7ec2016-11-07 16:35:08135 syncer::GROUP_FILE);
vabr9352dd92016-02-19 16:09:49136 case syncer::GROUP_UI:
fdorayea7a7ec2016-11-07 16:35:08137 return new syncer::UIModelWorker(base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49138 case syncer::GROUP_PASSIVE:
fdorayea7a7ec2016-11-07 16:35:08139 return new syncer::PassiveModelWorker();
vabr9352dd92016-02-19 16:09:49140 case syncer::GROUP_HISTORY: {
141 history::HistoryService* history_service = GetHistoryService();
142 if (!history_service)
143 return nullptr;
144 return new HistoryModelWorker(history_service->AsWeakPtr(),
fdorayea7a7ec2016-11-07 16:35:08145 base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49146 }
147 default:
148 return nullptr;
149 }
150}
151
152history::HistoryService* BundleSyncClient::GetHistoryService() {
153 if (history_service_)
154 return history_service_;
155 return FakeSyncClient::GetHistoryService();
156}
157
vabr0b75a3452016-02-23 10:14:55158bookmarks::BookmarkModel* BundleSyncClient::GetBookmarkModel() {
159 if (get_bookmark_model_callback_.is_null())
160 return FakeSyncClient::GetBookmarkModel();
161 return get_bookmark_model_callback_.Run();
162}
163
vabr0c775a12016-01-29 08:50:59164} // namespace
165
vabr9e9222f2016-01-21 10:18:03166void EmptyNetworkTimeUpdate(const base::Time&,
167 const base::TimeDelta&,
168 const base::TimeDelta&) {}
169
vabr0c775a12016-01-29 08:50:59170void RegisterPrefsForProfileSyncService(
171 user_prefs::PrefRegistrySyncable* registry) {
maxbogue7e006db2016-10-03 19:48:28172 syncer::SyncPrefs::RegisterProfilePrefs(registry);
vabr0c775a12016-01-29 08:50:59173 AccountTrackerService::RegisterPrefs(registry);
174 SigninManagerBase::RegisterProfilePrefs(registry);
175 SigninManagerBase::RegisterPrefs(registry);
176}
vabr9e9222f2016-01-21 10:18:03177
vabr0c775a12016-01-29 08:50:59178ProfileSyncServiceBundle::SyncClientBuilder::~SyncClientBuilder() = default;
179
180ProfileSyncServiceBundle::SyncClientBuilder::SyncClientBuilder(
181 ProfileSyncServiceBundle* bundle)
182 : bundle_(bundle) {}
183
vabr9352dd92016-02-19 16:09:49184void ProfileSyncServiceBundle::SyncClientBuilder::SetPersonalDataManager(
185 autofill::PersonalDataManager* personal_data_manager) {
186 personal_data_manager_ = personal_data_manager;
187}
188
189// The client will call this callback to produce the service.
190void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncableServiceCallback(
191 const base::Callback<base::WeakPtr<syncer::SyncableService>(
192 syncer::ModelType type)>& get_syncable_service_callback) {
193 get_syncable_service_callback_ = get_syncable_service_callback;
194}
195
196// The client will call this callback to produce the service.
197void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncServiceCallback(
maxbogue7e006db2016-10-03 19:48:28198 const base::Callback<syncer::SyncService*(void)>&
vabr9352dd92016-02-19 16:09:49199 get_sync_service_callback) {
200 get_sync_service_callback_ = get_sync_service_callback;
201}
202
203void ProfileSyncServiceBundle::SyncClientBuilder::SetHistoryService(
204 history::HistoryService* history_service) {
205 history_service_ = history_service;
206}
207
vabr0b75a3452016-02-23 10:14:55208void ProfileSyncServiceBundle::SyncClientBuilder::SetBookmarkModelCallback(
209 const base::Callback<bookmarks::BookmarkModel*(void)>&
210 get_bookmark_model_callback) {
211 get_bookmark_model_callback_ = get_bookmark_model_callback;
212}
213
maxbogue7e006db2016-10-03 19:48:28214std::unique_ptr<syncer::FakeSyncClient>
vabr0c775a12016-01-29 08:50:59215ProfileSyncServiceBundle::SyncClientBuilder::Build() {
ricea799a1fd2016-08-22 02:45:53216 return base::MakeUnique<BundleSyncClient>(
vabr0c775a12016-01-29 08:50:59217 bundle_->component_factory(), bundle_->pref_service(),
zea32a7684cf2016-02-24 20:41:48218 bundle_->sync_sessions_client(), personal_data_manager_,
219 get_syncable_service_callback_, get_sync_service_callback_,
220 get_bookmark_model_callback_,
vabr9352dd92016-02-19 16:09:49221 activate_model_creation_ ? bundle_->db_thread() : nullptr,
vabr6b1e9712016-02-19 16:45:01222 activate_model_creation_ ? base::ThreadTaskRunnerHandle::Get() : nullptr,
ricea799a1fd2016-08-22 02:45:53223 history_service_);
vabr0c775a12016-01-29 08:50:59224}
225
226ProfileSyncServiceBundle::ProfileSyncServiceBundle()
vabr6b1e9712016-02-19 16:45:01227 : db_thread_(base::ThreadTaskRunnerHandle::Get()),
228 worker_pool_owner_(2, "sync test worker pool"),
vabr0c775a12016-01-29 08:50:59229 signin_client_(&pref_service_),
230#if defined(OS_CHROMEOS)
231 signin_manager_(&signin_client_, &account_tracker_),
232#else
233 signin_manager_(&signin_client_,
234 &auth_service_,
235 &account_tracker_,
236 nullptr),
237#endif
238 url_request_context_(new net::TestURLRequestContextGetter(
239 base::ThreadTaskRunnerHandle::Get())) {
maxbogue0a379452016-09-22 21:35:05240 RegisterPrefsForProfileSyncService(pref_service_.registry());
vabr0c775a12016-01-29 08:50:59241 auth_service_.set_auto_post_fetch_response_on_message_loop(true);
242 account_tracker_.Initialize(&signin_client_);
243 signin_manager_.Initialize(&pref_service_);
244}
245
vabr6b1e9712016-02-19 16:45:01246ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {}
247
248ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
maxbogue1a84b142016-03-15 01:58:16249 ProfileSyncService::StartBehavior start_behavior,
maxbogue7e006db2016-10-03 19:48:28250 std::unique_ptr<syncer::SyncClient> sync_client) {
vabr6b1e9712016-02-19 16:45:01251 ProfileSyncService::InitParams init_params;
252
253 init_params.start_behavior = start_behavior;
254 init_params.sync_client = std::move(sync_client);
255 init_params.signin_wrapper =
ricea799a1fd2016-08-22 02:45:53256 base::MakeUnique<SigninManagerWrapper>(signin_manager());
vabr6b1e9712016-02-19 16:45:01257 init_params.oauth2_token_service = auth_service();
258 init_params.network_time_update_callback =
259 base::Bind(&EmptyNetworkTimeUpdate);
260 init_params.base_directory = base::FilePath(FILE_PATH_LITERAL("dummyPath"));
261 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