blob: 830afb0deb64279a4238ba2eb26b9da1a0c6385b [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"
maxbogue2f960e52016-10-07 01:24:1519#include "components/sync/base/sync_prefs.h"
Max Boguefef332d2016-07-28 22:09:0920#include "components/sync/engine/passive_model_worker.h"
stanisc5c6a2942017-06-19 20:56:5421#include "components/sync/engine/sequenced_model_worker.h"
maxbogue288c69172016-11-18 05:27:3222#include "components/sync/engine/ui_model_worker.h"
Patrick Noland46bdc282017-10-31 18:21:5623#include "components/sync/model/model_type_store_test_util.h"
Mark Pilgrim215ccf92018-06-11 22:32:1924#include "services/network/public/cpp/shared_url_loader_factory.h"
25#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
Robbie McElrath206b0922018-09-19 17:34:5926#include "services/network/test/test_network_connection_tracker.h"
Mark Pilgrim215ccf92018-06-11 22:32:1927#include "services/network/test/test_url_loader_factory.h"
Mikel Astizcfd7bc6a2018-06-13 13:18:3128#include "testing/gmock/include/gmock/gmock.h"
vabr0c775a12016-01-29 08:50:5929
vabr9e9222f2016-01-21 10:18:0330namespace browser_sync {
31
vabr0c775a12016-01-29 08:50:5932namespace {
33
maxbogue7e006db2016-10-03 19:48:2834class BundleSyncClient : public syncer::FakeSyncClient {
vabr0c775a12016-01-29 08:50:5935 public:
maxbogue7e006db2016-10-03 19:48:2836 BundleSyncClient(syncer::SyncApiComponentFactory* factory,
maxbogue26f40222016-09-16 20:22:1837 PrefService* pref_service,
Mikel Astiz53131342018-07-19 08:59:5838 syncer::ModelTypeStoreService* model_type_store_service,
maxbogue26f40222016-09-16 20:22:1839 autofill::PersonalDataManager* personal_data_manager,
40 const base::Callback<base::WeakPtr<syncer::SyncableService>(
41 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2842 const base::Callback<syncer::SyncService*(void)>&
maxbogue26f40222016-09-16 20:22:1843 get_sync_service_callback,
44 const base::Callback<bookmarks::BookmarkModel*(void)>&
45 get_bookmark_model_callback,
Marc Treib8c479392018-07-11 20:19:0146 scoped_refptr<base::SequencedTaskRunner> db_thread,
47 scoped_refptr<base::SequencedTaskRunner> file_thread,
maxbogue26f40222016-09-16 20:22:1848 history::HistoryService* history_service);
vabr0c775a12016-01-29 08:50:5949
50 ~BundleSyncClient() override;
51
52 PrefService* GetPrefService() override;
vabr9352dd92016-02-19 16:09:4953 autofill::PersonalDataManager* GetPersonalDataManager() override;
skyma56dd492017-04-06 19:20:2754 base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
55 syncer::ModelType type) override;
maxbogue7e006db2016-10-03 19:48:2856 syncer::SyncService* GetSyncService() override;
Mikel Astiz53131342018-07-19 08:59:5857 syncer::ModelTypeStoreService* GetModelTypeStoreService() override;
vabr9352dd92016-02-19 16:09:4958 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup(
fdorayea7a7ec2016-11-07 16:35:0859 syncer::ModelSafeGroup group) override;
vabr9352dd92016-02-19 16:09:4960 history::HistoryService* GetHistoryService() override;
vabr0b75a3452016-02-23 10:14:5561 bookmarks::BookmarkModel* GetBookmarkModel() override;
vabr0c775a12016-01-29 08:50:5962
63 private:
64 PrefService* const pref_service_;
Mikel Astiz53131342018-07-19 08:59:5865 syncer::ModelTypeStoreService* const model_type_store_service_;
vabr9352dd92016-02-19 16:09:4966 autofill::PersonalDataManager* const personal_data_manager_;
67 const base::Callback<base::WeakPtr<syncer::SyncableService>(
68 syncer::ModelType type)>
69 get_syncable_service_callback_;
maxbogue7e006db2016-10-03 19:48:2870 const base::Callback<syncer::SyncService*(void)> get_sync_service_callback_;
vabr0b75a3452016-02-23 10:14:5571 const base::Callback<bookmarks::BookmarkModel*(void)>
72 get_bookmark_model_callback_;
vabr9352dd92016-02-19 16:09:4973 // These task runners, if not null, are used in CreateModelWorkerForGroup.
Marc Treib8c479392018-07-11 20:19:0174 const scoped_refptr<base::SequencedTaskRunner> db_thread_;
75 const scoped_refptr<base::SequencedTaskRunner> file_thread_;
vabr9352dd92016-02-19 16:09:4976 history::HistoryService* history_service_;
vabr0c775a12016-01-29 08:50:5977};
78
79BundleSyncClient::BundleSyncClient(
maxbogue7e006db2016-10-03 19:48:2880 syncer::SyncApiComponentFactory* factory,
vabr0c775a12016-01-29 08:50:5981 PrefService* pref_service,
Mikel Astiz53131342018-07-19 08:59:5882 syncer::ModelTypeStoreService* model_type_store_service,
vabr9352dd92016-02-19 16:09:4983 autofill::PersonalDataManager* personal_data_manager,
84 const base::Callback<base::WeakPtr<syncer::SyncableService>(
85 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2886 const base::Callback<syncer::SyncService*(void)>& get_sync_service_callback,
vabr0b75a3452016-02-23 10:14:5587 const base::Callback<bookmarks::BookmarkModel*(void)>&
88 get_bookmark_model_callback,
Marc Treib8c479392018-07-11 20:19:0189 scoped_refptr<base::SequencedTaskRunner> db_thread,
90 scoped_refptr<base::SequencedTaskRunner> file_thread,
vabr9352dd92016-02-19 16:09:4991 history::HistoryService* history_service)
maxbogue7e006db2016-10-03 19:48:2892 : syncer::FakeSyncClient(factory),
vabr0c775a12016-01-29 08:50:5993 pref_service_(pref_service),
Mikel Astiz53131342018-07-19 08:59:5894 model_type_store_service_(model_type_store_service),
vabr9352dd92016-02-19 16:09:4995 personal_data_manager_(personal_data_manager),
96 get_syncable_service_callback_(get_syncable_service_callback),
97 get_sync_service_callback_(get_sync_service_callback),
vabr0b75a3452016-02-23 10:14:5598 get_bookmark_model_callback_(get_bookmark_model_callback),
vabr9352dd92016-02-19 16:09:4999 db_thread_(db_thread),
100 file_thread_(file_thread),
101 history_service_(history_service) {
Sky Malicea8b17072017-10-11 15:45:39102 EXPECT_EQ(!!db_thread_, !!file_thread_);
vabr9352dd92016-02-19 16:09:49103}
vabr0c775a12016-01-29 08:50:59104
105BundleSyncClient::~BundleSyncClient() = default;
106
107PrefService* BundleSyncClient::GetPrefService() {
108 return pref_service_;
109}
110
vabr9352dd92016-02-19 16:09:49111autofill::PersonalDataManager* BundleSyncClient::GetPersonalDataManager() {
112 return personal_data_manager_;
113}
114
skyma56dd492017-04-06 19:20:27115base::WeakPtr<syncer::SyncableService>
116BundleSyncClient::GetSyncableServiceForType(syncer::ModelType type) {
vabr9352dd92016-02-19 16:09:49117 if (get_syncable_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28118 return syncer::FakeSyncClient::GetSyncableServiceForType(type);
skyma56dd492017-04-06 19:20:27119 return get_syncable_service_callback_.Run(type);
vabr9352dd92016-02-19 16:09:49120}
121
maxbogue7e006db2016-10-03 19:48:28122syncer::SyncService* BundleSyncClient::GetSyncService() {
vabr9352dd92016-02-19 16:09:49123 if (get_sync_service_callback_.is_null())
maxbogue7e006db2016-10-03 19:48:28124 return syncer::FakeSyncClient::GetSyncService();
vabr9352dd92016-02-19 16:09:49125 return get_sync_service_callback_.Run();
126}
127
128scoped_refptr<syncer::ModelSafeWorker>
fdorayea7a7ec2016-11-07 16:35:08129BundleSyncClient::CreateModelWorkerForGroup(syncer::ModelSafeGroup group) {
vabr9352dd92016-02-19 16:09:49130 if (!db_thread_)
fdorayea7a7ec2016-11-07 16:35:08131 return FakeSyncClient::CreateModelWorkerForGroup(group);
Sky Malicea8b17072017-10-11 15:45:39132 EXPECT_TRUE(file_thread_)
133 << "DB thread was specified but FILE thread was not.";
vabr9352dd92016-02-19 16:09:49134 switch (group) {
135 case syncer::GROUP_DB:
stanisc5c6a2942017-06-19 20:56:54136 return new syncer::SequencedModelWorker(db_thread_, syncer::GROUP_DB);
vabr9352dd92016-02-19 16:09:49137 case syncer::GROUP_FILE:
stanisc5c6a2942017-06-19 20:56:54138 return new syncer::SequencedModelWorker(file_thread_, syncer::GROUP_FILE);
vabr9352dd92016-02-19 16:09:49139 case syncer::GROUP_UI:
fdorayea7a7ec2016-11-07 16:35:08140 return new syncer::UIModelWorker(base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49141 case syncer::GROUP_PASSIVE:
fdorayea7a7ec2016-11-07 16:35:08142 return new syncer::PassiveModelWorker();
vabr9352dd92016-02-19 16:09:49143 case syncer::GROUP_HISTORY: {
144 history::HistoryService* history_service = GetHistoryService();
145 if (!history_service)
146 return nullptr;
147 return new HistoryModelWorker(history_service->AsWeakPtr(),
fdorayea7a7ec2016-11-07 16:35:08148 base::ThreadTaskRunnerHandle::Get());
vabr9352dd92016-02-19 16:09:49149 }
150 default:
151 return nullptr;
152 }
153}
154
Mikel Astiz53131342018-07-19 08:59:58155syncer::ModelTypeStoreService* BundleSyncClient::GetModelTypeStoreService() {
156 return model_type_store_service_;
157}
158
vabr9352dd92016-02-19 16:09:49159history::HistoryService* BundleSyncClient::GetHistoryService() {
160 if (history_service_)
161 return history_service_;
162 return FakeSyncClient::GetHistoryService();
163}
164
vabr0b75a3452016-02-23 10:14:55165bookmarks::BookmarkModel* BundleSyncClient::GetBookmarkModel() {
166 if (get_bookmark_model_callback_.is_null())
167 return FakeSyncClient::GetBookmarkModel();
168 return get_bookmark_model_callback_.Run();
169}
170
vabr0c775a12016-01-29 08:50:59171} // namespace
172
vabr0c775a12016-01-29 08:50:59173void RegisterPrefsForProfileSyncService(
174 user_prefs::PrefRegistrySyncable* registry) {
maxbogue7e006db2016-10-03 19:48:28175 syncer::SyncPrefs::RegisterProfilePrefs(registry);
vabr0c775a12016-01-29 08:50:59176 AccountTrackerService::RegisterPrefs(registry);
Mihai Sardarescu0db54412018-10-08 14:59:19177 ProfileOAuth2TokenService::RegisterProfilePrefs(registry);
vabr0c775a12016-01-29 08:50:59178 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(
Mark Pilgrim306445e2018-07-11 13:38:54195 const base::RepeatingCallback<base::WeakPtr<syncer::SyncableService>(
vabr9352dd92016-02-19 16:09:49196 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() {
Sky Malice08a04b72017-08-24 21:43:24220 return std::make_unique<BundleSyncClient>(
vabr0c775a12016-01-29 08:50:59221 bundle_->component_factory(), bundle_->pref_service(),
Mikel Astiz0889b2be2018-09-25 16:20:41222 &bundle_->model_type_store_service_, 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,
Marc Treib8c479392018-07-11 20:19:01226 activate_model_creation_ ? base::SequencedTaskRunnerHandle::Get()
227 : nullptr,
ricea799a1fd2016-08-22 02:45:53228 history_service_);
vabr0c775a12016-01-29 08:50:59229}
230
231ProfileSyncServiceBundle::ProfileSyncServiceBundle()
Marc Treib8c479392018-07-11 20:19:01232 : db_thread_(base::SequencedTaskRunnerHandle::Get()),
Mario Sanchez Pradac893a342018-11-15 18:05:29233 identity_test_env_(true) {
maxbogue0a379452016-09-22 21:35:05234 RegisterPrefsForProfileSyncService(pref_service_.registry());
Mario Sanchez Pradac893a342018-11-15 18:05:29235 identity_test_env_.SetAutomaticIssueOfAccessTokens(true);
Tanja Gornak32e7d7f42018-08-31 10:33:26236 identity_provider_ = std::make_unique<invalidation::ProfileIdentityProvider>(
237 identity_manager());
vabr0c775a12016-01-29 08:50:59238}
239
vabr6b1e9712016-02-19 16:45:01240ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {}
241
242ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
maxbogue1a84b142016-03-15 01:58:16243 ProfileSyncService::StartBehavior start_behavior,
maxbogue7e006db2016-10-03 19:48:28244 std::unique_ptr<syncer::SyncClient> sync_client) {
vabr6b1e9712016-02-19 16:45:01245 ProfileSyncService::InitParams init_params;
246
247 init_params.start_behavior = start_behavior;
248 init_params.sync_client = std::move(sync_client);
chcunningham275f98ad2018-08-30 20:09:46249 init_params.identity_manager = identity_manager();
Marc Treib088dcb792018-03-29 18:33:17250 init_params.signin_scoped_device_id_callback =
251 base::BindRepeating([]() { return std::string(); });
Tanja Gornake0e4c2b2018-10-27 11:11:03252 init_params.invalidations_identity_providers.push_back(
253 identity_provider_.get());
Peter Kasting341e1fb2018-02-24 00:03:01254 init_params.network_time_update_callback = base::DoNothing();
Mark Pilgrim215ccf92018-06-11 22:32:19255 init_params.url_loader_factory =
256 base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
257 &test_url_loader_factory_);
Robbie McElrath206b0922018-09-19 17:34:59258 init_params.network_connection_tracker =
259 network::TestNetworkConnectionTracker::GetInstance();
vabr6b1e9712016-02-19 16:45:01260 init_params.debug_identifier = "dummyDebugName";
261 init_params.channel = version_info::Channel::UNKNOWN;
vabr6b1e9712016-02-19 16:45:01262
263 return init_params;
264}
265
vabr9e9222f2016-01-21 10:18:03266} // namespace browser_sync