blob: 575271243a21b99d4d72a5902c2568ee6d8f6691 [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"
Gabriel Charette5ff87ce2017-05-16 18:03:4510#include "base/single_thread_task_runner.h"
fdoraya19b7702016-12-23 14:19:3111#include "base/threading/thread_task_runner_handle.h"
vabr0b75a3452016-02-23 10:14:5512#include "components/bookmarks/browser/bookmark_model.h"
vabr9352dd92016-02-19 16:09:4913#include "components/history/core/browser/history_model_worker.h"
fdorayea7a7ec2016-11-07 16:35:0814#include "components/history/core/browser/history_service.h"
vabr0c775a12016-01-29 08:50:5915#include "components/pref_registry/pref_registry_syncable.h"
16#include "components/signin/core/browser/signin_manager_base.h"
maxbogue2f960e52016-10-07 01:24:1517#include "components/sync/base/sync_prefs.h"
maxbogue455a57e32016-08-14 00:08:3218#include "components/sync/driver/signin_manager_wrapper.h"
maxbogue288c69172016-11-18 05:27:3219#include "components/sync/engine/browser_thread_model_worker.h"
Max Boguefef332d2016-07-28 22:09:0920#include "components/sync/engine/passive_model_worker.h"
maxbogue288c69172016-11-18 05:27:3221#include "components/sync/engine/ui_model_worker.h"
vabr0c775a12016-01-29 08:50:5922#include "net/url_request/url_request_test_util.h"
23
vabr9e9222f2016-01-21 10:18:0324namespace browser_sync {
25
vabr0c775a12016-01-29 08:50:5926namespace {
27
maxbogue7e006db2016-10-03 19:48:2828class BundleSyncClient : public syncer::FakeSyncClient {
vabr0c775a12016-01-29 08:50:5929 public:
maxbogue7e006db2016-10-03 19:48:2830 BundleSyncClient(syncer::SyncApiComponentFactory* factory,
maxbogue26f40222016-09-16 20:22:1831 PrefService* pref_service,
32 sync_sessions::SyncSessionsClient* sync_sessions_client,
33 autofill::PersonalDataManager* personal_data_manager,
34 const base::Callback<base::WeakPtr<syncer::SyncableService>(
35 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2836 const base::Callback<syncer::SyncService*(void)>&
maxbogue26f40222016-09-16 20:22:1837 get_sync_service_callback,
38 const base::Callback<bookmarks::BookmarkModel*(void)>&
39 get_bookmark_model_callback,
40 scoped_refptr<base::SingleThreadTaskRunner> db_thread,
41 scoped_refptr<base::SingleThreadTaskRunner> file_thread,
42 history::HistoryService* history_service);
vabr0c775a12016-01-29 08:50:5943
44 ~BundleSyncClient() override;
45
46 PrefService* GetPrefService() override;
vabr0c775a12016-01-29 08:50:5947 sync_sessions::SyncSessionsClient* GetSyncSessionsClient() override;
vabr9352dd92016-02-19 16:09:4948 autofill::PersonalDataManager* GetPersonalDataManager() override;
skyma56dd492017-04-06 19:20:2749 base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
50 syncer::ModelType type) override;
maxbogue7e006db2016-10-03 19:48:2851 syncer::SyncService* GetSyncService() override;
vabr9352dd92016-02-19 16:09:4952 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup(
fdorayea7a7ec2016-11-07 16:35:0853 syncer::ModelSafeGroup group) override;
vabr9352dd92016-02-19 16:09:4954 history::HistoryService* GetHistoryService() override;
vabr0b75a3452016-02-23 10:14:5555 bookmarks::BookmarkModel* GetBookmarkModel() override;
vabr0c775a12016-01-29 08:50:5956
57 private:
58 PrefService* const pref_service_;
vabr0c775a12016-01-29 08:50:5959 sync_sessions::SyncSessionsClient* const sync_sessions_client_;
vabr9352dd92016-02-19 16:09:4960 autofill::PersonalDataManager* const personal_data_manager_;
61 const base::Callback<base::WeakPtr<syncer::SyncableService>(
62 syncer::ModelType type)>
63 get_syncable_service_callback_;
maxbogue7e006db2016-10-03 19:48:2864 const base::Callback<syncer::SyncService*(void)> get_sync_service_callback_;
vabr0b75a3452016-02-23 10:14:5565 const base::Callback<bookmarks::BookmarkModel*(void)>
66 get_bookmark_model_callback_;
vabr9352dd92016-02-19 16:09:4967 // These task runners, if not null, are used in CreateModelWorkerForGroup.
68 const scoped_refptr<base::SingleThreadTaskRunner> db_thread_;
69 const scoped_refptr<base::SingleThreadTaskRunner> file_thread_;
70 history::HistoryService* history_service_;
vabr0c775a12016-01-29 08:50:5971};
72
73BundleSyncClient::BundleSyncClient(
maxbogue7e006db2016-10-03 19:48:2874 syncer::SyncApiComponentFactory* factory,
vabr0c775a12016-01-29 08:50:5975 PrefService* pref_service,
vabr9352dd92016-02-19 16:09:4976 sync_sessions::SyncSessionsClient* sync_sessions_client,
77 autofill::PersonalDataManager* personal_data_manager,
78 const base::Callback<base::WeakPtr<syncer::SyncableService>(
79 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2880 const base::Callback<syncer::SyncService*(void)>& get_sync_service_callback,
vabr0b75a3452016-02-23 10:14:5581 const base::Callback<bookmarks::BookmarkModel*(void)>&
82 get_bookmark_model_callback,
vabr9352dd92016-02-19 16:09:4983 scoped_refptr<base::SingleThreadTaskRunner> db_thread,
84 scoped_refptr<base::SingleThreadTaskRunner> file_thread,
85 history::HistoryService* history_service)
maxbogue7e006db2016-10-03 19:48:2886 : syncer::FakeSyncClient(factory),
vabr0c775a12016-01-29 08:50:5987 pref_service_(pref_service),
vabr9352dd92016-02-19 16:09:4988 sync_sessions_client_(sync_sessions_client),
89 personal_data_manager_(personal_data_manager),
90 get_syncable_service_callback_(get_syncable_service_callback),
91 get_sync_service_callback_(get_sync_service_callback),
vabr0b75a3452016-02-23 10:14:5592 get_bookmark_model_callback_(get_bookmark_model_callback),
vabr9352dd92016-02-19 16:09:4993 db_thread_(db_thread),
94 file_thread_(file_thread),
95 history_service_(history_service) {
96 DCHECK_EQ(!!db_thread_, !!file_thread_);
97}
vabr0c775a12016-01-29 08:50:5998
99BundleSyncClient::~BundleSyncClient() = default;
100
101PrefService* BundleSyncClient::GetPrefService() {
102 return pref_service_;
103}
104
vabr0c775a12016-01-29 08:50:59105sync_sessions::SyncSessionsClient* BundleSyncClient::GetSyncSessionsClient() {
106 return sync_sessions_client_;
107}
108
vabr9352dd92016-02-19 16:09:49109autofill::PersonalDataManager* BundleSyncClient::GetPersonalDataManager() {
110 return personal_data_manager_;
111}
112
skyma56dd492017-04-06 19:20:27113base::WeakPtr<syncer::SyncableService>
114BundleSyncClient::GetSyncableServiceForType(syncer::ModelType type) {
vabr9352dd92016-02-19 16:09:49115 if (get_syncable_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28116 return syncer::FakeSyncClient::GetSyncableServiceForType(type);
skyma56dd492017-04-06 19:20:27117 return get_syncable_service_callback_.Run(type);
vabr9352dd92016-02-19 16:09:49118}
119
maxbogue7e006db2016-10-03 19:48:28120syncer::SyncService* BundleSyncClient::GetSyncService() {
vabr9352dd92016-02-19 16:09:49121 if (get_sync_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28122 return syncer::FakeSyncClient::GetSyncService();
vabr9352dd92016-02-19 16:09:49123 return get_sync_service_callback_.Run();
124}
125
126scoped_refptr<syncer::ModelSafeWorker>
fdorayea7a7ec2016-11-07 16:35:08127BundleSyncClient::CreateModelWorkerForGroup(syncer::ModelSafeGroup group) {
vabr9352dd92016-02-19 16:09:49128 if (!db_thread_)
fdorayea7a7ec2016-11-07 16:35:08129 return FakeSyncClient::CreateModelWorkerForGroup(group);
vabr9352dd92016-02-19 16:09:49130 DCHECK(file_thread_) << "DB thread was specified but FILE thread was not.";
131 switch (group) {
132 case syncer::GROUP_DB:
fdorayea7a7ec2016-11-07 16:35:08133 return new syncer::BrowserThreadModelWorker(db_thread_, syncer::GROUP_DB);
vabr9352dd92016-02-19 16:09:49134 case syncer::GROUP_FILE:
maxbogue7e006db2016-10-03 19:48:28135 return new syncer::BrowserThreadModelWorker(file_thread_,
fdorayea7a7ec2016-11-07 16:35:08136 syncer::GROUP_FILE);
vabr9352dd92016-02-19 16:09:49137 case syncer::GROUP_UI:
fdorayea7a7ec2016-11-07 16:35:08138 return new syncer::UIModelWorker(base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49139 case syncer::GROUP_PASSIVE:
fdorayea7a7ec2016-11-07 16:35:08140 return new syncer::PassiveModelWorker();
vabr9352dd92016-02-19 16:09:49141 case syncer::GROUP_HISTORY: {
142 history::HistoryService* history_service = GetHistoryService();
143 if (!history_service)
144 return nullptr;
145 return new HistoryModelWorker(history_service->AsWeakPtr(),
fdorayea7a7ec2016-11-07 16:35:08146 base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49147 }
148 default:
149 return nullptr;
150 }
151}
152
153history::HistoryService* BundleSyncClient::GetHistoryService() {
154 if (history_service_)
155 return history_service_;
156 return FakeSyncClient::GetHistoryService();
157}
158
vabr0b75a3452016-02-23 10:14:55159bookmarks::BookmarkModel* BundleSyncClient::GetBookmarkModel() {
160 if (get_bookmark_model_callback_.is_null())
161 return FakeSyncClient::GetBookmarkModel();
162 return get_bookmark_model_callback_.Run();
163}
164
vabr0c775a12016-01-29 08:50:59165} // namespace
166
vabr9e9222f2016-01-21 10:18:03167void EmptyNetworkTimeUpdate(const base::Time&,
168 const base::TimeDelta&,
169 const base::TimeDelta&) {}
170
vabr0c775a12016-01-29 08:50:59171void RegisterPrefsForProfileSyncService(
172 user_prefs::PrefRegistrySyncable* registry) {
maxbogue7e006db2016-10-03 19:48:28173 syncer::SyncPrefs::RegisterProfilePrefs(registry);
vabr0c775a12016-01-29 08:50:59174 AccountTrackerService::RegisterPrefs(registry);
175 SigninManagerBase::RegisterProfilePrefs(registry);
176 SigninManagerBase::RegisterPrefs(registry);
177}
vabr9e9222f2016-01-21 10:18:03178
vabr0c775a12016-01-29 08:50:59179ProfileSyncServiceBundle::SyncClientBuilder::~SyncClientBuilder() = default;
180
181ProfileSyncServiceBundle::SyncClientBuilder::SyncClientBuilder(
182 ProfileSyncServiceBundle* bundle)
183 : bundle_(bundle) {}
184
vabr9352dd92016-02-19 16:09:49185void ProfileSyncServiceBundle::SyncClientBuilder::SetPersonalDataManager(
186 autofill::PersonalDataManager* personal_data_manager) {
187 personal_data_manager_ = personal_data_manager;
188}
189
190// The client will call this callback to produce the service.
191void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncableServiceCallback(
192 const base::Callback<base::WeakPtr<syncer::SyncableService>(
193 syncer::ModelType type)>& get_syncable_service_callback) {
194 get_syncable_service_callback_ = get_syncable_service_callback;
195}
196
197// The client will call this callback to produce the service.
198void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncServiceCallback(
maxbogue7e006db2016-10-03 19:48:28199 const base::Callback<syncer::SyncService*(void)>&
vabr9352dd92016-02-19 16:09:49200 get_sync_service_callback) {
201 get_sync_service_callback_ = get_sync_service_callback;
202}
203
204void ProfileSyncServiceBundle::SyncClientBuilder::SetHistoryService(
205 history::HistoryService* history_service) {
206 history_service_ = history_service;
207}
208
vabr0b75a3452016-02-23 10:14:55209void ProfileSyncServiceBundle::SyncClientBuilder::SetBookmarkModelCallback(
210 const base::Callback<bookmarks::BookmarkModel*(void)>&
211 get_bookmark_model_callback) {
212 get_bookmark_model_callback_ = get_bookmark_model_callback;
213}
214
maxbogue7e006db2016-10-03 19:48:28215std::unique_ptr<syncer::FakeSyncClient>
vabr0c775a12016-01-29 08:50:59216ProfileSyncServiceBundle::SyncClientBuilder::Build() {
ricea799a1fd2016-08-22 02:45:53217 return base::MakeUnique<BundleSyncClient>(
vabr0c775a12016-01-29 08:50:59218 bundle_->component_factory(), bundle_->pref_service(),
zea32a7684cf2016-02-24 20:41:48219 bundle_->sync_sessions_client(), personal_data_manager_,
220 get_syncable_service_callback_, get_sync_service_callback_,
221 get_bookmark_model_callback_,
vabr9352dd92016-02-19 16:09:49222 activate_model_creation_ ? bundle_->db_thread() : nullptr,
vabr6b1e9712016-02-19 16:45:01223 activate_model_creation_ ? base::ThreadTaskRunnerHandle::Get() : nullptr,
ricea799a1fd2016-08-22 02:45:53224 history_service_);
vabr0c775a12016-01-29 08:50:59225}
226
227ProfileSyncServiceBundle::ProfileSyncServiceBundle()
vabr6b1e9712016-02-19 16:45:01228 : db_thread_(base::ThreadTaskRunnerHandle::Get()),
229 worker_pool_owner_(2, "sync test worker pool"),
vabr0c775a12016-01-29 08:50:59230 signin_client_(&pref_service_),
231#if defined(OS_CHROMEOS)
232 signin_manager_(&signin_client_, &account_tracker_),
233#else
234 signin_manager_(&signin_client_,
235 &auth_service_,
236 &account_tracker_,
237 nullptr),
238#endif
239 url_request_context_(new net::TestURLRequestContextGetter(
240 base::ThreadTaskRunnerHandle::Get())) {
maxbogue0a379452016-09-22 21:35:05241 RegisterPrefsForProfileSyncService(pref_service_.registry());
vabr0c775a12016-01-29 08:50:59242 auth_service_.set_auto_post_fetch_response_on_message_loop(true);
243 account_tracker_.Initialize(&signin_client_);
244 signin_manager_.Initialize(&pref_service_);
245}
246
vabr6b1e9712016-02-19 16:45:01247ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {}
248
249ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
maxbogue1a84b142016-03-15 01:58:16250 ProfileSyncService::StartBehavior start_behavior,
maxbogue7e006db2016-10-03 19:48:28251 std::unique_ptr<syncer::SyncClient> sync_client) {
vabr6b1e9712016-02-19 16:45:01252 ProfileSyncService::InitParams init_params;
253
254 init_params.start_behavior = start_behavior;
255 init_params.sync_client = std::move(sync_client);
256 init_params.signin_wrapper =
ricea799a1fd2016-08-22 02:45:53257 base::MakeUnique<SigninManagerWrapper>(signin_manager());
vabr6b1e9712016-02-19 16:45:01258 init_params.oauth2_token_service = auth_service();
259 init_params.network_time_update_callback =
260 base::Bind(&EmptyNetworkTimeUpdate);
261 init_params.base_directory = base::FilePath(FILE_PATH_LITERAL("dummyPath"));
262 init_params.url_request_context = url_request_context();
263 init_params.debug_identifier = "dummyDebugName";
264 init_params.channel = version_info::Channel::UNKNOWN;
vabr6b1e9712016-02-19 16:45:01265
266 return init_params;
267}
268
vabr9e9222f2016-01-21 10:18:03269} // namespace browser_sync