| Index: components/browser_sync/browser/profile_sync_test_util.cc
|
| diff --git a/components/browser_sync/browser/profile_sync_test_util.cc b/components/browser_sync/browser/profile_sync_test_util.cc
|
| index c8c02d5299e93b04bdbbf78ef878cbbc80f18c41..fd6d916f5202082d8da15cc31a351d418a6102e3 100644
|
| --- a/components/browser_sync/browser/profile_sync_test_util.cc
|
| +++ b/components/browser_sync/browser/profile_sync_test_util.cc
|
| @@ -4,11 +4,15 @@
|
|
|
| #include "components/browser_sync/browser/profile_sync_test_util.h"
|
|
|
| +#include "components/history/core/browser/history_model_worker.h"
|
| #include "components/pref_registry/pref_registry_syncable.h"
|
| #include "components/signin/core/browser/signin_manager_base.h"
|
| +#include "components/sync_driver/glue/browser_thread_model_worker.h"
|
| +#include "components/sync_driver/glue/ui_model_worker.h"
|
| #include "components/sync_driver/signin_manager_wrapper.h"
|
| #include "components/sync_driver/sync_prefs.h"
|
| #include "net/url_request/url_request_test_util.h"
|
| +#include "sync/internal_api/public/engine/passive_model_worker.h"
|
|
|
| using sync_driver::ClearBrowsingDataCallback;
|
|
|
| @@ -18,32 +22,75 @@ namespace {
|
|
|
| class BundleSyncClient : public sync_driver::FakeSyncClient {
|
| public:
|
| - BundleSyncClient(sync_driver::SyncApiComponentFactory* factory,
|
| - PrefService* pref_service,
|
| - ClearBrowsingDataCallback clear_browsing_data_callback,
|
| - sync_sessions::SyncSessionsClient* sync_sessions_client);
|
| + BundleSyncClient(
|
| + sync_driver::SyncApiComponentFactory* factory,
|
| + PrefService* pref_service,
|
| + const ClearBrowsingDataCallback& clear_browsing_data_callback,
|
| + sync_sessions::SyncSessionsClient* sync_sessions_client,
|
| + autofill::PersonalDataManager* personal_data_manager,
|
| + const base::Callback<base::WeakPtr<syncer::SyncableService>(
|
| + syncer::ModelType type)>& get_syncable_service_callback,
|
| + const base::Callback<sync_driver::SyncService*(void)>&
|
| + get_sync_service_callback,
|
| + scoped_refptr<base::SingleThreadTaskRunner> db_thread,
|
| + scoped_refptr<base::SingleThreadTaskRunner> file_thread,
|
| + history::HistoryService* history_service);
|
|
|
| ~BundleSyncClient() override;
|
|
|
| PrefService* GetPrefService() override;
|
| ClearBrowsingDataCallback GetClearBrowsingDataCallback() override;
|
| sync_sessions::SyncSessionsClient* GetSyncSessionsClient() override;
|
| + autofill::PersonalDataManager* GetPersonalDataManager() override;
|
| + base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
|
| + syncer::ModelType type) override;
|
| + sync_driver::SyncService* GetSyncService() override;
|
| + scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup(
|
| + syncer::ModelSafeGroup group,
|
| + syncer::WorkerLoopDestructionObserver* observer) override;
|
| + history::HistoryService* GetHistoryService() override;
|
|
|
| private:
|
| PrefService* const pref_service_;
|
| const ClearBrowsingDataCallback clear_browsing_data_callback_;
|
| sync_sessions::SyncSessionsClient* const sync_sessions_client_;
|
| + autofill::PersonalDataManager* const personal_data_manager_;
|
| + const base::Callback<base::WeakPtr<syncer::SyncableService>(
|
| + syncer::ModelType type)>
|
| + get_syncable_service_callback_;
|
| + const base::Callback<sync_driver::SyncService*(void)>
|
| + get_sync_service_callback_;
|
| + // These task runners, if not null, are used in CreateModelWorkerForGroup.
|
| + const scoped_refptr<base::SingleThreadTaskRunner> db_thread_;
|
| + const scoped_refptr<base::SingleThreadTaskRunner> file_thread_;
|
| + history::HistoryService* history_service_;
|
| };
|
|
|
| BundleSyncClient::BundleSyncClient(
|
| sync_driver::SyncApiComponentFactory* factory,
|
| PrefService* pref_service,
|
| - ClearBrowsingDataCallback clear_browsing_data_callback,
|
| - sync_sessions::SyncSessionsClient* sync_sessions_client)
|
| + const ClearBrowsingDataCallback& clear_browsing_data_callback,
|
| + sync_sessions::SyncSessionsClient* sync_sessions_client,
|
| + autofill::PersonalDataManager* personal_data_manager,
|
| + const base::Callback<base::WeakPtr<syncer::SyncableService>(
|
| + syncer::ModelType type)>& get_syncable_service_callback,
|
| + const base::Callback<sync_driver::SyncService*(void)>&
|
| + get_sync_service_callback,
|
| + scoped_refptr<base::SingleThreadTaskRunner> db_thread,
|
| + scoped_refptr<base::SingleThreadTaskRunner> file_thread,
|
| + history::HistoryService* history_service)
|
| : sync_driver::FakeSyncClient(factory),
|
| pref_service_(pref_service),
|
| clear_browsing_data_callback_(clear_browsing_data_callback),
|
| - sync_sessions_client_(sync_sessions_client) {}
|
| + sync_sessions_client_(sync_sessions_client),
|
| + personal_data_manager_(personal_data_manager),
|
| + get_syncable_service_callback_(get_syncable_service_callback),
|
| + get_sync_service_callback_(get_sync_service_callback),
|
| + db_thread_(db_thread),
|
| + file_thread_(file_thread),
|
| + history_service_(history_service) {
|
| + DCHECK_EQ(!!db_thread_, !!file_thread_);
|
| +}
|
|
|
| BundleSyncClient::~BundleSyncClient() = default;
|
|
|
| @@ -59,6 +106,60 @@ sync_sessions::SyncSessionsClient* BundleSyncClient::GetSyncSessionsClient() {
|
| return sync_sessions_client_;
|
| }
|
|
|
| +autofill::PersonalDataManager* BundleSyncClient::GetPersonalDataManager() {
|
| + return personal_data_manager_;
|
| +}
|
| +
|
| +base::WeakPtr<syncer::SyncableService>
|
| +BundleSyncClient::GetSyncableServiceForType(syncer::ModelType type) {
|
| + if (get_syncable_service_callback_.is_null())
|
| + return sync_driver::FakeSyncClient::GetSyncableServiceForType(type);
|
| + return get_syncable_service_callback_.Run(type);
|
| +}
|
| +
|
| +sync_driver::SyncService* BundleSyncClient::GetSyncService() {
|
| + if (get_sync_service_callback_.is_null())
|
| + return sync_driver::FakeSyncClient::GetSyncService();
|
| + return get_sync_service_callback_.Run();
|
| +}
|
| +
|
| +scoped_refptr<syncer::ModelSafeWorker>
|
| +BundleSyncClient::CreateModelWorkerForGroup(
|
| + syncer::ModelSafeGroup group,
|
| + syncer::WorkerLoopDestructionObserver* observer) {
|
| + if (!db_thread_)
|
| + return FakeSyncClient::CreateModelWorkerForGroup(group, observer);
|
| + DCHECK(file_thread_) << "DB thread was specified but FILE thread was not.";
|
| + switch (group) {
|
| + case syncer::GROUP_DB:
|
| + return new BrowserThreadModelWorker(db_thread_, syncer::GROUP_DB,
|
| + observer);
|
| + case syncer::GROUP_FILE:
|
| + return new BrowserThreadModelWorker(file_thread_, syncer::GROUP_FILE,
|
| + observer);
|
| + case syncer::GROUP_UI:
|
| + return new UIModelWorker(base::ThreadTaskRunnerHandle::Get(), observer);
|
| + case syncer::GROUP_PASSIVE:
|
| + return new syncer::PassiveModelWorker(observer);
|
| + case syncer::GROUP_HISTORY: {
|
| + history::HistoryService* history_service = GetHistoryService();
|
| + if (!history_service)
|
| + return nullptr;
|
| + return new HistoryModelWorker(history_service->AsWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get(),
|
| + observer);
|
| + }
|
| + default:
|
| + return nullptr;
|
| + }
|
| +}
|
| +
|
| +history::HistoryService* BundleSyncClient::GetHistoryService() {
|
| + if (history_service_)
|
| + return history_service_;
|
| + return FakeSyncClient::GetHistoryService();
|
| +}
|
| +
|
| } // namespace
|
|
|
| void EmptyNetworkTimeUpdate(const base::Time&,
|
| @@ -84,37 +185,75 @@ void ProfileSyncServiceBundle::SyncClientBuilder::SetClearBrowsingDataCallback(
|
| clear_browsing_data_callback_ = clear_browsing_data_callback;
|
| }
|
|
|
| +void ProfileSyncServiceBundle::SyncClientBuilder::SetPersonalDataManager(
|
| + autofill::PersonalDataManager* personal_data_manager) {
|
| + personal_data_manager_ = personal_data_manager;
|
| +}
|
| +
|
| +// The client will call this callback to produce the service.
|
| +void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncableServiceCallback(
|
| + const base::Callback<base::WeakPtr<syncer::SyncableService>(
|
| + syncer::ModelType type)>& get_syncable_service_callback) {
|
| + get_syncable_service_callback_ = get_syncable_service_callback;
|
| +}
|
| +
|
| +// The client will call this callback to produce the service.
|
| +void ProfileSyncServiceBundle::SyncClientBuilder::SetSyncServiceCallback(
|
| + const base::Callback<sync_driver::SyncService*(void)>&
|
| + get_sync_service_callback) {
|
| + get_sync_service_callback_ = get_sync_service_callback;
|
| +}
|
| +
|
| +void ProfileSyncServiceBundle::SyncClientBuilder::SetHistoryService(
|
| + history::HistoryService* history_service) {
|
| + history_service_ = history_service;
|
| +}
|
| +
|
| scoped_ptr<sync_driver::FakeSyncClient>
|
| ProfileSyncServiceBundle::SyncClientBuilder::Build() {
|
| return make_scoped_ptr(new BundleSyncClient(
|
| bundle_->component_factory(), bundle_->pref_service(),
|
| - clear_browsing_data_callback_, bundle_->sync_sessions_client()));
|
| + clear_browsing_data_callback_, bundle_->sync_sessions_client(),
|
| + personal_data_manager_, get_syncable_service_callback_,
|
| + get_sync_service_callback_,
|
| + activate_model_creation_ ? bundle_->db_thread() : nullptr,
|
| + activate_model_creation_ ? bundle_->file_thread() : nullptr,
|
| + history_service_));
|
| }
|
|
|
| +struct ProfileSyncServiceBundle::ThreadProvider {
|
| + public:
|
| + ThreadProvider() : worker_pool_owner_(2, "sync test worker pool") {
|
| + DCHECK(base::MessageLoop::current())
|
| + << "The test including the bundle also needs to include a MessageLoop";
|
| + }
|
| + ~ThreadProvider() = default;
|
| +
|
| + base::SequencedWorkerPoolOwner worker_pool_owner_;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(ThreadProvider);
|
| +};
|
| +
|
| ProfileSyncServiceBundle::ProfileSyncServiceBundle()
|
| - : worker_pool_owner_(2, "sync test worker pool"),
|
| - signin_client_(&pref_service_),
|
| -#if defined(OS_CHROMEOS)
|
| - signin_manager_(&signin_client_, &account_tracker_),
|
| -#else
|
| - signin_manager_(&signin_client_,
|
| - &auth_service_,
|
| - &account_tracker_,
|
| - nullptr),
|
| -#endif
|
| - url_request_context_(new net::TestURLRequestContextGetter(
|
| - base::ThreadTaskRunnerHandle::Get())) {
|
| - browser_sync::RegisterPrefsForProfileSyncService(pref_service_.registry());
|
| - auth_service_.set_auto_post_fetch_response_on_message_loop(true);
|
| - account_tracker_.Initialize(&signin_client_);
|
| - signin_manager_.Initialize(&pref_service_);
|
| -}
|
| + : ProfileSyncServiceBundle(make_scoped_ptr(new ThreadProvider),
|
| + nullptr,
|
| + nullptr,
|
| + nullptr) {}
|
| +
|
| +ProfileSyncServiceBundle::ProfileSyncServiceBundle(
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& db_thread,
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& file_thread,
|
| + base::SequencedWorkerPool* worker_pool)
|
| + : ProfileSyncServiceBundle(nullptr, db_thread, file_thread, worker_pool) {}
|
|
|
| ProfileSyncServiceBundle::~ProfileSyncServiceBundle() {}
|
|
|
| ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
|
| browser_sync::ProfileSyncServiceStartBehavior start_behavior,
|
| scoped_ptr<sync_driver::SyncClient> sync_client) {
|
| + DCHECK(worker_pool_);
|
| +
|
| ProfileSyncService::InitParams init_params;
|
|
|
| init_params.start_behavior = start_behavior;
|
| @@ -128,11 +267,41 @@ ProfileSyncService::InitParams ProfileSyncServiceBundle::CreateBasicInitParams(
|
| init_params.url_request_context = url_request_context();
|
| init_params.debug_identifier = "dummyDebugName";
|
| init_params.channel = version_info::Channel::UNKNOWN;
|
| - init_params.db_thread = base::ThreadTaskRunnerHandle::Get();
|
| - init_params.file_thread = base::ThreadTaskRunnerHandle::Get();
|
| - init_params.blocking_pool = worker_pool_owner_.pool().get();
|
| + init_params.db_thread = db_thread_;
|
| + init_params.file_thread = file_thread_;
|
| + init_params.blocking_pool = worker_pool_;
|
|
|
| return init_params;
|
| }
|
|
|
| +ProfileSyncServiceBundle::ProfileSyncServiceBundle(
|
| + scoped_ptr<ThreadProvider> thread_provider,
|
| + scoped_refptr<base::SingleThreadTaskRunner> db_thread,
|
| + scoped_refptr<base::SingleThreadTaskRunner> file_thread,
|
| + base::SequencedWorkerPool* worker_pool)
|
| + : thread_provider_(std::move(thread_provider)),
|
| + db_thread_(thread_provider_ ? base::ThreadTaskRunnerHandle::Get()
|
| + : db_thread),
|
| + file_thread_(thread_provider_ ? base::ThreadTaskRunnerHandle::Get()
|
| + : file_thread),
|
| + worker_pool_(thread_provider_
|
| + ? thread_provider_->worker_pool_owner_.pool().get()
|
| + : worker_pool),
|
| + signin_client_(&pref_service_),
|
| +#if defined(OS_CHROMEOS)
|
| + signin_manager_(&signin_client_, &account_tracker_),
|
| +#else
|
| + signin_manager_(&signin_client_,
|
| + &auth_service_,
|
| + &account_tracker_,
|
| + nullptr),
|
| +#endif
|
| + url_request_context_(new net::TestURLRequestContextGetter(
|
| + base::ThreadTaskRunnerHandle::Get())) {
|
| + browser_sync::RegisterPrefsForProfileSyncService(pref_service_.registry());
|
| + auth_service_.set_auto_post_fetch_response_on_message_loop(true);
|
| + account_tracker_.Initialize(&signin_client_);
|
| + signin_manager_.Initialize(&pref_service_);
|
| +}
|
| +
|
| } // namespace browser_sync
|
|
|