diff options
Diffstat (limited to 'chrome/browser/sync/test_profile_sync_service.cc')
-rw-r--r-- | chrome/browser/sync/test_profile_sync_service.cc | 193 |
1 files changed, 176 insertions, 17 deletions
diff --git a/chrome/browser/sync/test_profile_sync_service.cc b/chrome/browser/sync/test_profile_sync_service.cc index bab5d7d..9886dd1 100644 --- a/chrome/browser/sync/test_profile_sync_service.cc +++ b/chrome/browser/sync/test_profile_sync_service.cc @@ -5,22 +5,42 @@ #include "chrome/browser/sync/test_profile_sync_service.h" #include "chrome/browser/sync/abstract_profile_sync_service_test.h" +#include "chrome/browser/sync/engine/syncapi.h" +#include "chrome/browser/sync/glue/data_type_controller.h" +#include "chrome/browser/sync/glue/sync_backend_host.h" +#include "chrome/browser/sync/profile_sync_factory.h" +#include "chrome/browser/sync/sessions/session_state.h" +#include "chrome/browser/sync/syncable/directory_manager.h" +#include "chrome/browser/sync/syncable/syncable.h" +#include "chrome/test/sync/test_http_bridge_factory.h" + +using browser_sync::ModelSafeRoutingInfo; +using browser_sync::sessions::ErrorCounters; +using browser_sync::sessions::SyncerStatus; +using browser_sync::sessions::SyncSessionSnapshot; +using syncable::DirectoryManager; +using syncable::ModelType; +using syncable::ScopedDirLookup; +using sync_api::UserShare; + +ACTION_P(CallOnPaused, core) { + core->OnPaused(); +}; + +ACTION_P(CallOnResumed, core) { + core->OnResumed(); +} namespace browser_sync { SyncBackendHostForProfileSyncTest::SyncBackendHostForProfileSyncTest( - TestProfileSyncService* service, Profile* profile, - Task* initial_condition_setup_task, int num_expected_resumes, int num_expected_pauses, bool set_initial_sync_ended_on_init, bool synchronous_init) - : browser_sync::SyncBackendHost(service, profile), - initial_condition_setup_task_(initial_condition_setup_task), - set_initial_sync_ended_on_init_(set_initial_sync_ended_on_init), - synchronous_init_(synchronous_init), - test_service_(service) { + : browser_sync::SyncBackendHost(profile), + synchronous_init_(synchronous_init) { // By default, the RequestPause and RequestResume methods will // send the confirmation notification and return true. ON_CALL(*this, RequestPause()). @@ -40,20 +60,129 @@ SyncBackendHostForProfileSyncTest::SyncBackendHostForProfileSyncTest( RequestNudge()).Times(set_initial_sync_ended_on_init ? 0 : 1); } -void -SyncBackendHostForProfileSyncTest:: - HandleInitializationCompletedOnFrontendLoop() { - set_syncapi_initialized(); // Need to do this asap so task below works. +void SyncBackendHostForProfileSyncTest::ConfigureDataTypes( + const DataTypeController::TypeMap& data_type_controllers, + const syncable::ModelTypeSet& types, + CancelableTask* ready_task) { + SetAutofillMigrationState(syncable::MIGRATED); + SyncBackendHost::ConfigureDataTypes( + data_type_controllers, types, ready_task); +} + +void SyncBackendHostForProfileSyncTest:: + SimulateSyncCycleCompletedInitialSyncEnded() { + syncable::ModelTypeBitSet sync_ended; + ModelSafeRoutingInfo enabled_types; + GetModelSafeRoutingInfo(&enabled_types); + std::string download_progress_markers[syncable::MODEL_TYPE_COUNT]; + for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin(); + i != enabled_types.end(); ++i) { + sync_ended.set(i->first); + } + core_->HandleSyncCycleCompletedOnFrontendLoop(new SyncSessionSnapshot( + SyncerStatus(), ErrorCounters(), 0, false, + sync_ended, download_progress_markers, false, false, 0, 0, false)); +} + +sync_api::HttpPostProviderFactory* + SyncBackendHostForProfileSyncTest::MakeHttpBridgeFactory( + URLRequestContextGetter* getter) { + return new browser_sync::TestHttpBridgeFactory; +} + +void SyncBackendHostForProfileSyncTest::InitCore( + const Core::DoInitializeOptions& options) { + std::wstring user = L"testuser"; + core_loop()->PostTask( + FROM_HERE, + NewRunnableMethod(core_.get(), + &SyncBackendHost::Core::DoInitializeForTest, + user, + options.http_bridge_factory, + options.delete_sync_data_folder)); + + // TODO(akalin): Figure out a better way to do this. + if (synchronous_init_) { + // The SyncBackend posts a task to the current loop when + // initialization completes. + MessageLoop::current()->Run(); + } +} + +void SyncBackendHostForProfileSyncTest:: + SetDefaultExpectationsForWorkerCreation(ProfileMock* profile) { + EXPECT_CALL(*profile, GetPasswordStore(testing::_)). + WillOnce(testing::Return((PasswordStore*)NULL)); +} + +void SyncBackendHostForProfileSyncTest::SetHistoryServiceExpectations( + ProfileMock* profile) { + EXPECT_CALL(*profile, GetHistoryService(testing::_)). + WillOnce(testing::Return((HistoryService*)NULL)); +} + +} // namespace browser_sync + +browser_sync::TestIdFactory* TestProfileSyncService::id_factory() { + return &id_factory_; +} + +browser_sync::SyncBackendHostForProfileSyncTest* + TestProfileSyncService::GetBackendForTest() { + return static_cast<browser_sync::SyncBackendHostForProfileSyncTest*>( + ProfileSyncService::GetBackendForTest()); +} + +TestProfileSyncService::TestProfileSyncService( + ProfileSyncFactory* factory, + Profile* profile, + const std::string& test_user, + bool synchronous_backend_initialization, + Task* initial_condition_setup_task) + : ProfileSyncService(factory, profile, test_user), + synchronous_backend_initialization_( + synchronous_backend_initialization), + synchronous_sync_configuration_(false), + num_expected_resumes_(1), + num_expected_pauses_(1), + initial_condition_setup_task_(initial_condition_setup_task), + set_initial_sync_ended_on_init_(true) { + RegisterPreferences(); + SetSyncSetupCompleted(); +} + +TestProfileSyncService::~TestProfileSyncService() {} + +void TestProfileSyncService::SetInitialSyncEndedForEnabledTypes() { + UserShare* user_share = GetUserShare(); + DirectoryManager* dir_manager = user_share->dir_manager.get(); + + ScopedDirLookup dir(dir_manager, user_share->name); + if (!dir.good()) + FAIL(); + + ModelSafeRoutingInfo enabled_types; + backend_->GetModelSafeRoutingInfo(&enabled_types); + for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin(); + i != enabled_types.end(); ++i) { + dir->set_initial_sync_ended_for_type(i->first, true); + } +} + +void TestProfileSyncService::OnBackendInitialized() { + // Set this so below code can access GetUserShare(). + backend_initialized_ = true; // Set up any nodes the test wants around before model association. if (initial_condition_setup_task_) { initial_condition_setup_task_->Run(); + initial_condition_setup_task_ = NULL; } // Pretend we downloaded initial updates and set initial sync ended bits // if we were asked to. if (set_initial_sync_ended_on_init_) { - UserShare* user_share = core_->syncapi()->GetUserShare(); + UserShare* user_share = GetUserShare(); DirectoryManager* dir_manager = user_share->dir_manager.get(); ScopedDirLookup dir(dir_manager, user_share->name); @@ -62,22 +191,52 @@ SyncBackendHostForProfileSyncTest:: if (!dir->initial_sync_ended_for_type(syncable::NIGORI)) { ProfileSyncServiceTestHelper::CreateRoot( - syncable::NIGORI, test_service_, test_service_->id_factory()); + syncable::NIGORI, GetUserShare(), + id_factory()); } SetInitialSyncEndedForEnabledTypes(); } - SyncBackendHost::HandleInitializationCompletedOnFrontendLoop(); + ProfileSyncService::OnBackendInitialized(); + + // TODO(akalin): Figure out a better way to do this. + if (synchronous_backend_initialization_) { + MessageLoop::current()->Quit(); + } } -} // namespace browser_sync +void TestProfileSyncService::Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + ProfileSyncService::Observe(type, source, details); + if (type == NotificationType::SYNC_CONFIGURE_DONE && + !synchronous_sync_configuration_) { + MessageLoop::current()->Quit(); + } +} + +void TestProfileSyncService::set_num_expected_resumes(int times) { + num_expected_resumes_ = times; +} +void TestProfileSyncService::set_num_expected_pauses(int num) { + num_expected_pauses_ = num; +} +void TestProfileSyncService::dont_set_initial_sync_ended_on_init() { + set_initial_sync_ended_on_init_ = false; +} +void TestProfileSyncService::set_synchronous_sync_configuration() { + synchronous_sync_configuration_ = true; +} void TestProfileSyncService::CreateBackend() { backend_.reset(new browser_sync::SyncBackendHostForProfileSyncTest( - this, profile(), - initial_condition_setup_task_.release(), + profile(), num_expected_resumes_, num_expected_pauses_, set_initial_sync_ended_on_init_, synchronous_backend_initialization_)); } + +std::string TestProfileSyncService::GetLsidForAuthBootstraping() { + return "foo"; +} |