blob: 956573725ce0b2e00d7ffe11699a960a4d9c9057 [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
David Roger793d1ce2017-11-28 14:42:329#include "base/bind.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"
David Roger30341432017-10-26 13:56:5916#include "components/signin/core/browser/profile_management_switches.h"
vabr0c775a12016-01-29 08:50:5917#include "components/signin/core/browser/signin_manager_base.h"
maxbogue2f960e52016-10-07 01:24:1518#include "components/sync/base/sync_prefs.h"
maxbogue455a57e32016-08-14 00:08:3219#include "components/sync/driver/signin_manager_wrapper.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"
vabr0c775a12016-01-29 08:50:5924#include "net/url_request/url_request_test_util.h"
25
vabr9e9222f2016-01-21 10:18:0326namespace browser_sync {
27
vabr0c775a12016-01-29 08:50:5928namespace {
29
maxbogue7e006db2016-10-03 19:48:2830class BundleSyncClient : public syncer::FakeSyncClient {
vabr0c775a12016-01-29 08:50:5931 public:
maxbogue7e006db2016-10-03 19:48:2832 BundleSyncClient(syncer::SyncApiComponentFactory* factory,
maxbogue26f40222016-09-16 20:22:1833 PrefService* pref_service,
34 sync_sessions::SyncSessionsClient* sync_sessions_client,
35 autofill::PersonalDataManager* personal_data_manager,
36 const base::Callback<base::WeakPtr<syncer::SyncableService>(
37 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2838 const base::Callback<syncer::SyncService*(void)>&
maxbogue26f40222016-09-16 20:22:1839 get_sync_service_callback,
40 const base::Callback<bookmarks::BookmarkModel*(void)>&
41 get_bookmark_model_callback,
42 scoped_refptr<base::SingleThreadTaskRunner> db_thread,
43 scoped_refptr<base::SingleThreadTaskRunner> file_thread,
44 history::HistoryService* history_service);
vabr0c775a12016-01-29 08:50:5945
46 ~BundleSyncClient() override;
47
48 PrefService* GetPrefService() override;
vabr0c775a12016-01-29 08:50:5949 sync_sessions::SyncSessionsClient* GetSyncSessionsClient() override;
vabr9352dd92016-02-19 16:09:4950 autofill::PersonalDataManager* GetPersonalDataManager() override;
skyma56dd492017-04-06 19:20:2751 base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
52 syncer::ModelType type) override;
maxbogue7e006db2016-10-03 19:48:2853 syncer::SyncService* GetSyncService() override;
vabr9352dd92016-02-19 16:09:4954 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup(
fdorayea7a7ec2016-11-07 16:35:0855 syncer::ModelSafeGroup group) override;
vabr9352dd92016-02-19 16:09:4956 history::HistoryService* GetHistoryService() override;
vabr0b75a3452016-02-23 10:14:5557 bookmarks::BookmarkModel* GetBookmarkModel() override;
vabr0c775a12016-01-29 08:50:5958
59 private:
60 PrefService* const pref_service_;
vabr0c775a12016-01-29 08:50:5961 sync_sessions::SyncSessionsClient* const sync_sessions_client_;
vabr9352dd92016-02-19 16:09:4962 autofill::PersonalDataManager* const personal_data_manager_;
63 const base::Callback<base::WeakPtr<syncer::SyncableService>(
64 syncer::ModelType type)>
65 get_syncable_service_callback_;
maxbogue7e006db2016-10-03 19:48:2866 const base::Callback<syncer::SyncService*(void)> get_sync_service_callback_;
vabr0b75a3452016-02-23 10:14:5567 const base::Callback<bookmarks::BookmarkModel*(void)>
68 get_bookmark_model_callback_;
vabr9352dd92016-02-19 16:09:4969 // These task runners, if not null, are used in CreateModelWorkerForGroup.
70 const scoped_refptr<base::SingleThreadTaskRunner> db_thread_;
71 const scoped_refptr<base::SingleThreadTaskRunner> file_thread_;
72 history::HistoryService* history_service_;
vabr0c775a12016-01-29 08:50:5973};
74
75BundleSyncClient::BundleSyncClient(
maxbogue7e006db2016-10-03 19:48:2876 syncer::SyncApiComponentFactory* factory,
vabr0c775a12016-01-29 08:50:5977 PrefService* pref_service,
vabr9352dd92016-02-19 16:09:4978 sync_sessions::SyncSessionsClient* sync_sessions_client,
79 autofill::PersonalDataManager* personal_data_manager,
80 const base::Callback<base::WeakPtr<syncer::SyncableService>(
81 syncer::ModelType type)>& get_syncable_service_callback,
maxbogue7e006db2016-10-03 19:48:2882 const base::Callback<syncer::SyncService*(void)>& get_sync_service_callback,
vabr0b75a3452016-02-23 10:14:5583 const base::Callback<bookmarks::BookmarkModel*(void)>&
84 get_bookmark_model_callback,
vabr9352dd92016-02-19 16:09:4985 scoped_refptr<base::SingleThreadTaskRunner> db_thread,
86 scoped_refptr<base::SingleThreadTaskRunner> file_thread,
87 history::HistoryService* history_service)
maxbogue7e006db2016-10-03 19:48:2888 : syncer::FakeSyncClient(factory),
vabr0c775a12016-01-29 08:50:5989 pref_service_(pref_service),
vabr9352dd92016-02-19 16:09:4990 sync_sessions_client_(sync_sessions_client),
91 personal_data_manager_(personal_data_manager),
92 get_syncable_service_callback_(get_syncable_service_callback),
93 get_sync_service_callback_(get_sync_service_callback),
vabr0b75a3452016-02-23 10:14:5594 get_bookmark_model_callback_(get_bookmark_model_callback),
vabr9352dd92016-02-19 16:09:4995 db_thread_(db_thread),
96 file_thread_(file_thread),
97 history_service_(history_service) {
Sky Malicea8b17072017-10-11 15:45:3998 EXPECT_EQ(!!db_thread_, !!file_thread_);
vabr9352dd92016-02-19 16:09:4999}
vabr0c775a12016-01-29 08:50:59100
101BundleSyncClient::~BundleSyncClient() = default;
102
103PrefService* BundleSyncClient::GetPrefService() {
104 return pref_service_;
105}
106
vabr0c775a12016-01-29 08:50:59107sync_sessions::SyncSessionsClient* BundleSyncClient::GetSyncSessionsClient() {
108 return sync_sessions_client_;
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
155history::HistoryService* BundleSyncClient::GetHistoryService() {
156 if (history_service_)
157 return history_service_;
158 return FakeSyncClient::GetHistoryService();
159}
160
vabr0b75a3452016-02-23 10:14:55161bookmarks::BookmarkModel* BundleSyncClient::GetBookmarkModel() {
162 if (get_bookmark_model_callback_.is_null())
163 return FakeSyncClient::GetBookmarkModel();
164 return get_bookmark_model_callback_.Run();
165}
166
vabr0c775a12016-01-29 08:50:59167} // namespace
168
vabr9e9222f2016-01-21 10:18:03169void EmptyNetworkTimeUpdate(const base::Time&,
170 const base::TimeDelta&,
171 const base::TimeDelta&) {}
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);
177 SigninManagerBase::RegisterProfilePrefs(registry);
178 SigninManagerBase::RegisterPrefs(registry);
David Roger30341432017-10-26 13:56:59179 signin::RegisterAccountConsistencyProfilePrefs(registry);
vabr0c775a12016-01-29 08:50:59180}
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(
195 const base::Callback<base::WeakPtr<syncer::SyncableService>(
196 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(),
zea32a7684cf2016-02-24 20:41:48222 bundle_->sync_sessions_client(), 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,
vabr6b1e9712016-02-19 16:45:01226 activate_model_creation_ ? base::ThreadTaskRunnerHandle::Get() : nullptr,
ricea799a1fd2016-08-22 02:45:53227 history_service_);
vabr0c775a12016-01-29 08:50:59228}
229
230ProfileSyncServiceBundle::ProfileSyncServiceBundle()
vabr6b1e9712016-02-19 16:45:01231 : db_thread_(base::ThreadTaskRunnerHandle::Get()),
232 worker_pool_owner_(2, "sync test worker pool"),
vabr0c775a12016-01-29 08:50:59233 signin_client_(&pref_service_),
234#if defined(OS_CHROMEOS)
235 signin_manager_(&signin_client_, &account_tracker_),
236#else
237 signin_manager_(&signin_client_,
238 &auth_service_,
239 &account_tracker_,
240 nullptr),
241#endif
242 url_request_context_(new net::TestURLRequestContextGetter(
243 base::ThreadTaskRunnerHandle::Get())) {
maxbogue0a379452016-09-22 21:35:05244 RegisterPrefsForProfileSyncService(pref_service_.registry());
David Roger793d1ce2017-11-28 14:42:32245 signin::SetGaiaOriginIsolatedCallback(base::Bind([] { return true; }));
vabr0c775a12016-01-29 08:50:59246 auth_service_.set_auto_post_fetch_response_on_message_loop(true);
247 account_tracker_.Initialize(&signin_client_);
248 signin_manager_.Initialize(&pref_service_);
249}
250
vabr6b1e9712016-02-19 16:45:01251ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {}
252
253ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
maxbogue1a84b142016-03-15 01:58:16254 ProfileSyncService::StartBehavior start_behavior,
maxbogue7e006db2016-10-03 19:48:28255 std::unique_ptr<syncer::SyncClient> sync_client) {
vabr6b1e9712016-02-19 16:45:01256 ProfileSyncService::InitParams init_params;
257
258 init_params.start_behavior = start_behavior;
259 init_params.sync_client = std::move(sync_client);
260 init_params.signin_wrapper =
Sky Malice08a04b72017-08-24 21:43:24261 std::make_unique<SigninManagerWrapper>(signin_manager());
vabr6b1e9712016-02-19 16:45:01262 init_params.oauth2_token_service = auth_service();
263 init_params.network_time_update_callback =
264 base::Bind(&EmptyNetworkTimeUpdate);
Sky Malicea8b17072017-10-11 15:45:39265 EXPECT_TRUE(base_directory_.CreateUniqueTempDir());
Pavel Yatsukb8825972017-08-01 21:24:57266 init_params.base_directory = base_directory_.GetPath();
vabr6b1e9712016-02-19 16:45:01267 init_params.url_request_context = url_request_context();
268 init_params.debug_identifier = "dummyDebugName";
269 init_params.channel = version_info::Channel::UNKNOWN;
Patrick Noland46bdc282017-10-31 18:21:56270 init_params.model_type_store_factory =
271 syncer::ModelTypeStoreTestUtil::FactoryForInMemoryStoreForTest();
vabr6b1e9712016-02-19 16:45:01272
273 return init_params;
274}
275
vabr9e9222f2016-01-21 10:18:03276} // namespace browser_sync