summaryrefslogtreecommitdiffstats
path: root/components/browser_sync/browser/profile_sync_test_util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'components/browser_sync/browser/profile_sync_test_util.cc')
-rw-r--r--components/browser_sync/browser/profile_sync_test_util.cc225
1 files changed, 197 insertions, 28 deletions
diff --git a/components/browser_sync/browser/profile_sync_test_util.cc b/components/browser_sync/browser/profile_sync_test_util.cc
index c8c02d5..fd6d916 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