| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/files/file_util.h" | 5 #include "base/files/file_util.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chrome/browser/prefs/pref_service_syncable.h" | 9 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 10 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" | 10 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 static_cast<ProfileSyncService*>(pss); | 52 static_cast<ProfileSyncService*>(pss); |
| 53 service->OnConfigureStart(); | 53 service->OnConfigureStart(); |
| 54 } | 54 } |
| 55 | 55 |
| 56 ACTION_P3(InvokeOnConfigureDone, pss, error_callback, result) { | 56 ACTION_P3(InvokeOnConfigureDone, pss, error_callback, result) { |
| 57 ProfileSyncService* service = | 57 ProfileSyncService* service = |
| 58 static_cast<ProfileSyncService*>(pss); | 58 static_cast<ProfileSyncService*>(pss); |
| 59 DataTypeManager::ConfigureResult configure_result = | 59 DataTypeManager::ConfigureResult configure_result = |
| 60 static_cast<DataTypeManager::ConfigureResult>(result); | 60 static_cast<DataTypeManager::ConfigureResult>(result); |
| 61 if (result.status == sync_driver::DataTypeManager::ABORTED) | 61 if (result.status == sync_driver::DataTypeManager::ABORTED) |
| 62 error_callback.Run(); | 62 error_callback.Run(&configure_result); |
| 63 service->OnConfigureDone(configure_result); | 63 service->OnConfigureDone(configure_result); |
| 64 } | 64 } |
| 65 | 65 |
| 66 class TestProfileSyncServiceNoBackup : public ProfileSyncService { | 66 class TestProfileSyncServiceNoBackup : public ProfileSyncService { |
| 67 public: | 67 public: |
| 68 TestProfileSyncServiceNoBackup( | 68 TestProfileSyncServiceNoBackup( |
| 69 scoped_ptr<ProfileSyncComponentsFactory> factory, | 69 scoped_ptr<ProfileSyncComponentsFactory> factory, |
| 70 Profile* profile, | 70 Profile* profile, |
| 71 scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper, | 71 scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper, |
| 72 ProfileOAuth2TokenService* oauth2_token_service, | 72 ProfileOAuth2TokenService* oauth2_token_service, |
| 73 browser_sync::ProfileSyncServiceStartBehavior start_behavior) | 73 browser_sync::ProfileSyncServiceStartBehavior start_behavior) |
| 74 : ProfileSyncService(factory.Pass(), profile, signin_wrapper.Pass(), | 74 : ProfileSyncService(factory.Pass(), profile, signin_wrapper.Pass(), |
| 75 oauth2_token_service, start_behavior) {} | 75 oauth2_token_service, start_behavior) {} |
| 76 | 76 |
| 77 protected: | 77 protected: |
| 78 virtual bool NeedBackup() const OVERRIDE { | 78 virtual bool NeedBackup() const OVERRIDE { |
| 79 return false; | 79 return false; |
| 80 } | 80 } |
| 81 }; | 81 }; |
| 82 | 82 |
| 83 class ProfileSyncServiceStartupTest : public testing::Test { | 83 class ProfileSyncServiceStartupTest : public testing::Test { |
| 84 public: | 84 public: |
| 85 ProfileSyncServiceStartupTest() | 85 ProfileSyncServiceStartupTest() |
| 86 : thread_bundle_(content::TestBrowserThreadBundle::REAL_DB_THREAD | | 86 : thread_bundle_(content::TestBrowserThreadBundle::REAL_DB_THREAD | |
| 87 content::TestBrowserThreadBundle::REAL_FILE_THREAD | | 87 content::TestBrowserThreadBundle::REAL_FILE_THREAD | |
| 88 content::TestBrowserThreadBundle::REAL_IO_THREAD), | 88 content::TestBrowserThreadBundle::REAL_IO_THREAD), |
| 89 profile_manager_(TestingBrowserProcess::GetGlobal()), | 89 profile_manager_(TestingBrowserProcess::GetGlobal()), |
| 90 sync_(NULL), | 90 sync_(NULL) {} |
| 91 data_type_status_table_(NULL) {} | |
| 92 | 91 |
| 93 virtual ~ProfileSyncServiceStartupTest() { | 92 virtual ~ProfileSyncServiceStartupTest() { |
| 94 } | 93 } |
| 95 | 94 |
| 96 virtual void SetUp() { | 95 virtual void SetUp() { |
| 97 CHECK(profile_manager_.SetUp()); | 96 CHECK(profile_manager_.SetUp()); |
| 98 | 97 |
| 99 TestingProfile::TestingFactories testing_facotries; | 98 TestingProfile::TestingFactories testing_facotries; |
| 100 testing_facotries.push_back( | 99 testing_facotries.push_back( |
| 101 std::make_pair(SigninManagerFactory::GetInstance(), | 100 std::make_pair(SigninManagerFactory::GetInstance(), |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 } | 140 } |
| 142 | 141 |
| 143 ProfileSyncComponentsFactoryMock* components_factory_mock() { | 142 ProfileSyncComponentsFactoryMock* components_factory_mock() { |
| 144 return static_cast<ProfileSyncComponentsFactoryMock*>(sync_->factory()); | 143 return static_cast<ProfileSyncComponentsFactoryMock*>(sync_->factory()); |
| 145 } | 144 } |
| 146 | 145 |
| 147 FakeSigninManagerForTesting* fake_signin() { | 146 FakeSigninManagerForTesting* fake_signin() { |
| 148 return static_cast<FakeSigninManagerForTesting*>(sync_->signin()); | 147 return static_cast<FakeSigninManagerForTesting*>(sync_->signin()); |
| 149 } | 148 } |
| 150 | 149 |
| 151 void SetError() { | 150 void SetError(DataTypeManager::ConfigureResult* result) { |
| 152 sync_driver::DataTypeStatusTable::TypeErrorMap errors; | 151 sync_driver::DataTypeStatusTable::TypeErrorMap errors; |
| 153 errors[syncer::BOOKMARKS] = | 152 errors[syncer::BOOKMARKS] = |
| 154 syncer::SyncError(FROM_HERE, | 153 syncer::SyncError(FROM_HERE, |
| 155 syncer::SyncError::UNRECOVERABLE_ERROR, | 154 syncer::SyncError::UNRECOVERABLE_ERROR, |
| 156 "Error", | 155 "Error", |
| 157 syncer::BOOKMARKS); | 156 syncer::BOOKMARKS); |
| 158 data_type_status_table_->UpdateFailedDataTypes(errors); | 157 result->data_type_status_table.UpdateFailedDataTypes(errors); |
| 159 } | 158 } |
| 160 | 159 |
| 161 protected: | 160 protected: |
| 162 void SimulateTestUserSignin() { | 161 void SimulateTestUserSignin() { |
| 163 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 162 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
| 164 "test_user@gmail.com"); | 163 "test_user@gmail.com"); |
| 165 #if !defined(OS_CHROMEOS) | 164 #if !defined(OS_CHROMEOS) |
| 166 fake_signin()->SignIn("test_user@gmail.com", ""); | 165 fake_signin()->SignIn("test_user@gmail.com", ""); |
| 167 #else | 166 #else |
| 168 fake_signin()->SetAuthenticatedUsername("test_user@gmail.com"); | 167 fake_signin()->SetAuthenticatedUsername("test_user@gmail.com"); |
| 169 sync_->GoogleSigninSucceeded("test_user@gmail.com", | 168 sync_->GoogleSigninSucceeded("test_user@gmail.com", |
| 170 "test_user@gmail.com", | 169 "test_user@gmail.com", |
| 171 ""); | 170 ""); |
| 172 #endif | 171 #endif |
| 173 } | 172 } |
| 174 | 173 |
| 175 DataTypeManagerMock* SetUpDataTypeManager() { | 174 DataTypeManagerMock* SetUpDataTypeManager() { |
| 176 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); | 175 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); |
| 177 EXPECT_CALL(*components_factory_mock(), | 176 EXPECT_CALL(*components_factory_mock(), |
| 178 CreateDataTypeManager(_, _, _, _, _, _)). | 177 CreateDataTypeManager(_, _, _, _, _)). |
| 179 WillOnce(DoAll(SaveArg<5>(&data_type_status_table_), | 178 WillOnce(Return(data_type_manager)); |
| 180 Return(data_type_manager))); | |
| 181 return data_type_manager; | 179 return data_type_manager; |
| 182 } | 180 } |
| 183 | 181 |
| 184 browser_sync::SyncBackendHostMock* SetUpSyncBackendHost() { | 182 browser_sync::SyncBackendHostMock* SetUpSyncBackendHost() { |
| 185 browser_sync::SyncBackendHostMock* sync_backend_host = | 183 browser_sync::SyncBackendHostMock* sync_backend_host = |
| 186 new browser_sync::SyncBackendHostMock(); | 184 new browser_sync::SyncBackendHostMock(); |
| 187 EXPECT_CALL(*components_factory_mock(), | 185 EXPECT_CALL(*components_factory_mock(), |
| 188 CreateSyncBackendHost(_, _, _, _, _)). | 186 CreateSyncBackendHost(_, _, _, _, _)). |
| 189 WillOnce(Return(sync_backend_host)); | 187 WillOnce(Return(sync_backend_host)); |
| 190 return sync_backend_host; | 188 return sync_backend_host; |
| 191 } | 189 } |
| 192 | 190 |
| 193 content::TestBrowserThreadBundle thread_bundle_; | 191 content::TestBrowserThreadBundle thread_bundle_; |
| 194 TestingProfileManager profile_manager_; | 192 TestingProfileManager profile_manager_; |
| 195 TestingProfile* profile_; | 193 TestingProfile* profile_; |
| 196 ProfileSyncService* sync_; | 194 ProfileSyncService* sync_; |
| 197 ProfileSyncServiceObserverMock observer_; | 195 ProfileSyncServiceObserverMock observer_; |
| 198 sync_driver::DataTypeStatusTable* data_type_status_table_; | 196 sync_driver::DataTypeStatusTable data_type_status_table_; |
| 199 }; | 197 }; |
| 200 | 198 |
| 201 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { | 199 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { |
| 202 public: | 200 public: |
| 203 virtual void SetUp() { | 201 virtual void SetUp() { |
| 204 ProfileSyncServiceStartupTest::SetUp(); | 202 ProfileSyncServiceStartupTest::SetUp(); |
| 205 sync_ = static_cast<ProfileSyncService*>( | 203 sync_ = static_cast<ProfileSyncService*>( |
| 206 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 204 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 207 profile_, BuildCrosService)); | 205 profile_, BuildCrosService)); |
| 208 sync_->AddObserver(&observer_); | 206 sync_->AddObserver(&observer_); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 | 270 |
| 273 // TODO(pavely): Reenable test once android is switched to oauth2. | 271 // TODO(pavely): Reenable test once android is switched to oauth2. |
| 274 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) { | 272 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) { |
| 275 // We've never completed startup. | 273 // We've never completed startup. |
| 276 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); | 274 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); |
| 277 CreateSyncService(); | 275 CreateSyncService(); |
| 278 | 276 |
| 279 // Should not actually start, rather just clean things up and wait | 277 // Should not actually start, rather just clean things up and wait |
| 280 // to be enabled. | 278 // to be enabled. |
| 281 EXPECT_CALL(*components_factory_mock(), | 279 EXPECT_CALL(*components_factory_mock(), |
| 282 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); | 280 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
| 283 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 281 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 284 sync_->Initialize(); | 282 sync_->Initialize(); |
| 285 | 283 |
| 286 // Preferences should be back to defaults. | 284 // Preferences should be back to defaults. |
| 287 EXPECT_EQ( | 285 EXPECT_EQ( |
| 288 0, | 286 0, |
| 289 profile_->GetPrefs()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime)); | 287 profile_->GetPrefs()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime)); |
| 290 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( | 288 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( |
| 291 sync_driver::prefs::kSyncHasSetupCompleted)); | 289 sync_driver::prefs::kSyncHasSetupCompleted)); |
| 292 | 290 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 } | 344 } |
| 347 | 345 |
| 348 #if defined(OS_WIN) | 346 #if defined(OS_WIN) |
| 349 // http://crbug.com/396402 | 347 // http://crbug.com/396402 |
| 350 #define MAYBE_StartCrosNoCredentials DISABLED_StartCrosNoCredentials | 348 #define MAYBE_StartCrosNoCredentials DISABLED_StartCrosNoCredentials |
| 351 #else | 349 #else |
| 352 #define MAYBE_StartCrosNoCredentials StartCrosNoCredentials | 350 #define MAYBE_StartCrosNoCredentials StartCrosNoCredentials |
| 353 #endif | 351 #endif |
| 354 TEST_F(ProfileSyncServiceStartupCrosTest, MAYBE_StartCrosNoCredentials) { | 352 TEST_F(ProfileSyncServiceStartupCrosTest, MAYBE_StartCrosNoCredentials) { |
| 355 EXPECT_CALL(*components_factory_mock(), | 353 EXPECT_CALL(*components_factory_mock(), |
| 356 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); | 354 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
| 357 EXPECT_CALL(*components_factory_mock(), | 355 EXPECT_CALL(*components_factory_mock(), |
| 358 CreateSyncBackendHost(_, _, _, _, _)).Times(0); | 356 CreateSyncBackendHost(_, _, _, _, _)).Times(0); |
| 359 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); | 357 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); |
| 360 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 358 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 361 | 359 |
| 362 sync_->Initialize(); | 360 sync_->Initialize(); |
| 363 // Sync should not start because there are no tokens yet. | 361 // Sync should not start because there are no tokens yet. |
| 364 EXPECT_FALSE(sync_->ShouldPushChanges()); | 362 EXPECT_FALSE(sync_->ShouldPushChanges()); |
| 365 sync_->SetSetupInProgress(false); | 363 sync_->SetSetupInProgress(false); |
| 366 | 364 |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 #endif | 487 #endif |
| 490 TEST_F(ProfileSyncServiceStartupTest, MAYBE_ManagedStartup) { | 488 TEST_F(ProfileSyncServiceStartupTest, MAYBE_ManagedStartup) { |
| 491 // Service should not be started by Initialize() since it's managed. | 489 // Service should not be started by Initialize() since it's managed. |
| 492 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 490 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
| 493 "test_user@gmail.com"); | 491 "test_user@gmail.com"); |
| 494 CreateSyncService(); | 492 CreateSyncService(); |
| 495 | 493 |
| 496 // Disable sync through policy. | 494 // Disable sync through policy. |
| 497 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); | 495 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); |
| 498 EXPECT_CALL(*components_factory_mock(), | 496 EXPECT_CALL(*components_factory_mock(), |
| 499 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); | 497 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
| 500 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 498 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 501 | 499 |
| 502 sync_->Initialize(); | 500 sync_->Initialize(); |
| 503 } | 501 } |
| 504 | 502 |
| 505 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { | 503 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { |
| 506 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 504 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
| 507 "test_user@gmail.com"); | 505 "test_user@gmail.com"); |
| 508 SigninManagerFactory::GetForProfile(profile_) | 506 SigninManagerFactory::GetForProfile(profile_) |
| 509 ->SetAuthenticatedUsername("test_user@gmail.com"); | 507 ->SetAuthenticatedUsername("test_user@gmail.com"); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 521 EXPECT_CALL(*data_type_manager, state()). | 519 EXPECT_CALL(*data_type_manager, state()). |
| 522 WillOnce(Return(DataTypeManager::CONFIGURED)); | 520 WillOnce(Return(DataTypeManager::CONFIGURED)); |
| 523 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 521 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 524 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 522 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 525 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); | 523 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); |
| 526 | 524 |
| 527 // When switching back to unmanaged, the state should change, but the service | 525 // When switching back to unmanaged, the state should change, but the service |
| 528 // should not start up automatically (kSyncSetupCompleted will be false). | 526 // should not start up automatically (kSyncSetupCompleted will be false). |
| 529 Mock::VerifyAndClearExpectations(data_type_manager); | 527 Mock::VerifyAndClearExpectations(data_type_manager); |
| 530 EXPECT_CALL(*components_factory_mock(), | 528 EXPECT_CALL(*components_factory_mock(), |
| 531 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); | 529 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
| 532 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 530 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 533 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncManaged); | 531 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncManaged); |
| 534 } | 532 } |
| 535 | 533 |
| 536 TEST_F(ProfileSyncServiceStartupTest, StartFailure) { | 534 TEST_F(ProfileSyncServiceStartupTest, StartFailure) { |
| 537 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 535 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
| 538 "test_user@gmail.com"); | 536 "test_user@gmail.com"); |
| 539 SigninManagerFactory::GetForProfile(profile_) | 537 SigninManagerFactory::GetForProfile(profile_) |
| 540 ->SetAuthenticatedUsername("test_user@gmail.com"); | 538 ->SetAuthenticatedUsername("test_user@gmail.com"); |
| 541 CreateSyncService(); | 539 CreateSyncService(); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); | 572 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); |
| 575 | 573 |
| 576 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 574 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 577 sync_->Initialize(); | 575 sync_->Initialize(); |
| 578 | 576 |
| 579 sync_->SetSetupInProgress(true); | 577 sync_->SetSetupInProgress(true); |
| 580 IssueTestTokens(); | 578 IssueTestTokens(); |
| 581 sync_->SetSetupInProgress(false); | 579 sync_->SetSetupInProgress(false); |
| 582 EXPECT_FALSE(sync_->sync_initialized()); | 580 EXPECT_FALSE(sync_->sync_initialized()); |
| 583 } | 581 } |
| OLD | NEW |