| 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/account_tracker_service_factory.h" |
| 10 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" | 11 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
| 11 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" | 12 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" |
| 12 #include "chrome/browser/signin/fake_signin_manager.h" | 13 #include "chrome/browser/signin/fake_signin_manager.h" |
| 13 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 14 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 14 #include "chrome/browser/signin/signin_manager_factory.h" | 15 #include "chrome/browser/signin/signin_manager_factory.h" |
| 15 #include "chrome/browser/sync/glue/sync_backend_host_mock.h" | 16 #include "chrome/browser/sync/glue/sync_backend_host_mock.h" |
| 16 #include "chrome/browser/sync/profile_sync_components_factory_mock.h" | 17 #include "chrome/browser/sync/profile_sync_components_factory_mock.h" |
| 17 #include "chrome/browser/sync/profile_sync_service_factory.h" | 18 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 18 #include "chrome/browser/sync/profile_sync_test_util.h" | 19 #include "chrome/browser/sync/profile_sync_test_util.h" |
| 19 #include "chrome/browser/sync/supervised_user_signin_manager_wrapper.h" | 20 #include "chrome/browser/sync/supervised_user_signin_manager_wrapper.h" |
| 20 #include "chrome/common/pref_names.h" | 21 #include "chrome/common/pref_names.h" |
| 21 #include "chrome/test/base/testing_browser_process.h" | 22 #include "chrome/test/base/testing_browser_process.h" |
| 22 #include "chrome/test/base/testing_profile.h" | 23 #include "chrome/test/base/testing_profile.h" |
| 23 #include "chrome/test/base/testing_profile_manager.h" | 24 #include "chrome/test/base/testing_profile_manager.h" |
| 25 #include "components/signin/core/browser/account_tracker_service.h" |
| 24 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 26 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
| 25 #include "components/signin/core/browser/signin_manager.h" | 27 #include "components/signin/core/browser/signin_manager.h" |
| 26 #include "components/sync_driver/data_type_manager.h" | 28 #include "components/sync_driver/data_type_manager.h" |
| 27 #include "components/sync_driver/data_type_manager_mock.h" | 29 #include "components/sync_driver/data_type_manager_mock.h" |
| 28 #include "components/sync_driver/pref_names.h" | 30 #include "components/sync_driver/pref_names.h" |
| 29 #include "components/sync_driver/sync_prefs.h" | 31 #include "components/sync_driver/sync_prefs.h" |
| 30 #include "content/public/test/test_browser_thread_bundle.h" | 32 #include "content/public/test/test_browser_thread_bundle.h" |
| 31 #include "content/public/test/test_utils.h" | 33 #include "content/public/test/test_utils.h" |
| 32 #include "google_apis/gaia/gaia_auth_consumer.h" | 34 #include "google_apis/gaia/gaia_auth_consumer.h" |
| 33 #include "google_apis/gaia/gaia_constants.h" | 35 #include "google_apis/gaia/gaia_constants.h" |
| 34 #include "google_apis/gaia/oauth2_token_service.h" | 36 #include "google_apis/gaia/oauth2_token_service.h" |
| 35 #include "testing/gmock/include/gmock/gmock.h" | 37 #include "testing/gmock/include/gmock/gmock.h" |
| 36 #include "testing/gtest/include/gtest/gtest.h" | 38 #include "testing/gtest/include/gtest/gtest.h" |
| 37 | 39 |
| 38 using browser_sync::SyncBackendHostMock; | 40 using browser_sync::SyncBackendHostMock; |
| 39 using content::BrowserThread; | 41 using content::BrowserThread; |
| 40 using sync_driver::DataTypeManager; | 42 using sync_driver::DataTypeManager; |
| 41 using sync_driver::DataTypeManagerMock; | 43 using sync_driver::DataTypeManagerMock; |
| 42 using testing::_; | 44 using testing::_; |
| 43 using testing::AnyNumber; | 45 using testing::AnyNumber; |
| 44 using testing::DoAll; | 46 using testing::DoAll; |
| 45 using testing::InvokeArgument; | 47 using testing::InvokeArgument; |
| 46 using testing::Mock; | 48 using testing::Mock; |
| 47 using testing::Return; | 49 using testing::Return; |
| 48 using testing::SaveArg; | 50 using testing::SaveArg; |
| 49 | 51 |
| 52 namespace { |
| 53 |
| 54 const char kGaiaId[] = "12345"; |
| 55 const char kEmail[] = "test_user@gmail.com"; |
| 56 const char kDummyPassword[] = ""; |
| 57 |
| 58 } // namespace |
| 59 |
| 50 ACTION_P(InvokeOnConfigureStart, pss) { | 60 ACTION_P(InvokeOnConfigureStart, pss) { |
| 51 ProfileSyncService* service = | 61 ProfileSyncService* service = |
| 52 static_cast<ProfileSyncService*>(pss); | 62 static_cast<ProfileSyncService*>(pss); |
| 53 service->OnConfigureStart(); | 63 service->OnConfigureStart(); |
| 54 } | 64 } |
| 55 | 65 |
| 56 ACTION_P3(InvokeOnConfigureDone, pss, error_callback, result) { | 66 ACTION_P3(InvokeOnConfigureDone, pss, error_callback, result) { |
| 57 ProfileSyncService* service = | 67 ProfileSyncService* service = |
| 58 static_cast<ProfileSyncService*>(pss); | 68 static_cast<ProfileSyncService*>(pss); |
| 59 DataTypeManager::ConfigureResult configure_result = | 69 DataTypeManager::ConfigureResult configure_result = |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 ProfileOAuth2TokenServiceFactory::GetForProfile(profile), | 132 ProfileOAuth2TokenServiceFactory::GetForProfile(profile), |
| 123 browser_sync::MANUAL_START); | 133 browser_sync::MANUAL_START); |
| 124 } | 134 } |
| 125 | 135 |
| 126 void CreateSyncService() { | 136 void CreateSyncService() { |
| 127 sync_ = static_cast<ProfileSyncService*>( | 137 sync_ = static_cast<ProfileSyncService*>( |
| 128 ProfileSyncServiceFactory::GetForProfile(profile_)); | 138 ProfileSyncServiceFactory::GetForProfile(profile_)); |
| 129 sync_->AddObserver(&observer_); | 139 sync_->AddObserver(&observer_); |
| 130 } | 140 } |
| 131 | 141 |
| 132 void IssueTestTokens() { | 142 void IssueTestTokens(const std::string& account_id) { |
| 133 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_) | 143 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_) |
| 134 ->UpdateCredentials("test_user@gmail.com", "oauth2_login_token"); | 144 ->UpdateCredentials(account_id, "oauth2_login_token"); |
| 135 } | 145 } |
| 136 | 146 |
| 137 ProfileSyncComponentsFactoryMock* components_factory_mock() { | 147 ProfileSyncComponentsFactoryMock* components_factory_mock() { |
| 138 return static_cast<ProfileSyncComponentsFactoryMock*>(sync_->factory()); | 148 return static_cast<ProfileSyncComponentsFactoryMock*>(sync_->factory()); |
| 139 } | 149 } |
| 140 | 150 |
| 141 FakeSigninManagerForTesting* fake_signin() { | 151 FakeSigninManagerForTesting* fake_signin() { |
| 142 return static_cast<FakeSigninManagerForTesting*>(sync_->signin()); | 152 return static_cast<FakeSigninManagerForTesting*>(sync_->signin()); |
| 143 } | 153 } |
| 144 | 154 |
| 145 void SetError(DataTypeManager::ConfigureResult* result) { | 155 void SetError(DataTypeManager::ConfigureResult* result) { |
| 146 sync_driver::DataTypeStatusTable::TypeErrorMap errors; | 156 sync_driver::DataTypeStatusTable::TypeErrorMap errors; |
| 147 errors[syncer::BOOKMARKS] = | 157 errors[syncer::BOOKMARKS] = |
| 148 syncer::SyncError(FROM_HERE, | 158 syncer::SyncError(FROM_HERE, |
| 149 syncer::SyncError::UNRECOVERABLE_ERROR, | 159 syncer::SyncError::UNRECOVERABLE_ERROR, |
| 150 "Error", | 160 "Error", |
| 151 syncer::BOOKMARKS); | 161 syncer::BOOKMARKS); |
| 152 result->data_type_status_table.UpdateFailedDataTypes(errors); | 162 result->data_type_status_table.UpdateFailedDataTypes(errors); |
| 153 } | 163 } |
| 154 | 164 |
| 155 protected: | 165 protected: |
| 156 void SimulateTestUserSignin() { | 166 static std::string SimulateTestUserSignin( |
| 167 Profile* profile, |
| 168 FakeSigninManagerForTesting* fake_signin, |
| 169 ProfileSyncService* sync) { |
| 170 std::string account_id = |
| 171 AccountTrackerServiceFactory::GetForProfile(profile) |
| 172 ->SeedAccountInfo(kGaiaId, kEmail); |
| 173 profile->GetPrefs()->SetString(prefs::kGoogleServicesAccountId, |
| 174 account_id); |
| 157 #if !defined(OS_CHROMEOS) | 175 #if !defined(OS_CHROMEOS) |
| 158 fake_signin()->SignIn("test_user@gmail.com", ""); | 176 fake_signin->SignIn(kGaiaId, kEmail, kDummyPassword); |
| 159 #else | 177 #else |
| 160 fake_signin()->SetAuthenticatedUsername("test_user@gmail.com"); | 178 fake_signin->SetAuthenticatedAccountInfo(kGaiaId, kEmail); |
| 161 sync_->GoogleSigninSucceeded("test_user@gmail.com", | 179 if (sync) |
| 162 "test_user@gmail.com", | 180 sync->GoogleSigninSucceeded(account_id, kEmail, kDummyPassword); |
| 163 ""); | |
| 164 #endif | 181 #endif |
| 182 return account_id; |
| 165 } | 183 } |
| 166 | 184 |
| 167 DataTypeManagerMock* SetUpDataTypeManager() { | 185 DataTypeManagerMock* SetUpDataTypeManager() { |
| 168 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); | 186 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); |
| 169 EXPECT_CALL(*components_factory_mock(), | 187 EXPECT_CALL(*components_factory_mock(), |
| 170 CreateDataTypeManager(_, _, _, _, _)). | 188 CreateDataTypeManager(_, _, _, _, _)). |
| 171 WillOnce(Return(data_type_manager)); | 189 WillOnce(Return(data_type_manager)); |
| 172 return data_type_manager; | 190 return data_type_manager; |
| 173 } | 191 } |
| 174 | 192 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 192 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { | 210 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { |
| 193 public: | 211 public: |
| 194 void SetUp() override { | 212 void SetUp() override { |
| 195 ProfileSyncServiceStartupTest::SetUp(); | 213 ProfileSyncServiceStartupTest::SetUp(); |
| 196 sync_ = static_cast<ProfileSyncService*>( | 214 sync_ = static_cast<ProfileSyncService*>( |
| 197 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 215 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 198 profile_, BuildCrosService)); | 216 profile_, BuildCrosService)); |
| 199 sync_->AddObserver(&observer_); | 217 sync_->AddObserver(&observer_); |
| 200 } | 218 } |
| 201 | 219 |
| 202 static KeyedService* BuildCrosService(content::BrowserContext* context) { | 220 static KeyedService* BuildCrosService( |
| 221 content::BrowserContext* context) { |
| 203 Profile* profile = static_cast<Profile*>(context); | 222 Profile* profile = static_cast<Profile*>(context); |
| 204 SigninManagerBase* signin = | 223 FakeSigninManagerForTesting* signin = |
| 205 SigninManagerFactory::GetForProfile(profile); | 224 static_cast<FakeSigninManagerForTesting*>( |
| 206 signin->SetAuthenticatedUsername("test_user@gmail.com"); | 225 SigninManagerFactory::GetForProfile(profile)); |
| 226 SimulateTestUserSignin(profile, signin, nullptr); |
| 207 ProfileOAuth2TokenService* oauth2_token_service = | 227 ProfileOAuth2TokenService* oauth2_token_service = |
| 208 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); | 228 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); |
| 209 EXPECT_TRUE(signin->IsAuthenticated()); | 229 EXPECT_TRUE(signin->IsAuthenticated()); |
| 210 return new TestProfileSyncServiceNoBackup( | 230 return new TestProfileSyncServiceNoBackup( |
| 211 scoped_ptr<ProfileSyncComponentsFactory>( | 231 scoped_ptr<ProfileSyncComponentsFactory>( |
| 212 new ProfileSyncComponentsFactoryMock()), | 232 new ProfileSyncComponentsFactoryMock()), |
| 213 profile, | 233 profile, |
| 214 make_scoped_ptr(new SupervisedUserSigninManagerWrapper(profile, | 234 make_scoped_ptr(new SupervisedUserSigninManagerWrapper(profile, |
| 215 signin)), | 235 signin)), |
| 216 oauth2_token_service, | 236 oauth2_token_service, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 243 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1); | 263 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1); |
| 244 EXPECT_CALL(*data_type_manager, state()). | 264 EXPECT_CALL(*data_type_manager, state()). |
| 245 WillOnce(Return(DataTypeManager::CONFIGURED)). | 265 WillOnce(Return(DataTypeManager::CONFIGURED)). |
| 246 WillOnce(Return(DataTypeManager::CONFIGURED)); | 266 WillOnce(Return(DataTypeManager::CONFIGURED)); |
| 247 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 267 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 248 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 268 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 249 | 269 |
| 250 sync_->SetSetupInProgress(true); | 270 sync_->SetSetupInProgress(true); |
| 251 | 271 |
| 252 // Simulate successful signin as test_user. | 272 // Simulate successful signin as test_user. |
| 253 SimulateTestUserSignin(); | 273 std::string account_id = |
| 274 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 254 // Create some tokens in the token service. | 275 // Create some tokens in the token service. |
| 255 IssueTestTokens(); | 276 IssueTestTokens(account_id); |
| 256 | 277 |
| 257 // Simulate the UI telling sync it has finished setting up. | 278 // Simulate the UI telling sync it has finished setting up. |
| 258 sync_->SetSetupInProgress(false); | 279 sync_->SetSetupInProgress(false); |
| 259 EXPECT_TRUE(sync_->SyncActive()); | 280 EXPECT_TRUE(sync_->SyncActive()); |
| 260 } | 281 } |
| 261 | 282 |
| 262 // TODO(pavely): Reenable test once android is switched to oauth2. | 283 // TODO(pavely): Reenable test once android is switched to oauth2. |
| 263 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) { | 284 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) { |
| 264 // We've never completed startup. | 285 // We've never completed startup. |
| 265 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); | 286 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 276 EXPECT_EQ( | 297 EXPECT_EQ( |
| 277 0, | 298 0, |
| 278 profile_->GetPrefs()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime)); | 299 profile_->GetPrefs()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime)); |
| 279 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( | 300 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( |
| 280 sync_driver::prefs::kSyncHasSetupCompleted)); | 301 sync_driver::prefs::kSyncHasSetupCompleted)); |
| 281 | 302 |
| 282 // Then start things up. | 303 // Then start things up. |
| 283 sync_->SetSetupInProgress(true); | 304 sync_->SetSetupInProgress(true); |
| 284 | 305 |
| 285 // Simulate successful signin as test_user. | 306 // Simulate successful signin as test_user. |
| 286 SimulateTestUserSignin(); | 307 std::string account_id = |
| 308 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 287 | 309 |
| 288 ProfileOAuth2TokenService* token_service = | 310 ProfileOAuth2TokenService* token_service = |
| 289 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); | 311 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); |
| 290 token_service->LoadCredentials("test_user@gmail.com"); | 312 token_service->LoadCredentials(kEmail); |
| 291 | 313 |
| 292 sync_->SetSetupInProgress(false); | 314 sync_->SetSetupInProgress(false); |
| 293 // ProfileSyncService should try to start by requesting access token. | 315 // ProfileSyncService should try to start by requesting access token. |
| 294 // This request should fail as login token was not issued. | 316 // This request should fail as login token was not issued. |
| 295 EXPECT_FALSE(sync_->SyncActive()); | 317 EXPECT_FALSE(sync_->SyncActive()); |
| 296 EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, | 318 EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, |
| 297 sync_->GetAuthError().state()); | 319 sync_->GetAuthError().state()); |
| 298 } | 320 } |
| 299 | 321 |
| 300 // TODO(pavely): Reenable test once android is switched to oauth2. | 322 // TODO(pavely): Reenable test once android is switched to oauth2. |
| 301 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartInvalidCredentials) { | 323 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartInvalidCredentials) { |
| 302 sync_->signin()->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 303 CreateSyncService(); | 324 CreateSyncService(); |
| 325 std::string account_id = |
| 326 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 304 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); | 327 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); |
| 305 | 328 |
| 306 // Tell the backend to stall while downloading control types (simulating an | 329 // Tell the backend to stall while downloading control types (simulating an |
| 307 // auth error). | 330 // auth error). |
| 308 mock_sbh->set_fail_initial_download(true); | 331 mock_sbh->set_fail_initial_download(true); |
| 309 | 332 |
| 310 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 333 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 311 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); | 334 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); |
| 312 | 335 |
| 313 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 336 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 314 sync_->Initialize(); | 337 sync_->Initialize(); |
| 315 EXPECT_FALSE(sync_->SyncActive()); | 338 EXPECT_FALSE(sync_->SyncActive()); |
| 316 Mock::VerifyAndClearExpectations(data_type_manager); | 339 Mock::VerifyAndClearExpectations(data_type_manager); |
| 317 | 340 |
| 318 // Update the credentials, unstalling the backend. | 341 // Update the credentials, unstalling the backend. |
| 319 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 342 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 320 EXPECT_CALL(*data_type_manager, state()). | 343 EXPECT_CALL(*data_type_manager, state()). |
| 321 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 344 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 322 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 345 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 323 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 346 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 324 sync_->SetSetupInProgress(true); | 347 sync_->SetSetupInProgress(true); |
| 325 | 348 |
| 326 // Simulate successful signin. | 349 // Simulate successful signin. |
| 327 SimulateTestUserSignin(); | 350 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 328 | 351 |
| 329 sync_->SetSetupInProgress(false); | 352 sync_->SetSetupInProgress(false); |
| 330 | 353 |
| 331 // Verify we successfully finish startup and configuration. | 354 // Verify we successfully finish startup and configuration. |
| 332 EXPECT_TRUE(sync_->SyncActive()); | 355 EXPECT_TRUE(sync_->SyncActive()); |
| 333 } | 356 } |
| 334 | 357 |
| 335 #if defined(OS_WIN) | 358 #if defined(OS_WIN) |
| 336 // http://crbug.com/396402 | 359 // http://crbug.com/396402 |
| 337 #define MAYBE_StartCrosNoCredentials DISABLED_StartCrosNoCredentials | 360 #define MAYBE_StartCrosNoCredentials DISABLED_StartCrosNoCredentials |
| (...skipping 20 matching lines...) Expand all Loading... |
| 358 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { | 381 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { |
| 359 SetUpSyncBackendHost(); | 382 SetUpSyncBackendHost(); |
| 360 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 383 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 361 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); | 384 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); |
| 362 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 385 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 363 EXPECT_CALL(*data_type_manager, state()). | 386 EXPECT_CALL(*data_type_manager, state()). |
| 364 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 387 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 365 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 388 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 366 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 389 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 367 | 390 |
| 368 IssueTestTokens(); | 391 IssueTestTokens( |
| 392 AccountTrackerServiceFactory::GetForProfile(profile_) |
| 393 ->PickAccountIdForAccount("12345", kEmail)); |
| 369 sync_->Initialize(); | 394 sync_->Initialize(); |
| 370 EXPECT_TRUE(sync_->SyncActive()); | 395 EXPECT_TRUE(sync_->SyncActive()); |
| 371 } | 396 } |
| 372 | 397 |
| 373 #if defined(OS_WIN) | 398 #if defined(OS_WIN) |
| 374 // http://crbug.com/396402 | 399 // http://crbug.com/396402 |
| 375 #define MAYBE_StartNormal DISABLED_StartNormal | 400 #define MAYBE_StartNormal DISABLED_StartNormal |
| 376 #else | 401 #else |
| 377 #define MAYBE_StartNormal StartNormal | 402 #define MAYBE_StartNormal StartNormal |
| 378 #endif | 403 #endif |
| 379 TEST_F(ProfileSyncServiceStartupTest, MAYBE_StartNormal) { | 404 TEST_F(ProfileSyncServiceStartupTest, MAYBE_StartNormal) { |
| 380 // Pre load the tokens | 405 // Pre load the tokens |
| 381 SigninManagerFactory::GetForProfile(profile_) | |
| 382 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 383 CreateSyncService(); | 406 CreateSyncService(); |
| 407 std::string account_id = |
| 408 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 384 sync_->SetSyncSetupCompleted(); | 409 sync_->SetSyncSetupCompleted(); |
| 385 SetUpSyncBackendHost(); | 410 SetUpSyncBackendHost(); |
| 386 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 411 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 387 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 412 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 388 EXPECT_CALL(*data_type_manager, state()). | 413 EXPECT_CALL(*data_type_manager, state()). |
| 389 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 414 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 390 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 415 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 391 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 416 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 392 | 417 |
| 393 IssueTestTokens(); | 418 IssueTestTokens(account_id); |
| 394 | 419 |
| 395 sync_->Initialize(); | 420 sync_->Initialize(); |
| 396 } | 421 } |
| 397 | 422 |
| 398 // Test that we can recover from a case where a bug in the code resulted in | 423 // Test that we can recover from a case where a bug in the code resulted in |
| 399 // OnUserChoseDatatypes not being properly called and datatype preferences | 424 // OnUserChoseDatatypes not being properly called and datatype preferences |
| 400 // therefore being left unset. | 425 // therefore being left unset. |
| 401 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { | 426 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { |
| 402 // Clear the datatype preference fields (simulating bug 154940). | 427 // Clear the datatype preference fields (simulating bug 154940). |
| 403 profile_->GetPrefs()->ClearPref( | 428 profile_->GetPrefs()->ClearPref( |
| 404 sync_driver::prefs::kSyncKeepEverythingSynced); | 429 sync_driver::prefs::kSyncKeepEverythingSynced); |
| 405 syncer::ModelTypeSet user_types = syncer::UserTypes(); | 430 syncer::ModelTypeSet user_types = syncer::UserTypes(); |
| 406 for (syncer::ModelTypeSet::Iterator iter = user_types.First(); | 431 for (syncer::ModelTypeSet::Iterator iter = user_types.First(); |
| 407 iter.Good(); iter.Inc()) { | 432 iter.Good(); iter.Inc()) { |
| 408 profile_->GetPrefs()->ClearPref( | 433 profile_->GetPrefs()->ClearPref( |
| 409 sync_driver::SyncPrefs::GetPrefNameForDataType(iter.Get())); | 434 sync_driver::SyncPrefs::GetPrefNameForDataType(iter.Get())); |
| 410 } | 435 } |
| 411 | 436 |
| 412 // Pre load the tokens | 437 // Pre load the tokens |
| 413 SigninManagerFactory::GetForProfile(profile_) | |
| 414 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 415 CreateSyncService(); | 438 CreateSyncService(); |
| 439 std::string account_id = |
| 440 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 416 sync_->SetSyncSetupCompleted(); | 441 sync_->SetSyncSetupCompleted(); |
| 417 SetUpSyncBackendHost(); | 442 SetUpSyncBackendHost(); |
| 418 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 443 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 419 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 444 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 420 EXPECT_CALL(*data_type_manager, state()). | 445 EXPECT_CALL(*data_type_manager, state()). |
| 421 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 446 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 422 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 447 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 423 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 448 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 424 | 449 |
| 425 IssueTestTokens(); | 450 IssueTestTokens(account_id); |
| 426 sync_->Initialize(); | 451 sync_->Initialize(); |
| 427 | 452 |
| 428 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( | 453 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( |
| 429 sync_driver::prefs::kSyncKeepEverythingSynced)); | 454 sync_driver::prefs::kSyncKeepEverythingSynced)); |
| 430 } | 455 } |
| 431 | 456 |
| 432 // Verify that the recovery of datatype preferences doesn't overwrite a valid | 457 // Verify that the recovery of datatype preferences doesn't overwrite a valid |
| 433 // case where only bookmarks are enabled. | 458 // case where only bookmarks are enabled. |
| 434 #if defined(OS_WIN) | 459 #if defined(OS_WIN) |
| 435 // http://crbug.com/396402 | 460 // http://crbug.com/396402 |
| 436 #define MAYBE_StartDontRecoverDatatypePrefs DISABLED_StartDontRecoverDatatypePre
fs | 461 #define MAYBE_StartDontRecoverDatatypePrefs DISABLED_StartDontRecoverDatatypePre
fs |
| 437 #else | 462 #else |
| 438 #define MAYBE_StartDontRecoverDatatypePrefs StartDontRecoverDatatypePrefs | 463 #define MAYBE_StartDontRecoverDatatypePrefs StartDontRecoverDatatypePrefs |
| 439 #endif | 464 #endif |
| 440 TEST_F(ProfileSyncServiceStartupTest, MAYBE_StartDontRecoverDatatypePrefs) { | 465 TEST_F(ProfileSyncServiceStartupTest, MAYBE_StartDontRecoverDatatypePrefs) { |
| 441 // Explicitly set Keep Everything Synced to false and have only bookmarks | 466 // Explicitly set Keep Everything Synced to false and have only bookmarks |
| 442 // enabled. | 467 // enabled. |
| 443 profile_->GetPrefs()->SetBoolean( | 468 profile_->GetPrefs()->SetBoolean( |
| 444 sync_driver::prefs::kSyncKeepEverythingSynced, false); | 469 sync_driver::prefs::kSyncKeepEverythingSynced, false); |
| 445 | 470 |
| 446 // Pre load the tokens | 471 // Pre load the tokens |
| 447 SigninManagerFactory::GetForProfile(profile_) | |
| 448 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 449 CreateSyncService(); | 472 CreateSyncService(); |
| 473 std::string account_id = |
| 474 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 450 sync_->SetSyncSetupCompleted(); | 475 sync_->SetSyncSetupCompleted(); |
| 451 SetUpSyncBackendHost(); | 476 SetUpSyncBackendHost(); |
| 452 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 477 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 453 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 478 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 454 EXPECT_CALL(*data_type_manager, state()). | 479 EXPECT_CALL(*data_type_manager, state()). |
| 455 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 480 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 456 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 481 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 457 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 482 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 458 IssueTestTokens(); | 483 IssueTestTokens(account_id); |
| 459 sync_->Initialize(); | 484 sync_->Initialize(); |
| 460 | 485 |
| 461 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( | 486 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( |
| 462 sync_driver::prefs::kSyncKeepEverythingSynced)); | 487 sync_driver::prefs::kSyncKeepEverythingSynced)); |
| 463 } | 488 } |
| 464 | 489 |
| 465 #if defined(OS_WIN) | 490 #if defined(OS_WIN) |
| 466 // http://crbug.com/396402 | 491 // http://crbug.com/396402 |
| 467 #define MAYBE_ManagedStartup DISABLED_ManagedStartup | 492 #define MAYBE_ManagedStartup DISABLED_ManagedStartup |
| 468 #else | 493 #else |
| 469 #define MAYBE_ManagedStartup ManagedStartup | 494 #define MAYBE_ManagedStartup ManagedStartup |
| 470 #endif | 495 #endif |
| 471 TEST_F(ProfileSyncServiceStartupTest, MAYBE_ManagedStartup) { | 496 TEST_F(ProfileSyncServiceStartupTest, MAYBE_ManagedStartup) { |
| 472 // Service should not be started by Initialize() since it's managed. | 497 // Service should not be started by Initialize() since it's managed. |
| 473 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 498 profile_->GetPrefs()->SetString(prefs::kGoogleServicesAccountId, |
| 474 "test_user@gmail.com"); | 499 kEmail); |
| 475 CreateSyncService(); | 500 CreateSyncService(); |
| 476 | 501 |
| 477 // Disable sync through policy. | 502 // Disable sync through policy. |
| 478 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); | 503 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); |
| 479 EXPECT_CALL(*components_factory_mock(), | 504 EXPECT_CALL(*components_factory_mock(), |
| 480 CreateDataTypeManager(_, _, _, _, _)).Times(0); | 505 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
| 481 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 506 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 482 | 507 |
| 483 sync_->Initialize(); | 508 sync_->Initialize(); |
| 484 } | 509 } |
| 485 | 510 |
| 486 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { | 511 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { |
| 487 SigninManagerFactory::GetForProfile(profile_) | |
| 488 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 489 CreateSyncService(); | 512 CreateSyncService(); |
| 513 std::string account_id = |
| 514 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 490 sync_->SetSyncSetupCompleted(); | 515 sync_->SetSyncSetupCompleted(); |
| 491 SetUpSyncBackendHost(); | 516 SetUpSyncBackendHost(); |
| 492 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 517 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 493 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 518 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 494 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 519 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 495 IssueTestTokens(); | 520 IssueTestTokens(account_id); |
| 496 sync_->Initialize(); | 521 sync_->Initialize(); |
| 497 | 522 |
| 498 // The service should stop when switching to managed mode. | 523 // The service should stop when switching to managed mode. |
| 499 Mock::VerifyAndClearExpectations(data_type_manager); | 524 Mock::VerifyAndClearExpectations(data_type_manager); |
| 500 EXPECT_CALL(*data_type_manager, state()). | 525 EXPECT_CALL(*data_type_manager, state()). |
| 501 WillOnce(Return(DataTypeManager::CONFIGURED)); | 526 WillOnce(Return(DataTypeManager::CONFIGURED)); |
| 502 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 527 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 503 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 528 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 504 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); | 529 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); |
| 505 | 530 |
| 506 // When switching back to unmanaged, the state should change, but the service | 531 // When switching back to unmanaged, the state should change, but the service |
| 507 // should not start up automatically (kSyncSetupCompleted will be false). | 532 // should not start up automatically (kSyncSetupCompleted will be false). |
| 508 Mock::VerifyAndClearExpectations(data_type_manager); | 533 Mock::VerifyAndClearExpectations(data_type_manager); |
| 509 EXPECT_CALL(*components_factory_mock(), | 534 EXPECT_CALL(*components_factory_mock(), |
| 510 CreateDataTypeManager(_, _, _, _, _)).Times(0); | 535 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
| 511 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 536 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 512 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncManaged); | 537 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncManaged); |
| 513 } | 538 } |
| 514 | 539 |
| 515 TEST_F(ProfileSyncServiceStartupTest, StartFailure) { | 540 TEST_F(ProfileSyncServiceStartupTest, StartFailure) { |
| 516 SigninManagerFactory::GetForProfile(profile_) | |
| 517 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 518 CreateSyncService(); | 541 CreateSyncService(); |
| 542 std::string account_id = |
| 543 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 519 sync_->SetSyncSetupCompleted(); | 544 sync_->SetSyncSetupCompleted(); |
| 520 SetUpSyncBackendHost(); | 545 SetUpSyncBackendHost(); |
| 521 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 546 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 522 DataTypeManager::ConfigureStatus status = DataTypeManager::ABORTED; | 547 DataTypeManager::ConfigureStatus status = DataTypeManager::ABORTED; |
| 523 DataTypeManager::ConfigureResult result( | 548 DataTypeManager::ConfigureResult result( |
| 524 status, | 549 status, |
| 525 syncer::ModelTypeSet()); | 550 syncer::ModelTypeSet()); |
| 526 EXPECT_CALL(*data_type_manager, Configure(_, _)).WillRepeatedly( | 551 EXPECT_CALL(*data_type_manager, Configure(_, _)).WillRepeatedly( |
| 527 DoAll(InvokeOnConfigureStart(sync_), | 552 DoAll(InvokeOnConfigureStart(sync_), |
| 528 InvokeOnConfigureDone( | 553 InvokeOnConfigureDone( |
| 529 sync_, | 554 sync_, |
| 530 base::Bind(&ProfileSyncServiceStartupTest::SetError, | 555 base::Bind(&ProfileSyncServiceStartupTest::SetError, |
| 531 base::Unretained(this)), | 556 base::Unretained(this)), |
| 532 result))); | 557 result))); |
| 533 EXPECT_CALL(*data_type_manager, state()). | 558 EXPECT_CALL(*data_type_manager, state()). |
| 534 WillOnce(Return(DataTypeManager::STOPPED)); | 559 WillOnce(Return(DataTypeManager::STOPPED)); |
| 535 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 560 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 536 IssueTestTokens(); | 561 IssueTestTokens(account_id); |
| 537 sync_->Initialize(); | 562 sync_->Initialize(); |
| 538 EXPECT_TRUE(sync_->HasUnrecoverableError()); | 563 EXPECT_TRUE(sync_->HasUnrecoverableError()); |
| 539 } | 564 } |
| 540 | 565 |
| 541 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { | 566 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { |
| 542 // Pre load the tokens | 567 // Pre load the tokens |
| 543 SigninManagerFactory::GetForProfile(profile_) | |
| 544 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 545 CreateSyncService(); | 568 CreateSyncService(); |
| 569 std::string account_id = |
| 570 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 546 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); | 571 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); |
| 547 mock_sbh->set_fail_initial_download(true); | 572 mock_sbh->set_fail_initial_download(true); |
| 548 | 573 |
| 549 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); | 574 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); |
| 550 | 575 |
| 551 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 576 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 552 sync_->Initialize(); | 577 sync_->Initialize(); |
| 553 | 578 |
| 554 sync_->SetSetupInProgress(true); | 579 sync_->SetSetupInProgress(true); |
| 555 IssueTestTokens(); | 580 IssueTestTokens(account_id); |
| 556 sync_->SetSetupInProgress(false); | 581 sync_->SetSetupInProgress(false); |
| 557 EXPECT_FALSE(sync_->SyncActive()); | 582 EXPECT_FALSE(sync_->SyncActive()); |
| 558 } | 583 } |
| OLD | NEW |