summaryrefslogtreecommitdiffstats
path: root/components/browser_sync/browser
diff options
context:
space:
mode:
Diffstat (limited to 'components/browser_sync/browser')
-rw-r--r--components/browser_sync/browser/BUILD.gn3
-rw-r--r--components/browser_sync/browser/profile_sync_test_util.cc225
-rw-r--r--components/browser_sync/browser/profile_sync_test_util.h71
3 files changed, 268 insertions, 31 deletions
diff --git a/components/browser_sync/browser/BUILD.gn b/components/browser_sync/browser/BUILD.gn
index 683b1fc..d77b676 100644
--- a/components/browser_sync/browser/BUILD.gn
+++ b/components/browser_sync/browser/BUILD.gn
@@ -95,6 +95,9 @@ source_set("test_support") {
":browser",
"//base",
"//base/test:test_support",
+ "//components/history/core/browser:browser",
+ "//components/invalidation/impl",
+ "//components/invalidation/impl:test_support",
"//components/pref_registry",
"//components/signin/core/browser:browser",
"//components/signin/core/browser:test_support",
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
diff --git a/components/browser_sync/browser/profile_sync_test_util.h b/components/browser_sync/browser/profile_sync_test_util.h
index b6bf4e7..485e7dd 100644
--- a/components/browser_sync/browser/profile_sync_test_util.h
+++ b/components/browser_sync/browser/profile_sync_test_util.h
@@ -5,12 +5,15 @@
#ifndef COMPONENTS_BROWSER_SYNC_BROWSER_PROFILE_SYNC_TEST_UTIL_H_
#define COMPONENTS_BROWSER_SYNC_BROWSER_PROFILE_SYNC_TEST_UTIL_H_
+#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
#include "base/test/sequenced_worker_pool_owner.h"
#include "base/time/time.h"
#include "components/browser_sync/browser/profile_sync_service.h"
+#include "components/invalidation/impl/fake_invalidation_service.h"
#include "components/signin/core/browser/account_tracker_service.h"
#include "components/signin/core/browser/fake_profile_oauth2_token_service.h"
#include "components/signin/core/browser/fake_signin_manager.h"
@@ -25,6 +28,10 @@ class Time;
class TimeDelta;
}
+namespace history {
+class HistoryService;
+}
+
namespace net {
class URLRequestContextGetter;
}
@@ -46,7 +53,8 @@ void RegisterPrefsForProfileSyncService(
user_prefs::PrefRegistrySyncable* registry);
// Aggregate this class to get all necessary support for creating a
-// ProfileSyncService in tests.
+// ProfileSyncService in tests. The test still needs to have its own
+// MessageLoop, though.
class ProfileSyncServiceBundle {
public:
#if defined(OS_CHROMEOS)
@@ -55,7 +63,15 @@ class ProfileSyncServiceBundle {
typedef FakeSigninManager FakeSigninManagerType;
#endif
+ // Use this if you don't care about threads.
ProfileSyncServiceBundle();
+
+ // Use this to inject threads directly.
+ ProfileSyncServiceBundle(
+ const scoped_refptr<base::SingleThreadTaskRunner>& db_thread,
+ const scoped_refptr<base::SingleThreadTaskRunner>& file_thread,
+ base::SequencedWorkerPool* worker_pool);
+
~ProfileSyncServiceBundle();
// Builders
@@ -70,10 +86,28 @@ class ProfileSyncServiceBundle {
~SyncClientBuilder();
- // Set the clear browsing data callback for the client to return.
+ // Setters for the various additional data for the client to return.
void SetClearBrowsingDataCallback(
sync_driver::ClearBrowsingDataCallback clear_browsing_data_callback);
+ void SetPersonalDataManager(
+ autofill::PersonalDataManager* personal_data_manager);
+
+ // The client will call this callback to produce the SyncableService
+ // specific to |type|.
+ void SetSyncableServiceCallback(
+ const base::Callback<base::WeakPtr<syncer::SyncableService>(
+ syncer::ModelType type)>& get_syncable_service_callback);
+
+ // The client will call this callback to produce the SyncService for the
+ // current Profile.
+ void SetSyncServiceCallback(const base::Callback<sync_driver::SyncService*(
+ void)>& get_sync_service_callback);
+
+ void SetHistoryService(history::HistoryService* history_service);
+
+ void set_activate_model_creation() { activate_model_creation_ = true; }
+
scoped_ptr<sync_driver::FakeSyncClient> Build();
private:
@@ -81,6 +115,15 @@ class ProfileSyncServiceBundle {
ProfileSyncServiceBundle* const bundle_;
sync_driver::ClearBrowsingDataCallback clear_browsing_data_callback_;
+ autofill::PersonalDataManager* personal_data_manager_;
+ base::Callback<base::WeakPtr<syncer::SyncableService>(
+ syncer::ModelType type)>
+ get_syncable_service_callback_;
+ base::Callback<sync_driver::SyncService*(void)> get_sync_service_callback_;
+ history::HistoryService* history_service_ = nullptr;
+ // If set, the built client will be able to build some ModelSafeWorker
+ // instances.
+ bool activate_model_creation_ = false;
DISALLOW_COPY_AND_ASSIGN(SyncClientBuilder);
};
@@ -116,8 +159,29 @@ class ProfileSyncServiceBundle {
return &sync_sessions_client_;
}
+ invalidation::FakeInvalidationService* fake_invalidation_service() {
+ return &fake_invalidation_service_;
+ }
+
+ base::SingleThreadTaskRunner* db_thread() { return db_thread_.get(); }
+
+ base::SingleThreadTaskRunner* file_thread() { return file_thread_.get(); }
+
private:
- base::SequencedWorkerPoolOwner worker_pool_owner_;
+ struct ThreadProvider; // Helper to create threads and worker pool.
+
+ // Either |thread_provider| must be null and or the other arguments non-null,
+ // or vice versa.
+ ProfileSyncServiceBundle(
+ scoped_ptr<ThreadProvider> thread_provider,
+ scoped_refptr<base::SingleThreadTaskRunner> db_thread,
+ scoped_refptr<base::SingleThreadTaskRunner> file_thread,
+ base::SequencedWorkerPool* worker_pool);
+
+ scoped_ptr<ThreadProvider> thread_provider_;
+ const scoped_refptr<base::SingleThreadTaskRunner> db_thread_;
+ const scoped_refptr<base::SingleThreadTaskRunner> file_thread_;
+ base::SequencedWorkerPool* const worker_pool_;
syncable_prefs::TestingPrefServiceSyncable pref_service_;
TestSigninClient signin_client_;
AccountTrackerService account_tracker_;
@@ -125,6 +189,7 @@ class ProfileSyncServiceBundle {
FakeProfileOAuth2TokenService auth_service_;
SyncApiComponentFactoryMock component_factory_;
sync_sessions::FakeSyncSessionsClient sync_sessions_client_;
+ invalidation::FakeInvalidationService fake_invalidation_service_;
scoped_refptr<net::URLRequestContextGetter> url_request_context_;
DISALLOW_COPY_AND_ASSIGN(ProfileSyncServiceBundle);