blob: 7babee384603bee04d7217cf0471adee703f3b6b [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
Marc Treib088dcb792018-03-29 18:33:177#include <string>
maxbogue26f40222016-09-16 20:22:188#include <utility>
vabr9e9222f2016-01-21 10:18:039
David Roger793d1ce2017-11-28 14:42:3210#include "base/bind.h"
Marc Treib8c479392018-07-11 20:19:0111#include "base/sequenced_task_runner.h"
Gabriel Charette5ff87ce2017-05-16 18:03:4512#include "base/single_thread_task_runner.h"
Marc Treib8c479392018-07-11 20:19:0113#include "base/threading/sequenced_task_runner_handle.h"
fdoraya19b7702016-12-23 14:19:3114#include "base/threading/thread_task_runner_handle.h"
vabr0b75a3452016-02-23 10:14:5515#include "components/bookmarks/browser/bookmark_model.h"
vabr9352dd92016-02-19 16:09:4916#include "components/history/core/browser/history_model_worker.h"
fdorayea7a7ec2016-11-07 16:35:0817#include "components/history/core/browser/history_service.h"
vabr0c775a12016-01-29 08:50:5918#include "components/pref_registry/pref_registry_syncable.h"
19#include "components/signin/core/browser/signin_manager_base.h"
maxbogue2f960e52016-10-07 01:24:1520#include "components/sync/base/sync_prefs.h"
Max Boguefef332d2016-07-28 22:09:0921#include "components/sync/engine/passive_model_worker.h"
stanisc5c6a2942017-06-19 20:56:5422#include "components/sync/engine/sequenced_model_worker.h"
maxbogue288c69172016-11-18 05:27:3223#include "components/sync/engine/ui_model_worker.h"
Patrick Noland46bdc282017-10-31 18:21:5624#include "components/sync/model/model_type_store_test_util.h"
Mikel Astizcfd7bc6a2018-06-13 13:18:3125#include "components/sync_sessions/local_session_event_router.h"
Mark Pilgrim215ccf92018-06-11 22:32:1926#include "services/network/public/cpp/shared_url_loader_factory.h"
27#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
28#include "services/network/test/test_url_loader_factory.h"
Mikel Astizcfd7bc6a2018-06-13 13:18:3129#include "testing/gmock/include/gmock/gmock.h"
vabr0c775a12016-01-29 08:50:5930
vabr9e9222f2016-01-21 10:18:0331namespace browser_sync {
32
vabr0c775a12016-01-29 08:50:5933namespace {
34
Mikel Astizcfd7bc6a2018-06-13 13:18:3135class DummyRouter : public sync_sessions::LocalSessionEventRouter {
36 public:
37 DummyRouter() {}
38 ~DummyRouter() override {}
39 void StartRoutingTo(
40 sync_sessions::LocalSessionEventHandler* handler) override {}
41 void Stop() override {}
42};
43
maxbogue7e006db2016-10-03 19:48:2844class BundleSyncClient : public syncer::FakeSyncClient {
vabr0c775a12016-01-29 08:50:5945 public:
maxbogue7e006db2016-10-03 19:48:2846 BundleSyncClient(syncer::SyncApiComponentFactory* factory,
maxbogue26f40222016-09-16 20:22:1847 PrefService* pref_service,
Mikel Astiz53131342018-07-19 08:59:5848 syncer::ModelTypeStoreService* model_type_store_service,
maxbogue26f40222016-09-16 20:22:1849 sync_sessions::SyncSessionsClient* sync_sessions_client,
50 autofill::PersonalDataManager* personal_data_manager,
51 const base::Callback<base::WeakPtr<syncer::SyncableService>(
52 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2853 const base::Callback<syncer::SyncService*(void)>&
maxbogue26f40222016-09-16 20:22:1854 get_sync_service_callback,
55 const base::Callback<bookmarks::BookmarkModel*(void)>&
56 get_bookmark_model_callback,
Marc Treib8c479392018-07-11 20:19:0157 scoped_refptr<base::SequencedTaskRunner> db_thread,
58 scoped_refptr<base::SequencedTaskRunner> file_thread,
maxbogue26f40222016-09-16 20:22:1859 history::HistoryService* history_service);
vabr0c775a12016-01-29 08:50:5960
61 ~BundleSyncClient() override;
62
63 PrefService* GetPrefService() override;
vabr0c775a12016-01-29 08:50:5964 sync_sessions::SyncSessionsClient* GetSyncSessionsClient() override;
vabr9352dd92016-02-19 16:09:4965 autofill::PersonalDataManager* GetPersonalDataManager() override;
skyma56dd492017-04-06 19:20:2766 base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
67 syncer::ModelType type) override;
maxbogue7e006db2016-10-03 19:48:2868 syncer::SyncService* GetSyncService() override;
Mikel Astiz53131342018-07-19 08:59:5869 syncer::ModelTypeStoreService* GetModelTypeStoreService() override;
vabr9352dd92016-02-19 16:09:4970 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup(
fdorayea7a7ec2016-11-07 16:35:0871 syncer::ModelSafeGroup group) override;
vabr9352dd92016-02-19 16:09:4972 history::HistoryService* GetHistoryService() override;
vabr0b75a3452016-02-23 10:14:5573 bookmarks::BookmarkModel* GetBookmarkModel() override;
vabr0c775a12016-01-29 08:50:5974
75 private:
76 PrefService* const pref_service_;
Mikel Astiz53131342018-07-19 08:59:5877 syncer::ModelTypeStoreService* const model_type_store_service_;
vabr0c775a12016-01-29 08:50:5978 sync_sessions::SyncSessionsClient* const sync_sessions_client_;
vabr9352dd92016-02-19 16:09:4979 autofill::PersonalDataManager* const personal_data_manager_;
80 const base::Callback<base::WeakPtr<syncer::SyncableService>(
81 syncer::ModelType type)>
82 get_syncable_service_callback_;
maxbogue7e006db2016-10-03 19:48:2883 const base::Callback<syncer::SyncService*(void)> get_sync_service_callback_;
vabr0b75a3452016-02-23 10:14:5584 const base::Callback<bookmarks::BookmarkModel*(void)>
85 get_bookmark_model_callback_;
vabr9352dd92016-02-19 16:09:4986 // These task runners, if not null, are used in CreateModelWorkerForGroup.
Marc Treib8c479392018-07-11 20:19:0187 const scoped_refptr<base::SequencedTaskRunner> db_thread_;
88 const scoped_refptr<base::SequencedTaskRunner> file_thread_;
vabr9352dd92016-02-19 16:09:4989 history::HistoryService* history_service_;
vabr0c775a12016-01-29 08:50:5990};
91
92BundleSyncClient::BundleSyncClient(
maxbogue7e006db2016-10-03 19:48:2893 syncer::SyncApiComponentFactory* factory,
vabr0c775a12016-01-29 08:50:5994 PrefService* pref_service,
Mikel Astiz53131342018-07-19 08:59:5895 syncer::ModelTypeStoreService* model_type_store_service,
vabr9352dd92016-02-19 16:09:4996 sync_sessions::SyncSessionsClient* sync_sessions_client,
97 autofill::PersonalDataManager* personal_data_manager,
98 const base::Callback<base::WeakPtr<syncer::SyncableService>(
99 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:28100 const base::Callback<syncer::SyncService*(void)>& get_sync_service_callback,
vabr0b75a3452016-02-23 10:14:55101 const base::Callback<bookmarks::BookmarkModel*(void)>&
102 get_bookmark_model_callback,
Marc Treib8c479392018-07-11 20:19:01103 scoped_refptr<base::SequencedTaskRunner> db_thread,
104 scoped_refptr<base::SequencedTaskRunner> file_thread,
vabr9352dd92016-02-19 16:09:49105 history::HistoryService* history_service)
maxbogue7e006db2016-10-03 19:48:28106 : syncer::FakeSyncClient(factory),
vabr0c775a12016-01-29 08:50:59107 pref_service_(pref_service),
Mikel Astiz53131342018-07-19 08:59:58108 model_type_store_service_(model_type_store_service),
vabr9352dd92016-02-19 16:09:49109 sync_sessions_client_(sync_sessions_client),
110 personal_data_manager_(personal_data_manager),
111 get_syncable_service_callback_(get_syncable_service_callback),
112 get_sync_service_callback_(get_sync_service_callback),
vabr0b75a3452016-02-23 10:14:55113 get_bookmark_model_callback_(get_bookmark_model_callback),
vabr9352dd92016-02-19 16:09:49114 db_thread_(db_thread),
115 file_thread_(file_thread),
116 history_service_(history_service) {
Sky Malicea8b17072017-10-11 15:45:39117 EXPECT_EQ(!!db_thread_, !!file_thread_);
vabr9352dd92016-02-19 16:09:49118}
vabr0c775a12016-01-29 08:50:59119
120BundleSyncClient::~BundleSyncClient() = default;
121
122PrefService* BundleSyncClient::GetPrefService() {
123 return pref_service_;
124}
125
vabr0c775a12016-01-29 08:50:59126sync_sessions::SyncSessionsClient* BundleSyncClient::GetSyncSessionsClient() {
127 return sync_sessions_client_;
128}
129
vabr9352dd92016-02-19 16:09:49130autofill::PersonalDataManager* BundleSyncClient::GetPersonalDataManager() {
131 return personal_data_manager_;
132}
133
skyma56dd492017-04-06 19:20:27134base::WeakPtr<syncer::SyncableService>
135BundleSyncClient::GetSyncableServiceForType(syncer::ModelType type) {
vabr9352dd92016-02-19 16:09:49136 if (get_syncable_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28137 return syncer::FakeSyncClient::GetSyncableServiceForType(type);
skyma56dd492017-04-06 19:20:27138 return get_syncable_service_callback_.Run(type);
vabr9352dd92016-02-19 16:09:49139}
140
maxbogue7e006db2016-10-03 19:48:28141syncer::SyncService* BundleSyncClient::GetSyncService() {
vabr9352dd92016-02-19 16:09:49142 if (get_sync_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28143 return syncer::FakeSyncClient::GetSyncService();
vabr9352dd92016-02-19 16:09:49144 return get_sync_service_callback_.Run();
145}
146
147scoped_refptr<syncer::ModelSafeWorker>
fdorayea7a7ec2016-11-07 16:35:08148BundleSyncClient::CreateModelWorkerForGroup(syncer::ModelSafeGroup group) {
vabr9352dd92016-02-19 16:09:49149 if (!db_thread_)
fdorayea7a7ec2016-11-07 16:35:08150 return FakeSyncClient::CreateModelWorkerForGroup(group);
Sky Malicea8b17072017-10-11 15:45:39151 EXPECT_TRUE(file_thread_)
152 << "DB thread was specified but FILE thread was not.";
vabr9352dd92016-02-19 16:09:49153 switch (group) {
154 case syncer::GROUP_DB:
stanisc5c6a2942017-06-19 20:56:54155 return new syncer::SequencedModelWorker(db_thread_, syncer::GROUP_DB);
vabr9352dd92016-02-19 16:09:49156 case syncer::GROUP_FILE:
stanisc5c6a2942017-06-19 20:56:54157 return new syncer::SequencedModelWorker(file_thread_, syncer::GROUP_FILE);
vabr9352dd92016-02-19 16:09:49158 case syncer::GROUP_UI:
fdorayea7a7ec2016-11-07 16:35:08159 return new syncer::UIModelWorker(base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49160 case syncer::GROUP_PASSIVE:
fdorayea7a7ec2016-11-07 16:35:08161 return new syncer::PassiveModelWorker();
vabr9352dd92016-02-19 16:09:49162 case syncer::GROUP_HISTORY: {
163 history::HistoryService* history_service = GetHistoryService();
164 if (!history_service)
165 return nullptr;
166 return new HistoryModelWorker(history_service->AsWeakPtr(),
fdorayea7a7ec2016-11-07 16:35:08167 base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49168 }
169 default:
170 return nullptr;
171 }
172}
173
Mikel Astiz53131342018-07-19 08:59:58174syncer::ModelTypeStoreService* BundleSyncClient::GetModelTypeStoreService() {
175 return model_type_store_service_;
176}
177
vabr9352dd92016-02-19 16:09:49178history::HistoryService* BundleSyncClient::GetHistoryService() {
179 if (history_service_)
180 return history_service_;
181 return FakeSyncClient::GetHistoryService();
182}
183
vabr0b75a3452016-02-23 10:14:55184bookmarks::BookmarkModel* BundleSyncClient::GetBookmarkModel() {
185 if (get_bookmark_model_callback_.is_null())
186 return FakeSyncClient::GetBookmarkModel();
187 return get_bookmark_model_callback_.Run();
188}
189
vabr0c775a12016-01-29 08:50:59190} // namespace
191
vabr0c775a12016-01-29 08:50:59192void RegisterPrefsForProfileSyncService(
193 user_prefs::PrefRegistrySyncable* registry) {
maxbogue7e006db2016-10-03 19:48:28194 syncer::SyncPrefs::RegisterProfilePrefs(registry);
vabr0c775a12016-01-29 08:50:59195 AccountTrackerService::RegisterPrefs(registry);
196 SigninManagerBase::RegisterProfilePrefs(registry);
197 SigninManagerBase::RegisterPrefs(registry);
198}
vabr9e9222f2016-01-21 10:18:03199
vabr0c775a12016-01-29 08:50:59200ProfileSyncServiceBundle::SyncClientBuilder::~SyncClientBuilder() = default;
201
202ProfileSyncServiceBundle::SyncClientBuilder::SyncClientBuilder(
203 ProfileSyncServiceBundle* bundle)
204 : bundle_(bundle) {}
205
vabr9352dd92016-02-19 16:09:49206void ProfileSyncServiceBundle::SyncClientBuilder::SetPersonalDataManager(
207 autofill::PersonalDataManager* personal_data_manager) {
208 personal_data_manager_ = personal_data_manager;
209}
210
211// The client will call this callback to produce the service.
212void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncableServiceCallback(
Mark Pilgrim306445e2018-07-11 13:38:54213 const base::RepeatingCallback<base::WeakPtr<syncer::SyncableService>(
vabr9352dd92016-02-19 16:09:49214 syncer::ModelType type)>& get_syncable_service_callback) {
215 get_syncable_service_callback_ = get_syncable_service_callback;
216}
217
218// The client will call this callback to produce the service.
219void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncServiceCallback(
maxbogue7e006db2016-10-03 19:48:28220 const base::Callback<syncer::SyncService*(void)>&
vabr9352dd92016-02-19 16:09:49221 get_sync_service_callback) {
222 get_sync_service_callback_ = get_sync_service_callback;
223}
224
225void ProfileSyncServiceBundle::SyncClientBuilder::SetHistoryService(
226 history::HistoryService* history_service) {
227 history_service_ = history_service;
228}
229
vabr0b75a3452016-02-23 10:14:55230void ProfileSyncServiceBundle::SyncClientBuilder::SetBookmarkModelCallback(
231 const base::Callback<bookmarks::BookmarkModel*(void)>&
232 get_bookmark_model_callback) {
233 get_bookmark_model_callback_ = get_bookmark_model_callback;
234}
235
maxbogue7e006db2016-10-03 19:48:28236std::unique_ptr<syncer::FakeSyncClient>
vabr0c775a12016-01-29 08:50:59237ProfileSyncServiceBundle::SyncClientBuilder::Build() {
Sky Malice08a04b72017-08-24 21:43:24238 return std::make_unique<BundleSyncClient>(
vabr0c775a12016-01-29 08:50:59239 bundle_->component_factory(), bundle_->pref_service(),
Mikel Astiz53131342018-07-19 08:59:58240 &bundle_->model_type_store_service_, bundle_->sync_sessions_client(),
241 personal_data_manager_, get_syncable_service_callback_,
242 get_sync_service_callback_, get_bookmark_model_callback_,
vabr9352dd92016-02-19 16:09:49243 activate_model_creation_ ? bundle_->db_thread() : nullptr,
Marc Treib8c479392018-07-11 20:19:01244 activate_model_creation_ ? base::SequencedTaskRunnerHandle::Get()
245 : nullptr,
ricea799a1fd2016-08-22 02:45:53246 history_service_);
vabr0c775a12016-01-29 08:50:59247}
248
249ProfileSyncServiceBundle::ProfileSyncServiceBundle()
Marc Treib8c479392018-07-11 20:19:01250 : db_thread_(base::SequencedTaskRunnerHandle::Get()),
vabr0c775a12016-01-29 08:50:59251 signin_client_(&pref_service_),
252#if defined(OS_CHROMEOS)
253 signin_manager_(&signin_client_, &account_tracker_),
254#else
255 signin_manager_(&signin_client_,
256 &auth_service_,
257 &account_tracker_,
258 nullptr),
259#endif
David Rogerbbc341f2018-08-17 22:13:48260 auth_service_(&pref_service_),
Colin Blundelle3f61fa2018-07-18 12:16:26261 gaia_cookie_manager_service_(&auth_service_,
262 "profile_sync_service_bundle",
263 &signin_client_),
264 identity_manager_(&signin_manager_,
265 &auth_service_,
266 &account_tracker_,
Maks Orlovichf7bc9bb342018-08-29 14:12:38267 &gaia_cookie_manager_service_) {
maxbogue0a379452016-09-22 21:35:05268 RegisterPrefsForProfileSyncService(pref_service_.registry());
vabr0c775a12016-01-29 08:50:59269 auth_service_.set_auto_post_fetch_response_on_message_loop(true);
Sylvain Defresne0526a042018-08-23 08:35:31270 account_tracker_.Initialize(&pref_service_, base::FilePath());
vabr0c775a12016-01-29 08:50:59271 signin_manager_.Initialize(&pref_service_);
Mikel Astizcfd7bc6a2018-06-13 13:18:31272 local_session_event_router_ = std::make_unique<DummyRouter>();
Tanja Gornak32e7d7f42018-08-31 10:33:26273 identity_provider_ = std::make_unique<invalidation::ProfileIdentityProvider>(
274 identity_manager());
Mikel Astizcfd7bc6a2018-06-13 13:18:31275 ON_CALL(sync_sessions_client_, GetLocalSessionEventRouter())
276 .WillByDefault(testing::Return(local_session_event_router_.get()));
vabr0c775a12016-01-29 08:50:59277}
278
vabr6b1e9712016-02-19 16:45:01279ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {}
280
281ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
maxbogue1a84b142016-03-15 01:58:16282 ProfileSyncService::StartBehavior start_behavior,
maxbogue7e006db2016-10-03 19:48:28283 std::unique_ptr<syncer::SyncClient> sync_client) {
vabr6b1e9712016-02-19 16:45:01284 ProfileSyncService::InitParams init_params;
285
286 init_params.start_behavior = start_behavior;
287 init_params.sync_client = std::move(sync_client);
chcunningham275f98ad2018-08-30 20:09:46288 init_params.identity_manager = identity_manager();
Marc Treib088dcb792018-03-29 18:33:17289 init_params.signin_scoped_device_id_callback =
290 base::BindRepeating([]() { return std::string(); });
Tanja Gornak32e7d7f42018-08-31 10:33:26291 init_params.invalidations_identity_provider = identity_provider_.get();
Peter Kasting341e1fb2018-02-24 00:03:01292 init_params.network_time_update_callback = base::DoNothing();
Mark Pilgrim215ccf92018-06-11 22:32:19293 init_params.url_loader_factory =
294 base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
295 &test_url_loader_factory_);
vabr6b1e9712016-02-19 16:45:01296 init_params.debug_identifier = "dummyDebugName";
297 init_params.channel = version_info::Channel::UNKNOWN;
vabr6b1e9712016-02-19 16:45:01298
299 return init_params;
300}
301
vabr9e9222f2016-01-21 10:18:03302} // namespace browser_sync