blob: 9e72b16f1f49be9c586ad1cbc495e32e6afac9ba [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"
fdorayea7a7ec2016-11-07 16:35:0816#include "components/history/core/browser/history_service.h"
Mikel Astiz900770b2018-10-02 17:32:5717#include "components/history/core/browser/sync/history_model_worker.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"
Mark Pilgrim215ccf92018-06-11 22:32:1925#include "services/network/public/cpp/shared_url_loader_factory.h"
26#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
Robbie McElrath206b0922018-09-19 17:34:5927#include "services/network/test/test_network_connection_tracker.h"
Mark Pilgrim215ccf92018-06-11 22:32:1928#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
maxbogue7e006db2016-10-03 19:48:2835class BundleSyncClient : public syncer::FakeSyncClient {
vabr0c775a12016-01-29 08:50:5936 public:
maxbogue7e006db2016-10-03 19:48:2837 BundleSyncClient(syncer::SyncApiComponentFactory* factory,
maxbogue26f40222016-09-16 20:22:1838 PrefService* pref_service,
Mikel Astiz53131342018-07-19 08:59:5839 syncer::ModelTypeStoreService* model_type_store_service,
maxbogue26f40222016-09-16 20:22:1840 autofill::PersonalDataManager* personal_data_manager,
41 const base::Callback<base::WeakPtr<syncer::SyncableService>(
42 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2843 const base::Callback<syncer::SyncService*(void)>&
maxbogue26f40222016-09-16 20:22:1844 get_sync_service_callback,
45 const base::Callback<bookmarks::BookmarkModel*(void)>&
46 get_bookmark_model_callback,
Marc Treib8c479392018-07-11 20:19:0147 scoped_refptr<base::SequencedTaskRunner> db_thread,
48 scoped_refptr<base::SequencedTaskRunner> file_thread,
maxbogue26f40222016-09-16 20:22:1849 history::HistoryService* history_service);
vabr0c775a12016-01-29 08:50:5950
51 ~BundleSyncClient() override;
52
53 PrefService* GetPrefService() override;
vabr9352dd92016-02-19 16:09:4954 autofill::PersonalDataManager* GetPersonalDataManager() override;
skyma56dd492017-04-06 19:20:2755 base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
56 syncer::ModelType type) override;
maxbogue7e006db2016-10-03 19:48:2857 syncer::SyncService* GetSyncService() override;
Mikel Astiz53131342018-07-19 08:59:5858 syncer::ModelTypeStoreService* GetModelTypeStoreService() override;
vabr9352dd92016-02-19 16:09:4959 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup(
fdorayea7a7ec2016-11-07 16:35:0860 syncer::ModelSafeGroup group) override;
vabr9352dd92016-02-19 16:09:4961 history::HistoryService* GetHistoryService() override;
vabr0b75a3452016-02-23 10:14:5562 bookmarks::BookmarkModel* GetBookmarkModel() override;
vabr0c775a12016-01-29 08:50:5963
64 private:
65 PrefService* const pref_service_;
Mikel Astiz53131342018-07-19 08:59:5866 syncer::ModelTypeStoreService* const model_type_store_service_;
vabr9352dd92016-02-19 16:09:4967 autofill::PersonalDataManager* const personal_data_manager_;
68 const base::Callback<base::WeakPtr<syncer::SyncableService>(
69 syncer::ModelType type)>
70 get_syncable_service_callback_;
maxbogue7e006db2016-10-03 19:48:2871 const base::Callback<syncer::SyncService*(void)> get_sync_service_callback_;
vabr0b75a3452016-02-23 10:14:5572 const base::Callback<bookmarks::BookmarkModel*(void)>
73 get_bookmark_model_callback_;
vabr9352dd92016-02-19 16:09:4974 // These task runners, if not null, are used in CreateModelWorkerForGroup.
Marc Treib8c479392018-07-11 20:19:0175 const scoped_refptr<base::SequencedTaskRunner> db_thread_;
76 const scoped_refptr<base::SequencedTaskRunner> file_thread_;
vabr9352dd92016-02-19 16:09:4977 history::HistoryService* history_service_;
vabr0c775a12016-01-29 08:50:5978};
79
80BundleSyncClient::BundleSyncClient(
maxbogue7e006db2016-10-03 19:48:2881 syncer::SyncApiComponentFactory* factory,
vabr0c775a12016-01-29 08:50:5982 PrefService* pref_service,
Mikel Astiz53131342018-07-19 08:59:5883 syncer::ModelTypeStoreService* model_type_store_service,
vabr9352dd92016-02-19 16:09:4984 autofill::PersonalDataManager* personal_data_manager,
85 const base::Callback<base::WeakPtr<syncer::SyncableService>(
86 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2887 const base::Callback<syncer::SyncService*(void)>& get_sync_service_callback,
vabr0b75a3452016-02-23 10:14:5588 const base::Callback<bookmarks::BookmarkModel*(void)>&
89 get_bookmark_model_callback,
Marc Treib8c479392018-07-11 20:19:0190 scoped_refptr<base::SequencedTaskRunner> db_thread,
91 scoped_refptr<base::SequencedTaskRunner> file_thread,
vabr9352dd92016-02-19 16:09:4992 history::HistoryService* history_service)
maxbogue7e006db2016-10-03 19:48:2893 : syncer::FakeSyncClient(factory),
vabr0c775a12016-01-29 08:50:5994 pref_service_(pref_service),
Mikel Astiz53131342018-07-19 08:59:5895 model_type_store_service_(model_type_store_service),
vabr9352dd92016-02-19 16:09:4996 personal_data_manager_(personal_data_manager),
97 get_syncable_service_callback_(get_syncable_service_callback),
98 get_sync_service_callback_(get_sync_service_callback),
vabr0b75a3452016-02-23 10:14:5599 get_bookmark_model_callback_(get_bookmark_model_callback),
vabr9352dd92016-02-19 16:09:49100 db_thread_(db_thread),
101 file_thread_(file_thread),
102 history_service_(history_service) {
Sky Malicea8b17072017-10-11 15:45:39103 EXPECT_EQ(!!db_thread_, !!file_thread_);
vabr9352dd92016-02-19 16:09:49104}
vabr0c775a12016-01-29 08:50:59105
106BundleSyncClient::~BundleSyncClient() = default;
107
108PrefService* BundleSyncClient::GetPrefService() {
109 return pref_service_;
110}
111
vabr9352dd92016-02-19 16:09:49112autofill::PersonalDataManager* BundleSyncClient::GetPersonalDataManager() {
113 return personal_data_manager_;
114}
115
skyma56dd492017-04-06 19:20:27116base::WeakPtr<syncer::SyncableService>
117BundleSyncClient::GetSyncableServiceForType(syncer::ModelType type) {
vabr9352dd92016-02-19 16:09:49118 if (get_syncable_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28119 return syncer::FakeSyncClient::GetSyncableServiceForType(type);
skyma56dd492017-04-06 19:20:27120 return get_syncable_service_callback_.Run(type);
vabr9352dd92016-02-19 16:09:49121}
122
maxbogue7e006db2016-10-03 19:48:28123syncer::SyncService* BundleSyncClient::GetSyncService() {
vabr9352dd92016-02-19 16:09:49124 if (get_sync_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28125 return syncer::FakeSyncClient::GetSyncService();
vabr9352dd92016-02-19 16:09:49126 return get_sync_service_callback_.Run();
127}
128
129scoped_refptr<syncer::ModelSafeWorker>
fdorayea7a7ec2016-11-07 16:35:08130BundleSyncClient::CreateModelWorkerForGroup(syncer::ModelSafeGroup group) {
vabr9352dd92016-02-19 16:09:49131 if (!db_thread_)
fdorayea7a7ec2016-11-07 16:35:08132 return FakeSyncClient::CreateModelWorkerForGroup(group);
Sky Malicea8b17072017-10-11 15:45:39133 EXPECT_TRUE(file_thread_)
134 << "DB thread was specified but FILE thread was not.";
vabr9352dd92016-02-19 16:09:49135 switch (group) {
136 case syncer::GROUP_DB:
stanisc5c6a2942017-06-19 20:56:54137 return new syncer::SequencedModelWorker(db_thread_, syncer::GROUP_DB);
vabr9352dd92016-02-19 16:09:49138 case syncer::GROUP_FILE:
stanisc5c6a2942017-06-19 20:56:54139 return new syncer::SequencedModelWorker(file_thread_, syncer::GROUP_FILE);
vabr9352dd92016-02-19 16:09:49140 case syncer::GROUP_UI:
fdorayea7a7ec2016-11-07 16:35:08141 return new syncer::UIModelWorker(base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49142 case syncer::GROUP_PASSIVE:
fdorayea7a7ec2016-11-07 16:35:08143 return new syncer::PassiveModelWorker();
vabr9352dd92016-02-19 16:09:49144 case syncer::GROUP_HISTORY: {
145 history::HistoryService* history_service = GetHistoryService();
146 if (!history_service)
147 return nullptr;
148 return new HistoryModelWorker(history_service->AsWeakPtr(),
fdorayea7a7ec2016-11-07 16:35:08149 base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49150 }
151 default:
152 return nullptr;
153 }
154}
155
Mikel Astiz53131342018-07-19 08:59:58156syncer::ModelTypeStoreService* BundleSyncClient::GetModelTypeStoreService() {
157 return model_type_store_service_;
158}
159
vabr9352dd92016-02-19 16:09:49160history::HistoryService* BundleSyncClient::GetHistoryService() {
161 if (history_service_)
162 return history_service_;
163 return FakeSyncClient::GetHistoryService();
164}
165
vabr0b75a3452016-02-23 10:14:55166bookmarks::BookmarkModel* BundleSyncClient::GetBookmarkModel() {
167 if (get_bookmark_model_callback_.is_null())
168 return FakeSyncClient::GetBookmarkModel();
169 return get_bookmark_model_callback_.Run();
170}
171
vabr0c775a12016-01-29 08:50:59172} // namespace
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);
Mihai Sardarescu0db54412018-10-08 14:59:19178 ProfileOAuth2TokenService::RegisterProfilePrefs(registry);
vabr0c775a12016-01-29 08:50:59179 SigninManagerBase::RegisterProfilePrefs(registry);
180 SigninManagerBase::RegisterPrefs(registry);
181}
vabr9e9222f2016-01-21 10:18:03182
vabr0c775a12016-01-29 08:50:59183ProfileSyncServiceBundle::SyncClientBuilder::~SyncClientBuilder() = default;
184
185ProfileSyncServiceBundle::SyncClientBuilder::SyncClientBuilder(
186 ProfileSyncServiceBundle* bundle)
187 : bundle_(bundle) {}
188
vabr9352dd92016-02-19 16:09:49189void ProfileSyncServiceBundle::SyncClientBuilder::SetPersonalDataManager(
190 autofill::PersonalDataManager* personal_data_manager) {
191 personal_data_manager_ = personal_data_manager;
192}
193
194// The client will call this callback to produce the service.
195void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncableServiceCallback(
Mark Pilgrim306445e2018-07-11 13:38:54196 const base::RepeatingCallback<base::WeakPtr<syncer::SyncableService>(
vabr9352dd92016-02-19 16:09:49197 syncer::ModelType type)>& get_syncable_service_callback) {
198 get_syncable_service_callback_ = get_syncable_service_callback;
199}
200
201// The client will call this callback to produce the service.
202void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncServiceCallback(
maxbogue7e006db2016-10-03 19:48:28203 const base::Callback<syncer::SyncService*(void)>&
vabr9352dd92016-02-19 16:09:49204 get_sync_service_callback) {
205 get_sync_service_callback_ = get_sync_service_callback;
206}
207
208void ProfileSyncServiceBundle::SyncClientBuilder::SetHistoryService(
209 history::HistoryService* history_service) {
210 history_service_ = history_service;
211}
212
vabr0b75a3452016-02-23 10:14:55213void ProfileSyncServiceBundle::SyncClientBuilder::SetBookmarkModelCallback(
214 const base::Callback<bookmarks::BookmarkModel*(void)>&
215 get_bookmark_model_callback) {
216 get_bookmark_model_callback_ = get_bookmark_model_callback;
217}
218
maxbogue7e006db2016-10-03 19:48:28219std::unique_ptr<syncer::FakeSyncClient>
vabr0c775a12016-01-29 08:50:59220ProfileSyncServiceBundle::SyncClientBuilder::Build() {
Sky Malice08a04b72017-08-24 21:43:24221 return std::make_unique<BundleSyncClient>(
vabr0c775a12016-01-29 08:50:59222 bundle_->component_factory(), bundle_->pref_service(),
Mikel Astiz0889b2be2018-09-25 16:20:41223 &bundle_->model_type_store_service_, personal_data_manager_,
224 get_syncable_service_callback_, get_sync_service_callback_,
225 get_bookmark_model_callback_,
vabr9352dd92016-02-19 16:09:49226 activate_model_creation_ ? bundle_->db_thread() : nullptr,
Marc Treib8c479392018-07-11 20:19:01227 activate_model_creation_ ? base::SequencedTaskRunnerHandle::Get()
228 : nullptr,
ricea799a1fd2016-08-22 02:45:53229 history_service_);
vabr0c775a12016-01-29 08:50:59230}
231
232ProfileSyncServiceBundle::ProfileSyncServiceBundle()
Marc Treib8c479392018-07-11 20:19:01233 : db_thread_(base::SequencedTaskRunnerHandle::Get()),
vabr0c775a12016-01-29 08:50:59234 signin_client_(&pref_service_),
235#if defined(OS_CHROMEOS)
236 signin_manager_(&signin_client_, &account_tracker_),
237#else
238 signin_manager_(&signin_client_,
239 &auth_service_,
240 &account_tracker_,
241 nullptr),
242#endif
David Rogerbbc341f2018-08-17 22:13:48243 auth_service_(&pref_service_),
Colin Blundelle3f61fa2018-07-18 12:16:26244 gaia_cookie_manager_service_(&auth_service_,
245 "profile_sync_service_bundle",
246 &signin_client_),
247 identity_manager_(&signin_manager_,
248 &auth_service_,
249 &account_tracker_,
Maks Orlovichf7bc9bb342018-08-29 14:12:38250 &gaia_cookie_manager_service_) {
maxbogue0a379452016-09-22 21:35:05251 RegisterPrefsForProfileSyncService(pref_service_.registry());
vabr0c775a12016-01-29 08:50:59252 auth_service_.set_auto_post_fetch_response_on_message_loop(true);
Sylvain Defresne0526a042018-08-23 08:35:31253 account_tracker_.Initialize(&pref_service_, base::FilePath());
vabr0c775a12016-01-29 08:50:59254 signin_manager_.Initialize(&pref_service_);
Tanja Gornak32e7d7f42018-08-31 10:33:26255 identity_provider_ = std::make_unique<invalidation::ProfileIdentityProvider>(
256 identity_manager());
vabr0c775a12016-01-29 08:50:59257}
258
vabr6b1e9712016-02-19 16:45:01259ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {}
260
261ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
maxbogue1a84b142016-03-15 01:58:16262 ProfileSyncService::StartBehavior start_behavior,
maxbogue7e006db2016-10-03 19:48:28263 std::unique_ptr<syncer::SyncClient> sync_client) {
vabr6b1e9712016-02-19 16:45:01264 ProfileSyncService::InitParams init_params;
265
266 init_params.start_behavior = start_behavior;
267 init_params.sync_client = std::move(sync_client);
chcunningham275f98ad2018-08-30 20:09:46268 init_params.identity_manager = identity_manager();
Marc Treib088dcb792018-03-29 18:33:17269 init_params.signin_scoped_device_id_callback =
270 base::BindRepeating([]() { return std::string(); });
Tanja Gornak32e7d7f42018-08-31 10:33:26271 init_params.invalidations_identity_provider = identity_provider_.get();
Peter Kasting341e1fb2018-02-24 00:03:01272 init_params.network_time_update_callback = base::DoNothing();
Mark Pilgrim215ccf92018-06-11 22:32:19273 init_params.url_loader_factory =
274 base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
275 &test_url_loader_factory_);
Robbie McElrath206b0922018-09-19 17:34:59276 init_params.network_connection_tracker =
277 network::TestNetworkConnectionTracker::GetInstance();
vabr6b1e9712016-02-19 16:45:01278 init_params.debug_identifier = "dummyDebugName";
279 init_params.channel = version_info::Channel::UNKNOWN;
vabr6b1e9712016-02-19 16:45:01280
281 return init_params;
282}
283
vabr9e9222f2016-01-21 10:18:03284} // namespace browser_sync