| 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 19 matching lines...) Expand all Loading... |
| 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(content::BrowserContext* context) { |
| 203 Profile* profile = static_cast<Profile*>(context); | 221 Profile* profile = static_cast<Profile*>(context); |
| 204 SigninManagerBase* signin = | 222 FakeSigninManagerForTesting* signin = |
| 205 SigninManagerFactory::GetForProfile(profile); | 223 static_cast<FakeSigninManagerForTesting*>( |
| 206 signin->SetAuthenticatedUsername("test_user@gmail.com"); | 224 SigninManagerFactory::GetForProfile(profile)); |
| 225 SimulateTestUserSignin(profile, signin, nullptr); |
| 207 ProfileOAuth2TokenService* oauth2_token_service = | 226 ProfileOAuth2TokenService* oauth2_token_service = |
| 208 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); | 227 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); |
| 209 EXPECT_TRUE(signin->IsAuthenticated()); | 228 EXPECT_TRUE(signin->IsAuthenticated()); |
| 210 return new TestProfileSyncServiceNoBackup( | 229 return new TestProfileSyncServiceNoBackup( |
| 211 scoped_ptr<ProfileSyncComponentsFactory>( | 230 scoped_ptr<ProfileSyncComponentsFactory>( |
| 212 new ProfileSyncComponentsFactoryMock()), | 231 new ProfileSyncComponentsFactoryMock()), |
| 213 profile, | 232 profile, |
| 214 make_scoped_ptr(new SupervisedUserSigninManagerWrapper(profile, | 233 make_scoped_ptr(new SupervisedUserSigninManagerWrapper(profile, |
| 215 signin)), | 234 signin)), |
| 216 oauth2_token_service, | 235 oauth2_token_service, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 243 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1); | 262 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1); |
| 244 EXPECT_CALL(*data_type_manager, state()). | 263 EXPECT_CALL(*data_type_manager, state()). |
| 245 WillOnce(Return(DataTypeManager::CONFIGURED)). | 264 WillOnce(Return(DataTypeManager::CONFIGURED)). |
| 246 WillOnce(Return(DataTypeManager::CONFIGURED)); | 265 WillOnce(Return(DataTypeManager::CONFIGURED)); |
| 247 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 266 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 248 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 267 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 249 | 268 |
| 250 sync_->SetSetupInProgress(true); | 269 sync_->SetSetupInProgress(true); |
| 251 | 270 |
| 252 // Simulate successful signin as test_user. | 271 // Simulate successful signin as test_user. |
| 253 SimulateTestUserSignin(); | 272 std::string account_id = |
| 273 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 254 // Create some tokens in the token service. | 274 // Create some tokens in the token service. |
| 255 IssueTestTokens(); | 275 IssueTestTokens(account_id); |
| 256 | 276 |
| 257 // Simulate the UI telling sync it has finished setting up. | 277 // Simulate the UI telling sync it has finished setting up. |
| 258 sync_->SetSetupInProgress(false); | 278 sync_->SetSetupInProgress(false); |
| 259 EXPECT_TRUE(sync_->SyncActive()); | 279 EXPECT_TRUE(sync_->SyncActive()); |
| 260 } | 280 } |
| 261 | 281 |
| 262 // TODO(pavely): Reenable test once android is switched to oauth2. | 282 // TODO(pavely): Reenable test once android is switched to oauth2. |
| 263 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) { | 283 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) { |
| 264 // We've never completed startup. | 284 // We've never completed startup. |
| 265 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); | 285 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 276 EXPECT_EQ( | 296 EXPECT_EQ( |
| 277 0, | 297 0, |
| 278 profile_->GetPrefs()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime)); | 298 profile_->GetPrefs()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime)); |
| 279 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( | 299 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( |
| 280 sync_driver::prefs::kSyncHasSetupCompleted)); | 300 sync_driver::prefs::kSyncHasSetupCompleted)); |
| 281 | 301 |
| 282 // Then start things up. | 302 // Then start things up. |
| 283 sync_->SetSetupInProgress(true); | 303 sync_->SetSetupInProgress(true); |
| 284 | 304 |
| 285 // Simulate successful signin as test_user. | 305 // Simulate successful signin as test_user. |
| 286 SimulateTestUserSignin(); | 306 std::string account_id = |
| 307 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 287 | 308 |
| 288 ProfileOAuth2TokenService* token_service = | 309 ProfileOAuth2TokenService* token_service = |
| 289 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); | 310 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); |
| 290 token_service->LoadCredentials("test_user@gmail.com"); | 311 token_service->LoadCredentials(account_id); |
| 291 | 312 |
| 292 sync_->SetSetupInProgress(false); | 313 sync_->SetSetupInProgress(false); |
| 293 // ProfileSyncService should try to start by requesting access token. | 314 // ProfileSyncService should try to start by requesting access token. |
| 294 // This request should fail as login token was not issued. | 315 // This request should fail as login token was not issued. |
| 295 EXPECT_FALSE(sync_->SyncActive()); | 316 EXPECT_FALSE(sync_->SyncActive()); |
| 296 EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, | 317 EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, |
| 297 sync_->GetAuthError().state()); | 318 sync_->GetAuthError().state()); |
| 298 } | 319 } |
| 299 | 320 |
| 300 // TODO(pavely): Reenable test once android is switched to oauth2. | 321 // TODO(pavely): Reenable test once android is switched to oauth2. |
| 301 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartInvalidCredentials) { | 322 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartInvalidCredentials) { |
| 302 sync_->signin()->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 303 CreateSyncService(); | 323 CreateSyncService(); |
| 324 std::string account_id = |
| 325 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 304 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); | 326 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); |
| 305 | 327 |
| 306 // Tell the backend to stall while downloading control types (simulating an | 328 // Tell the backend to stall while downloading control types (simulating an |
| 307 // auth error). | 329 // auth error). |
| 308 mock_sbh->set_fail_initial_download(true); | 330 mock_sbh->set_fail_initial_download(true); |
| 309 | 331 |
| 310 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 332 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 311 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); | 333 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); |
| 312 | 334 |
| 313 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 335 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 314 sync_->Initialize(); | 336 sync_->Initialize(); |
| 315 EXPECT_FALSE(sync_->SyncActive()); | 337 EXPECT_FALSE(sync_->SyncActive()); |
| 316 Mock::VerifyAndClearExpectations(data_type_manager); | 338 Mock::VerifyAndClearExpectations(data_type_manager); |
| 317 | 339 |
| 318 // Update the credentials, unstalling the backend. | 340 // Update the credentials, unstalling the backend. |
| 319 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 341 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 320 EXPECT_CALL(*data_type_manager, state()). | 342 EXPECT_CALL(*data_type_manager, state()). |
| 321 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 343 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 322 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 344 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 323 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 345 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 324 sync_->SetSetupInProgress(true); | 346 sync_->SetSetupInProgress(true); |
| 325 | 347 |
| 326 // Simulate successful signin. | 348 // Simulate successful signin. |
| 327 SimulateTestUserSignin(); | 349 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 328 | 350 |
| 329 sync_->SetSetupInProgress(false); | 351 sync_->SetSetupInProgress(false); |
| 330 | 352 |
| 331 // Verify we successfully finish startup and configuration. | 353 // Verify we successfully finish startup and configuration. |
| 332 EXPECT_TRUE(sync_->SyncActive()); | 354 EXPECT_TRUE(sync_->SyncActive()); |
| 333 } | 355 } |
| 334 | 356 |
| 335 #if defined(OS_WIN) | 357 #if defined(OS_WIN) |
| 336 // http://crbug.com/396402 | 358 // http://crbug.com/396402 |
| 337 #define MAYBE_StartCrosNoCredentials DISABLED_StartCrosNoCredentials | 359 #define MAYBE_StartCrosNoCredentials DISABLED_StartCrosNoCredentials |
| (...skipping 20 matching lines...) Expand all Loading... |
| 358 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { | 380 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { |
| 359 SetUpSyncBackendHost(); | 381 SetUpSyncBackendHost(); |
| 360 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 382 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 361 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); | 383 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); |
| 362 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 384 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 363 EXPECT_CALL(*data_type_manager, state()). | 385 EXPECT_CALL(*data_type_manager, state()). |
| 364 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 386 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 365 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 387 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 366 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 388 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 367 | 389 |
| 368 IssueTestTokens(); | 390 IssueTestTokens( |
| 391 AccountTrackerServiceFactory::GetForProfile(profile_) |
| 392 ->PickAccountIdForAccount("12345", kEmail)); |
| 369 sync_->Initialize(); | 393 sync_->Initialize(); |
| 370 EXPECT_TRUE(sync_->SyncActive()); | 394 EXPECT_TRUE(sync_->SyncActive()); |
| 371 } | 395 } |
| 372 | 396 |
| 373 #if defined(OS_WIN) | 397 #if defined(OS_WIN) |
| 374 // http://crbug.com/396402 | 398 // http://crbug.com/396402 |
| 375 #define MAYBE_StartNormal DISABLED_StartNormal | 399 #define MAYBE_StartNormal DISABLED_StartNormal |
| 376 #else | 400 #else |
| 377 #define MAYBE_StartNormal StartNormal | 401 #define MAYBE_StartNormal StartNormal |
| 378 #endif | 402 #endif |
| 379 TEST_F(ProfileSyncServiceStartupTest, MAYBE_StartNormal) { | 403 TEST_F(ProfileSyncServiceStartupTest, MAYBE_StartNormal) { |
| 380 // Pre load the tokens | 404 // Pre load the tokens |
| 381 SigninManagerFactory::GetForProfile(profile_) | |
| 382 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 383 CreateSyncService(); | 405 CreateSyncService(); |
| 406 std::string account_id = |
| 407 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 384 sync_->SetSyncSetupCompleted(); | 408 sync_->SetSyncSetupCompleted(); |
| 385 SetUpSyncBackendHost(); | 409 SetUpSyncBackendHost(); |
| 386 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 410 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 387 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 411 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 388 EXPECT_CALL(*data_type_manager, state()). | 412 EXPECT_CALL(*data_type_manager, state()). |
| 389 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 413 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 390 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 414 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 391 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 415 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 392 | 416 |
| 393 IssueTestTokens(); | 417 IssueTestTokens(account_id); |
| 394 | 418 |
| 395 sync_->Initialize(); | 419 sync_->Initialize(); |
| 396 } | 420 } |
| 397 | 421 |
| 398 // Test that we can recover from a case where a bug in the code resulted in | 422 // 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 | 423 // OnUserChoseDatatypes not being properly called and datatype preferences |
| 400 // therefore being left unset. | 424 // therefore being left unset. |
| 401 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { | 425 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { |
| 402 // Clear the datatype preference fields (simulating bug 154940). | 426 // Clear the datatype preference fields (simulating bug 154940). |
| 403 profile_->GetPrefs()->ClearPref( | 427 profile_->GetPrefs()->ClearPref( |
| 404 sync_driver::prefs::kSyncKeepEverythingSynced); | 428 sync_driver::prefs::kSyncKeepEverythingSynced); |
| 405 syncer::ModelTypeSet user_types = syncer::UserTypes(); | 429 syncer::ModelTypeSet user_types = syncer::UserTypes(); |
| 406 for (syncer::ModelTypeSet::Iterator iter = user_types.First(); | 430 for (syncer::ModelTypeSet::Iterator iter = user_types.First(); |
| 407 iter.Good(); iter.Inc()) { | 431 iter.Good(); iter.Inc()) { |
| 408 profile_->GetPrefs()->ClearPref( | 432 profile_->GetPrefs()->ClearPref( |
| 409 sync_driver::SyncPrefs::GetPrefNameForDataType(iter.Get())); | 433 sync_driver::SyncPrefs::GetPrefNameForDataType(iter.Get())); |
| 410 } | 434 } |
| 411 | 435 |
| 412 // Pre load the tokens | 436 // Pre load the tokens |
| 413 SigninManagerFactory::GetForProfile(profile_) | |
| 414 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 415 CreateSyncService(); | 437 CreateSyncService(); |
| 438 std::string account_id = |
| 439 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 416 sync_->SetSyncSetupCompleted(); | 440 sync_->SetSyncSetupCompleted(); |
| 417 SetUpSyncBackendHost(); | 441 SetUpSyncBackendHost(); |
| 418 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 442 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 419 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 443 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 420 EXPECT_CALL(*data_type_manager, state()). | 444 EXPECT_CALL(*data_type_manager, state()). |
| 421 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 445 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 422 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 446 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 423 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 447 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 424 | 448 |
| 425 IssueTestTokens(); | 449 IssueTestTokens(account_id); |
| 426 sync_->Initialize(); | 450 sync_->Initialize(); |
| 427 | 451 |
| 428 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( | 452 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( |
| 429 sync_driver::prefs::kSyncKeepEverythingSynced)); | 453 sync_driver::prefs::kSyncKeepEverythingSynced)); |
| 430 } | 454 } |
| 431 | 455 |
| 432 // Verify that the recovery of datatype preferences doesn't overwrite a valid | 456 // Verify that the recovery of datatype preferences doesn't overwrite a valid |
| 433 // case where only bookmarks are enabled. | 457 // case where only bookmarks are enabled. |
| 434 #if defined(OS_WIN) | 458 #if defined(OS_WIN) |
| 435 // http://crbug.com/396402 | 459 // http://crbug.com/396402 |
| 436 #define MAYBE_StartDontRecoverDatatypePrefs DISABLED_StartDontRecoverDatatypePre
fs | 460 #define MAYBE_StartDontRecoverDatatypePrefs DISABLED_StartDontRecoverDatatypePre
fs |
| 437 #else | 461 #else |
| 438 #define MAYBE_StartDontRecoverDatatypePrefs StartDontRecoverDatatypePrefs | 462 #define MAYBE_StartDontRecoverDatatypePrefs StartDontRecoverDatatypePrefs |
| 439 #endif | 463 #endif |
| 440 TEST_F(ProfileSyncServiceStartupTest, MAYBE_StartDontRecoverDatatypePrefs) { | 464 TEST_F(ProfileSyncServiceStartupTest, MAYBE_StartDontRecoverDatatypePrefs) { |
| 441 // Explicitly set Keep Everything Synced to false and have only bookmarks | 465 // Explicitly set Keep Everything Synced to false and have only bookmarks |
| 442 // enabled. | 466 // enabled. |
| 443 profile_->GetPrefs()->SetBoolean( | 467 profile_->GetPrefs()->SetBoolean( |
| 444 sync_driver::prefs::kSyncKeepEverythingSynced, false); | 468 sync_driver::prefs::kSyncKeepEverythingSynced, false); |
| 445 | 469 |
| 446 // Pre load the tokens | 470 // Pre load the tokens |
| 447 SigninManagerFactory::GetForProfile(profile_) | |
| 448 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 449 CreateSyncService(); | 471 CreateSyncService(); |
| 472 std::string account_id = |
| 473 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 450 sync_->SetSyncSetupCompleted(); | 474 sync_->SetSyncSetupCompleted(); |
| 451 SetUpSyncBackendHost(); | 475 SetUpSyncBackendHost(); |
| 452 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 476 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 453 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 477 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 454 EXPECT_CALL(*data_type_manager, state()). | 478 EXPECT_CALL(*data_type_manager, state()). |
| 455 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 479 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 456 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 480 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 457 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 481 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 458 IssueTestTokens(); | 482 IssueTestTokens(account_id); |
| 459 sync_->Initialize(); | 483 sync_->Initialize(); |
| 460 | 484 |
| 461 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( | 485 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( |
| 462 sync_driver::prefs::kSyncKeepEverythingSynced)); | 486 sync_driver::prefs::kSyncKeepEverythingSynced)); |
| 463 } | 487 } |
| 464 | 488 |
| 465 #if defined(OS_WIN) | 489 #if defined(OS_WIN) |
| 466 // http://crbug.com/396402 | 490 // http://crbug.com/396402 |
| 467 #define MAYBE_ManagedStartup DISABLED_ManagedStartup | 491 #define MAYBE_ManagedStartup DISABLED_ManagedStartup |
| 468 #else | 492 #else |
| 469 #define MAYBE_ManagedStartup ManagedStartup | 493 #define MAYBE_ManagedStartup ManagedStartup |
| 470 #endif | 494 #endif |
| 471 TEST_F(ProfileSyncServiceStartupTest, MAYBE_ManagedStartup) { | 495 TEST_F(ProfileSyncServiceStartupTest, MAYBE_ManagedStartup) { |
| 472 // Service should not be started by Initialize() since it's managed. | 496 // Service should not be started by Initialize() since it's managed. |
| 473 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 497 profile_->GetPrefs()->SetString(prefs::kGoogleServicesAccountId, |
| 474 "test_user@gmail.com"); | 498 kEmail); |
| 475 CreateSyncService(); | 499 CreateSyncService(); |
| 476 | 500 |
| 477 // Disable sync through policy. | 501 // Disable sync through policy. |
| 478 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); | 502 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); |
| 479 EXPECT_CALL(*components_factory_mock(), | 503 EXPECT_CALL(*components_factory_mock(), |
| 480 CreateDataTypeManager(_, _, _, _, _)).Times(0); | 504 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
| 481 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 505 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 482 | 506 |
| 483 sync_->Initialize(); | 507 sync_->Initialize(); |
| 484 } | 508 } |
| 485 | 509 |
| 486 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { | 510 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { |
| 487 SigninManagerFactory::GetForProfile(profile_) | |
| 488 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 489 CreateSyncService(); | 511 CreateSyncService(); |
| 512 std::string account_id = |
| 513 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 490 sync_->SetSyncSetupCompleted(); | 514 sync_->SetSyncSetupCompleted(); |
| 491 SetUpSyncBackendHost(); | 515 SetUpSyncBackendHost(); |
| 492 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 516 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 493 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 517 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 494 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 518 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 495 IssueTestTokens(); | 519 IssueTestTokens(account_id); |
| 496 sync_->Initialize(); | 520 sync_->Initialize(); |
| 497 | 521 |
| 498 // The service should stop when switching to managed mode. | 522 // The service should stop when switching to managed mode. |
| 499 Mock::VerifyAndClearExpectations(data_type_manager); | 523 Mock::VerifyAndClearExpectations(data_type_manager); |
| 500 EXPECT_CALL(*data_type_manager, state()). | 524 EXPECT_CALL(*data_type_manager, state()). |
| 501 WillOnce(Return(DataTypeManager::CONFIGURED)); | 525 WillOnce(Return(DataTypeManager::CONFIGURED)); |
| 502 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 526 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 503 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 527 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 504 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); | 528 profile_->GetPrefs()->SetBoolean(sync_driver::prefs::kSyncManaged, true); |
| 505 | 529 |
| 506 // When switching back to unmanaged, the state should change, but the service | 530 // When switching back to unmanaged, the state should change, but the service |
| 507 // should not start up automatically (kSyncSetupCompleted will be false). | 531 // should not start up automatically (kSyncSetupCompleted will be false). |
| 508 Mock::VerifyAndClearExpectations(data_type_manager); | 532 Mock::VerifyAndClearExpectations(data_type_manager); |
| 509 EXPECT_CALL(*components_factory_mock(), | 533 EXPECT_CALL(*components_factory_mock(), |
| 510 CreateDataTypeManager(_, _, _, _, _)).Times(0); | 534 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
| 511 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 535 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 512 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncManaged); | 536 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncManaged); |
| 513 } | 537 } |
| 514 | 538 |
| 515 TEST_F(ProfileSyncServiceStartupTest, StartFailure) { | 539 TEST_F(ProfileSyncServiceStartupTest, StartFailure) { |
| 516 SigninManagerFactory::GetForProfile(profile_) | |
| 517 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 518 CreateSyncService(); | 540 CreateSyncService(); |
| 541 std::string account_id = |
| 542 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 519 sync_->SetSyncSetupCompleted(); | 543 sync_->SetSyncSetupCompleted(); |
| 520 SetUpSyncBackendHost(); | 544 SetUpSyncBackendHost(); |
| 521 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 545 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 522 DataTypeManager::ConfigureStatus status = DataTypeManager::ABORTED; | 546 DataTypeManager::ConfigureStatus status = DataTypeManager::ABORTED; |
| 523 DataTypeManager::ConfigureResult result( | 547 DataTypeManager::ConfigureResult result( |
| 524 status, | 548 status, |
| 525 syncer::ModelTypeSet()); | 549 syncer::ModelTypeSet()); |
| 526 EXPECT_CALL(*data_type_manager, Configure(_, _)).WillRepeatedly( | 550 EXPECT_CALL(*data_type_manager, Configure(_, _)).WillRepeatedly( |
| 527 DoAll(InvokeOnConfigureStart(sync_), | 551 DoAll(InvokeOnConfigureStart(sync_), |
| 528 InvokeOnConfigureDone( | 552 InvokeOnConfigureDone( |
| 529 sync_, | 553 sync_, |
| 530 base::Bind(&ProfileSyncServiceStartupTest::SetError, | 554 base::Bind(&ProfileSyncServiceStartupTest::SetError, |
| 531 base::Unretained(this)), | 555 base::Unretained(this)), |
| 532 result))); | 556 result))); |
| 533 EXPECT_CALL(*data_type_manager, state()). | 557 EXPECT_CALL(*data_type_manager, state()). |
| 534 WillOnce(Return(DataTypeManager::STOPPED)); | 558 WillOnce(Return(DataTypeManager::STOPPED)); |
| 535 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 559 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 536 IssueTestTokens(); | 560 IssueTestTokens(account_id); |
| 537 sync_->Initialize(); | 561 sync_->Initialize(); |
| 538 EXPECT_TRUE(sync_->HasUnrecoverableError()); | 562 EXPECT_TRUE(sync_->HasUnrecoverableError()); |
| 539 } | 563 } |
| 540 | 564 |
| 541 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { | 565 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { |
| 542 // Pre load the tokens | 566 // Pre load the tokens |
| 543 SigninManagerFactory::GetForProfile(profile_) | |
| 544 ->SetAuthenticatedUsername("test_user@gmail.com"); | |
| 545 CreateSyncService(); | 567 CreateSyncService(); |
| 568 std::string account_id = |
| 569 SimulateTestUserSignin(profile_, fake_signin(), sync_); |
| 546 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); | 570 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); |
| 547 mock_sbh->set_fail_initial_download(true); | 571 mock_sbh->set_fail_initial_download(true); |
| 548 | 572 |
| 549 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); | 573 profile_->GetPrefs()->ClearPref(sync_driver::prefs::kSyncHasSetupCompleted); |
| 550 | 574 |
| 551 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 575 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 552 sync_->Initialize(); | 576 sync_->Initialize(); |
| 553 | 577 |
| 554 sync_->SetSetupInProgress(true); | 578 sync_->SetSetupInProgress(true); |
| 555 IssueTestTokens(); | 579 IssueTestTokens(account_id); |
| 556 sync_->SetSetupInProgress(false); | 580 sync_->SetSetupInProgress(false); |
| 557 EXPECT_FALSE(sync_->SyncActive()); | 581 EXPECT_FALSE(sync_->SyncActive()); |
| 558 } | 582 } |
| OLD | NEW |