vabr | 9e9222f | 2016-01-21 10:18:03 | [diff] [blame] | 1 | // 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 | |
maxbogue | 26f4022 | 2016-09-16 20:22:18 | [diff] [blame] | 5 | #include "components/browser_sync/profile_sync_test_util.h" |
| 6 | |
| 7 | #include <utility> |
vabr | 9e9222f | 2016-01-21 10:18:03 | [diff] [blame] | 8 | |
dcheng | d4593e7 | 2016-04-22 21:43:28 | [diff] [blame] | 9 | #include "base/memory/ptr_util.h" |
vabr | 0b75a345 | 2016-02-23 10:14:55 | [diff] [blame] | 10 | #include "components/bookmarks/browser/bookmark_model.h" |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 11 | #include "components/history/core/browser/history_model_worker.h" |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 12 | #include "components/pref_registry/pref_registry_syncable.h" |
| 13 | #include "components/signin/core/browser/signin_manager_base.h" |
maxbogue | 2f960e5 | 2016-10-07 01:24:15 | [diff] [blame^] | 14 | #include "components/sync/base/sync_prefs.h" |
maxbogue | 455a57e3 | 2016-08-14 00:08:32 | [diff] [blame] | 15 | #include "components/sync/driver/glue/browser_thread_model_worker.h" |
| 16 | #include "components/sync/driver/glue/ui_model_worker.h" |
| 17 | #include "components/sync/driver/signin_manager_wrapper.h" |
Max Bogue | fef332d | 2016-07-28 22:09:09 | [diff] [blame] | 18 | #include "components/sync/engine/passive_model_worker.h" |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 19 | #include "net/url_request/url_request_test_util.h" |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 20 | |
vabr | 9e9222f | 2016-01-21 10:18:03 | [diff] [blame] | 21 | namespace browser_sync { |
| 22 | |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 23 | namespace { |
| 24 | |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 25 | class BundleSyncClient : public syncer::FakeSyncClient { |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 26 | public: |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 27 | BundleSyncClient(syncer::SyncApiComponentFactory* factory, |
maxbogue | 26f4022 | 2016-09-16 20:22:18 | [diff] [blame] | 28 | PrefService* pref_service, |
| 29 | sync_sessions::SyncSessionsClient* sync_sessions_client, |
| 30 | autofill::PersonalDataManager* personal_data_manager, |
| 31 | const base::Callback<base::WeakPtr<syncer::SyncableService>( |
| 32 | syncer::ModelType type)>& get_syncable_service_callback, |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 33 | const base::Callback<syncer::SyncService*(void)>& |
maxbogue | 26f4022 | 2016-09-16 20:22:18 | [diff] [blame] | 34 | get_sync_service_callback, |
| 35 | const base::Callback<bookmarks::BookmarkModel*(void)>& |
| 36 | get_bookmark_model_callback, |
| 37 | scoped_refptr<base::SingleThreadTaskRunner> db_thread, |
| 38 | scoped_refptr<base::SingleThreadTaskRunner> file_thread, |
| 39 | history::HistoryService* history_service); |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 40 | |
| 41 | ~BundleSyncClient() override; |
| 42 | |
| 43 | PrefService* GetPrefService() override; |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 44 | sync_sessions::SyncSessionsClient* GetSyncSessionsClient() override; |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 45 | autofill::PersonalDataManager* GetPersonalDataManager() override; |
| 46 | base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType( |
| 47 | syncer::ModelType type) override; |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 48 | syncer::SyncService* GetSyncService() override; |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 49 | scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup( |
| 50 | syncer::ModelSafeGroup group, |
| 51 | syncer::WorkerLoopDestructionObserver* observer) override; |
| 52 | history::HistoryService* GetHistoryService() override; |
vabr | 0b75a345 | 2016-02-23 10:14:55 | [diff] [blame] | 53 | bookmarks::BookmarkModel* GetBookmarkModel() override; |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 54 | |
| 55 | private: |
| 56 | PrefService* const pref_service_; |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 57 | sync_sessions::SyncSessionsClient* const sync_sessions_client_; |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 58 | autofill::PersonalDataManager* const personal_data_manager_; |
| 59 | const base::Callback<base::WeakPtr<syncer::SyncableService>( |
| 60 | syncer::ModelType type)> |
| 61 | get_syncable_service_callback_; |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 62 | const base::Callback<syncer::SyncService*(void)> get_sync_service_callback_; |
vabr | 0b75a345 | 2016-02-23 10:14:55 | [diff] [blame] | 63 | const base::Callback<bookmarks::BookmarkModel*(void)> |
| 64 | get_bookmark_model_callback_; |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 65 | // These task runners, if not null, are used in CreateModelWorkerForGroup. |
| 66 | const scoped_refptr<base::SingleThreadTaskRunner> db_thread_; |
| 67 | const scoped_refptr<base::SingleThreadTaskRunner> file_thread_; |
| 68 | history::HistoryService* history_service_; |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 69 | }; |
| 70 | |
| 71 | BundleSyncClient::BundleSyncClient( |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 72 | syncer::SyncApiComponentFactory* factory, |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 73 | PrefService* pref_service, |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 74 | sync_sessions::SyncSessionsClient* sync_sessions_client, |
| 75 | autofill::PersonalDataManager* personal_data_manager, |
| 76 | const base::Callback<base::WeakPtr<syncer::SyncableService>( |
| 77 | syncer::ModelType type)>& get_syncable_service_callback, |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 78 | const base::Callback<syncer::SyncService*(void)>& get_sync_service_callback, |
vabr | 0b75a345 | 2016-02-23 10:14:55 | [diff] [blame] | 79 | const base::Callback<bookmarks::BookmarkModel*(void)>& |
| 80 | get_bookmark_model_callback, |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 81 | scoped_refptr<base::SingleThreadTaskRunner> db_thread, |
| 82 | scoped_refptr<base::SingleThreadTaskRunner> file_thread, |
| 83 | history::HistoryService* history_service) |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 84 | : syncer::FakeSyncClient(factory), |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 85 | pref_service_(pref_service), |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 86 | sync_sessions_client_(sync_sessions_client), |
| 87 | personal_data_manager_(personal_data_manager), |
| 88 | get_syncable_service_callback_(get_syncable_service_callback), |
| 89 | get_sync_service_callback_(get_sync_service_callback), |
vabr | 0b75a345 | 2016-02-23 10:14:55 | [diff] [blame] | 90 | get_bookmark_model_callback_(get_bookmark_model_callback), |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 91 | db_thread_(db_thread), |
| 92 | file_thread_(file_thread), |
| 93 | history_service_(history_service) { |
| 94 | DCHECK_EQ(!!db_thread_, !!file_thread_); |
| 95 | } |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 96 | |
| 97 | BundleSyncClient::~BundleSyncClient() = default; |
| 98 | |
| 99 | PrefService* BundleSyncClient::GetPrefService() { |
| 100 | return pref_service_; |
| 101 | } |
| 102 | |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 103 | sync_sessions::SyncSessionsClient* BundleSyncClient::GetSyncSessionsClient() { |
| 104 | return sync_sessions_client_; |
| 105 | } |
| 106 | |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 107 | autofill::PersonalDataManager* BundleSyncClient::GetPersonalDataManager() { |
| 108 | return personal_data_manager_; |
| 109 | } |
| 110 | |
| 111 | base::WeakPtr<syncer::SyncableService> |
| 112 | BundleSyncClient::GetSyncableServiceForType(syncer::ModelType type) { |
| 113 | if (get_syncable_service_callback_.is_null()) |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 114 | return syncer::FakeSyncClient::GetSyncableServiceForType(type); |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 115 | return get_syncable_service_callback_.Run(type); |
| 116 | } |
| 117 | |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 118 | syncer::SyncService* BundleSyncClient::GetSyncService() { |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 119 | if (get_sync_service_callback_.is_null()) |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 120 | return syncer::FakeSyncClient::GetSyncService(); |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 121 | return get_sync_service_callback_.Run(); |
| 122 | } |
| 123 | |
| 124 | scoped_refptr<syncer::ModelSafeWorker> |
| 125 | BundleSyncClient::CreateModelWorkerForGroup( |
| 126 | syncer::ModelSafeGroup group, |
| 127 | syncer::WorkerLoopDestructionObserver* observer) { |
| 128 | if (!db_thread_) |
| 129 | return FakeSyncClient::CreateModelWorkerForGroup(group, observer); |
| 130 | DCHECK(file_thread_) << "DB thread was specified but FILE thread was not."; |
| 131 | switch (group) { |
| 132 | case syncer::GROUP_DB: |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 133 | return new syncer::BrowserThreadModelWorker(db_thread_, syncer::GROUP_DB, |
| 134 | observer); |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 135 | case syncer::GROUP_FILE: |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 136 | return new syncer::BrowserThreadModelWorker(file_thread_, |
| 137 | syncer::GROUP_FILE, observer); |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 138 | case syncer::GROUP_UI: |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 139 | return new syncer::UIModelWorker(base::ThreadTaskRunnerHandle::Get(), |
| 140 | observer); |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 141 | case syncer::GROUP_PASSIVE: |
| 142 | return new syncer::PassiveModelWorker(observer); |
| 143 | case syncer::GROUP_HISTORY: { |
| 144 | history::HistoryService* history_service = GetHistoryService(); |
| 145 | if (!history_service) |
| 146 | return nullptr; |
| 147 | return new HistoryModelWorker(history_service->AsWeakPtr(), |
| 148 | base::ThreadTaskRunnerHandle::Get(), |
| 149 | observer); |
| 150 | } |
| 151 | default: |
| 152 | return nullptr; |
| 153 | } |
| 154 | } |
| 155 | |
| 156 | history::HistoryService* BundleSyncClient::GetHistoryService() { |
| 157 | if (history_service_) |
| 158 | return history_service_; |
| 159 | return FakeSyncClient::GetHistoryService(); |
| 160 | } |
| 161 | |
vabr | 0b75a345 | 2016-02-23 10:14:55 | [diff] [blame] | 162 | bookmarks::BookmarkModel* BundleSyncClient::GetBookmarkModel() { |
| 163 | if (get_bookmark_model_callback_.is_null()) |
| 164 | return FakeSyncClient::GetBookmarkModel(); |
| 165 | return get_bookmark_model_callback_.Run(); |
| 166 | } |
| 167 | |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 168 | } // namespace |
| 169 | |
vabr | 9e9222f | 2016-01-21 10:18:03 | [diff] [blame] | 170 | void EmptyNetworkTimeUpdate(const base::Time&, |
| 171 | const base::TimeDelta&, |
| 172 | const base::TimeDelta&) {} |
| 173 | |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 174 | void RegisterPrefsForProfileSyncService( |
| 175 | user_prefs::PrefRegistrySyncable* registry) { |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 176 | syncer::SyncPrefs::RegisterProfilePrefs(registry); |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 177 | AccountTrackerService::RegisterPrefs(registry); |
| 178 | SigninManagerBase::RegisterProfilePrefs(registry); |
| 179 | SigninManagerBase::RegisterPrefs(registry); |
| 180 | } |
vabr | 9e9222f | 2016-01-21 10:18:03 | [diff] [blame] | 181 | |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 182 | ProfileSyncServiceBundle::SyncClientBuilder::~SyncClientBuilder() = default; |
| 183 | |
| 184 | ProfileSyncServiceBundle::SyncClientBuilder::SyncClientBuilder( |
| 185 | ProfileSyncServiceBundle* bundle) |
| 186 | : bundle_(bundle) {} |
| 187 | |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 188 | void 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. |
| 194 | void 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. |
| 201 | void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncServiceCallback( |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 202 | const base::Callback<syncer::SyncService*(void)>& |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 203 | get_sync_service_callback) { |
| 204 | get_sync_service_callback_ = get_sync_service_callback; |
| 205 | } |
| 206 | |
| 207 | void ProfileSyncServiceBundle::SyncClientBuilder::SetHistoryService( |
| 208 | history::HistoryService* history_service) { |
| 209 | history_service_ = history_service; |
| 210 | } |
| 211 | |
vabr | 0b75a345 | 2016-02-23 10:14:55 | [diff] [blame] | 212 | void 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 | |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 218 | std::unique_ptr<syncer::FakeSyncClient> |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 219 | ProfileSyncServiceBundle::SyncClientBuilder::Build() { |
ricea | 799a1fd | 2016-08-22 02:45:53 | [diff] [blame] | 220 | return base::MakeUnique<BundleSyncClient>( |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 221 | bundle_->component_factory(), bundle_->pref_service(), |
zea | 32a7684cf | 2016-02-24 20:41:48 | [diff] [blame] | 222 | bundle_->sync_sessions_client(), personal_data_manager_, |
| 223 | get_syncable_service_callback_, get_sync_service_callback_, |
| 224 | get_bookmark_model_callback_, |
vabr | 9352dd9 | 2016-02-19 16:09:49 | [diff] [blame] | 225 | activate_model_creation_ ? bundle_->db_thread() : nullptr, |
vabr | 6b1e971 | 2016-02-19 16:45:01 | [diff] [blame] | 226 | activate_model_creation_ ? base::ThreadTaskRunnerHandle::Get() : nullptr, |
ricea | 799a1fd | 2016-08-22 02:45:53 | [diff] [blame] | 227 | history_service_); |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 228 | } |
| 229 | |
| 230 | ProfileSyncServiceBundle::ProfileSyncServiceBundle() |
vabr | 6b1e971 | 2016-02-19 16:45:01 | [diff] [blame] | 231 | : db_thread_(base::ThreadTaskRunnerHandle::Get()), |
| 232 | worker_pool_owner_(2, "sync test worker pool"), |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 233 | 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())) { |
maxbogue | 0a37945 | 2016-09-22 21:35:05 | [diff] [blame] | 244 | RegisterPrefsForProfileSyncService(pref_service_.registry()); |
vabr | 0c775a1 | 2016-01-29 08:50:59 | [diff] [blame] | 245 | auth_service_.set_auto_post_fetch_response_on_message_loop(true); |
| 246 | account_tracker_.Initialize(&signin_client_); |
| 247 | signin_manager_.Initialize(&pref_service_); |
| 248 | } |
| 249 | |
vabr | 6b1e971 | 2016-02-19 16:45:01 | [diff] [blame] | 250 | ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {} |
| 251 | |
| 252 | ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams( |
maxbogue | 1a84b14 | 2016-03-15 01:58:16 | [diff] [blame] | 253 | ProfileSyncService::StartBehavior start_behavior, |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 254 | std::unique_ptr<syncer::SyncClient> sync_client) { |
vabr | 6b1e971 | 2016-02-19 16:45:01 | [diff] [blame] | 255 | ProfileSyncService::InitParams init_params; |
| 256 | |
| 257 | init_params.start_behavior = start_behavior; |
| 258 | init_params.sync_client = std::move(sync_client); |
| 259 | init_params.signin_wrapper = |
ricea | 799a1fd | 2016-08-22 02:45:53 | [diff] [blame] | 260 | base::MakeUnique<SigninManagerWrapper>(signin_manager()); |
vabr | 6b1e971 | 2016-02-19 16:45:01 | [diff] [blame] | 261 | init_params.oauth2_token_service = auth_service(); |
| 262 | init_params.network_time_update_callback = |
| 263 | base::Bind(&EmptyNetworkTimeUpdate); |
| 264 | init_params.base_directory = base::FilePath(FILE_PATH_LITERAL("dummyPath")); |
| 265 | init_params.url_request_context = url_request_context(); |
| 266 | init_params.debug_identifier = "dummyDebugName"; |
| 267 | init_params.channel = version_info::Channel::UNKNOWN; |
| 268 | init_params.db_thread = db_thread_; |
| 269 | init_params.file_thread = base::ThreadTaskRunnerHandle::Get(); |
| 270 | init_params.blocking_pool = worker_pool_owner_.pool().get(); |
| 271 | |
| 272 | return init_params; |
| 273 | } |
| 274 | |
vabr | 9e9222f | 2016-01-21 10:18:03 | [diff] [blame] | 275 | } // namespace browser_sync |