| 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 "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
| 10 #include "chrome/browser/signin/fake_signin_manager.h" | 10 #include "chrome/browser/signin/fake_signin_manager.h" |
| 11 #include "chrome/browser/signin/oauth2_token_service.h" |
| 12 #include "chrome/browser/signin/profile_oauth2_token_service.h" |
| 13 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 11 #include "chrome/browser/signin/signin_manager.h" | 14 #include "chrome/browser/signin/signin_manager.h" |
| 12 #include "chrome/browser/signin/signin_manager_factory.h" | 15 #include "chrome/browser/signin/signin_manager_factory.h" |
| 13 #include "chrome/browser/signin/token_service.h" | 16 #include "chrome/browser/signin/token_service.h" |
| 14 #include "chrome/browser/signin/token_service_factory.h" | 17 #include "chrome/browser/signin/token_service_factory.h" |
| 15 #include "chrome/browser/sync/glue/data_type_manager.h" | 18 #include "chrome/browser/sync/glue/data_type_manager.h" |
| 16 #include "chrome/browser/sync/glue/data_type_manager_mock.h" | 19 #include "chrome/browser/sync/glue/data_type_manager_mock.h" |
| 17 #include "chrome/browser/sync/profile_sync_components_factory_mock.h" | 20 #include "chrome/browser/sync/profile_sync_components_factory_mock.h" |
| 18 #include "chrome/browser/sync/profile_sync_service_factory.h" | 21 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 19 #include "chrome/browser/sync/profile_sync_test_util.h" | 22 #include "chrome/browser/sync/profile_sync_test_util.h" |
| 20 #include "chrome/browser/sync/sync_prefs.h" | 23 #include "chrome/browser/sync/sync_prefs.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 file_thread_.Start(); | 85 file_thread_.Start(); |
| 83 io_thread_.StartIOThread(); | 86 io_thread_.StartIOThread(); |
| 84 profile_->CreateRequestContext(); | 87 profile_->CreateRequestContext(); |
| 85 #if defined(OS_CHROMEOS) | 88 #if defined(OS_CHROMEOS) |
| 86 SigninManagerFactory::GetInstance()->SetTestingFactory( | 89 SigninManagerFactory::GetInstance()->SetTestingFactory( |
| 87 profile_.get(), FakeSigninManagerBase::Build); | 90 profile_.get(), FakeSigninManagerBase::Build); |
| 88 #else | 91 #else |
| 89 SigninManagerFactory::GetInstance()->SetTestingFactory( | 92 SigninManagerFactory::GetInstance()->SetTestingFactory( |
| 90 profile_.get(), FakeSigninManager::Build); | 93 profile_.get(), FakeSigninManager::Build); |
| 91 #endif | 94 #endif |
| 95 // ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( |
| 96 // profile_.get(), FakeOAuth2TokenService::BuildTokenService); |
| 92 } | 97 } |
| 93 | 98 |
| 94 virtual void TearDown() { | 99 virtual void TearDown() { |
| 95 sync_->RemoveObserver(&observer_); | 100 sync_->RemoveObserver(&observer_); |
| 96 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory( | 101 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory( |
| 97 profile_.get(), NULL); | 102 profile_.get(), NULL); |
| 103 ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( |
| 104 profile_.get(), NULL); |
| 98 profile_.reset(); | 105 profile_.reset(); |
| 99 | 106 |
| 100 // Pump messages posted by the sync core thread (which may end up | 107 // Pump messages posted by the sync core thread (which may end up |
| 101 // posting on the IO thread). | 108 // posting on the IO thread). |
| 102 ui_loop_.RunUntilIdle(); | 109 ui_loop_.RunUntilIdle(); |
| 103 io_thread_.Stop(); | 110 io_thread_.Stop(); |
| 104 file_thread_.Stop(); | 111 file_thread_.Stop(); |
| 105 ui_loop_.RunUntilIdle(); | 112 ui_loop_.RunUntilIdle(); |
| 106 } | 113 } |
| 107 | 114 |
| 108 static BrowserContextKeyedService* BuildService( | 115 static BrowserContextKeyedService* BuildService( |
| 109 content::BrowserContext* profile) { | 116 content::BrowserContext* profile) { |
| 110 return new TestProfileSyncService( | 117 return new TestProfileSyncService( |
| 111 new ProfileSyncComponentsFactoryMock(), | 118 new ProfileSyncComponentsFactoryMock(), |
| 112 static_cast<Profile*>(profile), | 119 static_cast<Profile*>(profile), |
| 113 SigninManagerFactory::GetForProfile(static_cast<Profile*>(profile)), | 120 SigninManagerFactory::GetForProfile(static_cast<Profile*>(profile)), |
| 114 ProfileSyncService::MANUAL_START, | 121 ProfileSyncService::MANUAL_START, |
| 115 true); | 122 true); |
| 116 } | 123 } |
| 117 | 124 |
| 118 void CreateSyncService() { | 125 void CreateSyncService() { |
| 126 ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( |
| 127 profile_.get(), FakeOAuth2TokenService::BuildTokenService); |
| 119 sync_ = static_cast<TestProfileSyncService*>( | 128 sync_ = static_cast<TestProfileSyncService*>( |
| 120 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 129 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 121 profile_.get(), BuildService)); | 130 profile_.get(), BuildService)); |
| 122 sync_->AddObserver(&observer_); | 131 sync_->AddObserver(&observer_); |
| 123 sync_->set_synchronous_sync_configuration(); | 132 sync_->set_synchronous_sync_configuration(); |
| 124 } | 133 } |
| 125 | 134 |
| 126 protected: | 135 protected: |
| 127 DataTypeManagerMock* SetUpDataTypeManager() { | 136 DataTypeManagerMock* SetUpDataTypeManager() { |
| 128 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); | 137 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 139 content::TestBrowserThread io_thread_; | 148 content::TestBrowserThread io_thread_; |
| 140 scoped_ptr<TestingProfile> profile_; | 149 scoped_ptr<TestingProfile> profile_; |
| 141 TestProfileSyncService* sync_; | 150 TestProfileSyncService* sync_; |
| 142 ProfileSyncServiceObserverMock observer_; | 151 ProfileSyncServiceObserverMock observer_; |
| 143 }; | 152 }; |
| 144 | 153 |
| 145 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { | 154 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { |
| 146 public: | 155 public: |
| 147 virtual void SetUp() { | 156 virtual void SetUp() { |
| 148 ProfileSyncServiceStartupTest::SetUp(); | 157 ProfileSyncServiceStartupTest::SetUp(); |
| 158 ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( |
| 159 profile_.get(), FakeOAuth2TokenService::BuildTokenService); |
| 149 sync_ = static_cast<TestProfileSyncService*>( | 160 sync_ = static_cast<TestProfileSyncService*>( |
| 150 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 161 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 151 profile_.get(), BuildCrosService)); | 162 profile_.get(), BuildCrosService)); |
| 152 sync_->AddObserver(&observer_); | 163 sync_->AddObserver(&observer_); |
| 153 sync_->set_synchronous_sync_configuration(); | 164 sync_->set_synchronous_sync_configuration(); |
| 154 } | 165 } |
| 155 | 166 |
| 156 static BrowserContextKeyedService* BuildCrosService( | 167 static BrowserContextKeyedService* BuildCrosService( |
| 157 content::BrowserContext* context) { | 168 content::BrowserContext* context) { |
| 158 Profile* profile = static_cast<Profile*>(context); | 169 Profile* profile = static_cast<Profile*>(context); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 "test_user"); | 221 "test_user"); |
| 211 sync_->signin()->SetAuthenticatedUsername("test_user"); | 222 sync_->signin()->SetAuthenticatedUsername("test_user"); |
| 212 GoogleServiceSigninSuccessDetails details("test_user", ""); | 223 GoogleServiceSigninSuccessDetails details("test_user", ""); |
| 213 content::NotificationService::current()->Notify( | 224 content::NotificationService::current()->Notify( |
| 214 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 225 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
| 215 content::Source<Profile>(profile_.get()), | 226 content::Source<Profile>(profile_.get()), |
| 216 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 227 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
| 217 | 228 |
| 218 // Create some tokens in the token service. | 229 // Create some tokens in the token service. |
| 219 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 230 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 220 GaiaConstants::kSyncService, "sync_token"); | |
| 221 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | |
| 222 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); | 231 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 223 | 232 |
| 224 // Simulate the UI telling sync it has finished setting up. | 233 // Simulate the UI telling sync it has finished setting up. |
| 225 sync_->SetSetupInProgress(false); | 234 sync_->SetSetupInProgress(false); |
| 226 EXPECT_TRUE(sync_->ShouldPushChanges()); | 235 EXPECT_TRUE(sync_->ShouldPushChanges()); |
| 227 } | 236 } |
| 228 | 237 |
| 229 TEST_F(ProfileSyncServiceStartupTest, StartNoCredentials) { | 238 TEST_F(ProfileSyncServiceStartupTest, StartNoCredentials) { |
| 230 // We've never completed startup. | 239 // We've never completed startup. |
| 231 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 240 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
| 232 SigninManagerFactory::GetForProfile( | 241 SigninManagerFactory::GetForProfile( |
| 233 profile_.get())->Initialize(profile_.get(), NULL); | 242 profile_.get())->Initialize(profile_.get(), NULL); |
| 234 TokenService* token_service = static_cast<TokenService*>( | 243 TokenService* token_service = static_cast<TokenService*>( |
| 235 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 244 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 236 profile_.get(), BuildFakeTokenService)); | 245 profile_.get(), BuildFakeTokenService)); |
| 237 CreateSyncService(); | 246 CreateSyncService(); |
| 238 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | |
| 239 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); | |
| 240 | 247 |
| 241 // Should not actually start, rather just clean things up and wait | 248 // Should not actually start, rather just clean things up and wait |
| 242 // to be enabled. | 249 // to be enabled. |
| 250 EXPECT_CALL(*sync_->components_factory_mock(), |
| 251 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); |
| 243 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 252 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 244 sync_->Initialize(); | 253 sync_->Initialize(); |
| 245 EXPECT_FALSE(sync_->GetBackendForTest()); | 254 EXPECT_FALSE(sync_->GetBackendForTest()); |
| 246 | 255 |
| 247 // Preferences should be back to defaults. | 256 // Preferences should be back to defaults. |
| 248 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); | 257 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); |
| 249 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); | 258 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); |
| 250 Mock::VerifyAndClearExpectations(data_type_manager); | |
| 251 | 259 |
| 252 // Then start things up. | 260 // Then start things up. |
| 253 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1); | |
| 254 EXPECT_CALL(*data_type_manager, state()). | |
| 255 WillOnce(Return(DataTypeManager::CONFIGURED)). | |
| 256 WillOnce(Return(DataTypeManager::CONFIGURED)); | |
| 257 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | |
| 258 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | |
| 259 | |
| 260 sync_->SetSetupInProgress(true); | 261 sync_->SetSetupInProgress(true); |
| 261 | 262 |
| 262 // Simulate successful signin as test_user. | 263 // Simulate successful signin as test_user. |
| 263 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 264 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
| 264 "test_user"); | 265 "test_user"); |
| 265 sync_->signin()->SetAuthenticatedUsername("test_user"); | 266 sync_->signin()->SetAuthenticatedUsername("test_user"); |
| 266 GoogleServiceSigninSuccessDetails details("test_user", ""); | 267 GoogleServiceSigninSuccessDetails details("test_user", ""); |
| 267 content::NotificationService::current()->Notify( | 268 content::NotificationService::current()->Notify( |
| 268 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 269 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
| 269 content::Source<Profile>(profile_.get()), | 270 content::Source<Profile>(profile_.get()), |
| 270 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 271 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
| 271 // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens. | 272 // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens. |
| 272 token_service->LoadTokensFromDB(); | 273 token_service->LoadTokensFromDB(); |
| 273 | 274 |
| 274 sync_->SetSetupInProgress(false); | 275 sync_->SetSetupInProgress(false); |
| 275 // Backend should initialize using a bogus GAIA token for credentials. | 276 // ProfileSyncService should try to start by requesting access token. |
| 276 EXPECT_TRUE(sync_->ShouldPushChanges()); | 277 // This request should fail as login token was not issued to TokenService. |
| 278 EXPECT_FALSE(sync_->ShouldPushChanges()); |
| 279 EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, |
| 280 sync_->GetAuthError().state()); |
| 277 } | 281 } |
| 278 | 282 |
| 279 TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) { | 283 TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) { |
| 280 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 284 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
| 281 "test_user"); | 285 "test_user"); |
| 282 SigninManagerFactory::GetForProfile( | 286 SigninManagerFactory::GetForProfile( |
| 283 profile_.get())->Initialize(profile_.get(), NULL); | 287 profile_.get())->Initialize(profile_.get(), NULL); |
| 284 CreateSyncService(); | 288 CreateSyncService(); |
| 285 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 289 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 286 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); | 290 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); |
| 287 TokenService* token_service = static_cast<TokenService*>( | 291 // Issue login token so that ProfileSyncServer tries to initialize backend. |
| 288 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 292 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 289 profile_.get(), BuildFakeTokenService)); | 293 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 290 token_service->LoadTokensFromDB(); | |
| 291 | 294 |
| 292 // Tell the backend to stall while downloading control types (simulating an | 295 // Tell the backend to stall while downloading control types (simulating an |
| 293 // auth error). | 296 // auth error). |
| 294 sync_->fail_initial_download(); | 297 sync_->fail_initial_download(); |
| 295 | 298 |
| 296 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 299 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 297 sync_->Initialize(); | 300 sync_->Initialize(); |
| 298 EXPECT_TRUE(sync_->GetBackendForTest()); | 301 EXPECT_TRUE(sync_->GetBackendForTest()); |
| 299 EXPECT_FALSE(sync_->sync_initialized()); | 302 EXPECT_FALSE(sync_->sync_initialized()); |
| 300 EXPECT_FALSE(sync_->ShouldPushChanges()); | |
| 301 Mock::VerifyAndClearExpectations(data_type_manager); | 303 Mock::VerifyAndClearExpectations(data_type_manager); |
| 302 | 304 |
| 303 // Update the credentials, unstalling the backend. | 305 // Update the credentials, unstalling the backend. |
| 304 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 306 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 305 EXPECT_CALL(*data_type_manager, state()). | 307 EXPECT_CALL(*data_type_manager, state()). |
| 306 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 308 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 307 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 309 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 308 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 310 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 309 sync_->SetSetupInProgress(true); | 311 sync_->SetSetupInProgress(true); |
| 310 | 312 |
| 311 // Simulate successful signin. | 313 // Simulate successful signin. |
| 312 GoogleServiceSigninSuccessDetails details("test_user", std::string()); | 314 GoogleServiceSigninSuccessDetails details("test_user", std::string()); |
| 313 content::NotificationService::current()->Notify( | 315 content::NotificationService::current()->Notify( |
| 314 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 316 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
| 315 content::Source<Profile>(profile_.get()), | 317 content::Source<Profile>(profile_.get()), |
| 316 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 318 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
| 317 | 319 |
| 318 token_service->IssueAuthTokenForTest( | 320 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 319 GaiaConstants::kSyncService, "sync_token"); | 321 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 320 sync_->SetSetupInProgress(false); | 322 sync_->SetSetupInProgress(false); |
| 321 base::MessageLoop::current()->Run(); | |
| 322 | 323 |
| 323 // Verify we successfully finish startup and configuration. | 324 // Verify we successfully finish startup and configuration. |
| 324 EXPECT_TRUE(sync_->ShouldPushChanges()); | 325 EXPECT_TRUE(sync_->ShouldPushChanges()); |
| 325 } | 326 } |
| 326 | 327 |
| 327 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { | 328 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { |
| 328 EXPECT_CALL(*sync_->components_factory_mock(), | 329 EXPECT_CALL(*sync_->components_factory_mock(), |
| 329 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); | 330 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); |
| 330 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 331 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
| 331 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 332 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 348 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { | 349 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { |
| 349 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 350 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 350 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 351 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
| 351 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 352 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 352 EXPECT_CALL(*data_type_manager, state()). | 353 EXPECT_CALL(*data_type_manager, state()). |
| 353 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 354 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 354 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 355 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 355 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 356 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 356 | 357 |
| 357 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 358 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 358 GaiaConstants::kSyncService, "sync_token"); | 359 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 359 sync_->Initialize(); | 360 sync_->Initialize(); |
| 360 EXPECT_TRUE(sync_->ShouldPushChanges()); | 361 EXPECT_TRUE(sync_->ShouldPushChanges()); |
| 361 } | 362 } |
| 362 | 363 |
| 363 TEST_F(ProfileSyncServiceStartupTest, StartNormal) { | 364 TEST_F(ProfileSyncServiceStartupTest, StartNormal) { |
| 364 // Pre load the tokens | 365 // Pre load the tokens |
| 365 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 366 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
| 366 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 367 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
| 367 profile_.get(), NULL); | 368 profile_.get(), NULL); |
| 368 CreateSyncService(); | 369 CreateSyncService(); |
| 369 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 370 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 370 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 371 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 371 EXPECT_CALL(*data_type_manager, state()). | 372 EXPECT_CALL(*data_type_manager, state()). |
| 372 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 373 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 373 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 374 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 374 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 375 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 375 | 376 |
| 376 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 377 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 377 GaiaConstants::kSyncService, "sync_token"); | 378 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 378 | 379 |
| 379 sync_->Initialize(); | 380 sync_->Initialize(); |
| 380 } | 381 } |
| 381 | 382 |
| 382 // Test that we can recover from a case where a bug in the code resulted in | 383 // Test that we can recover from a case where a bug in the code resulted in |
| 383 // OnUserChoseDatatypes not being properly called and datatype preferences | 384 // OnUserChoseDatatypes not being properly called and datatype preferences |
| 384 // therefore being left unset. | 385 // therefore being left unset. |
| 385 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { | 386 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { |
| 386 // Clear the datatype preference fields (simulating bug 154940). | 387 // Clear the datatype preference fields (simulating bug 154940). |
| 387 profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced); | 388 profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 398 profile_.get(), NULL); | 399 profile_.get(), NULL); |
| 399 CreateSyncService(); | 400 CreateSyncService(); |
| 400 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 401 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 401 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 402 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 402 EXPECT_CALL(*data_type_manager, state()). | 403 EXPECT_CALL(*data_type_manager, state()). |
| 403 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 404 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 404 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 405 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 405 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 406 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 406 | 407 |
| 407 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 408 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 408 GaiaConstants::kSyncService, "sync_token"); | 409 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 409 sync_->Initialize(); | 410 sync_->Initialize(); |
| 410 | 411 |
| 411 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( | 412 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( |
| 412 prefs::kSyncKeepEverythingSynced)); | 413 prefs::kSyncKeepEverythingSynced)); |
| 413 } | 414 } |
| 414 | 415 |
| 415 // Verify that the recovery of datatype preferences doesn't overwrite a valid | 416 // Verify that the recovery of datatype preferences doesn't overwrite a valid |
| 416 // case where only bookmarks are enabled. | 417 // case where only bookmarks are enabled. |
| 417 TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) { | 418 TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) { |
| 418 // Explicitly set Keep Everything Synced to false and have only bookmarks | 419 // Explicitly set Keep Everything Synced to false and have only bookmarks |
| 419 // enabled. | 420 // enabled. |
| 420 profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false); | 421 profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false); |
| 421 | 422 |
| 422 // Pre load the tokens | 423 // Pre load the tokens |
| 423 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 424 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
| 424 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 425 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
| 425 profile_.get(), NULL); | 426 profile_.get(), NULL); |
| 426 CreateSyncService(); | 427 CreateSyncService(); |
| 427 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 428 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 428 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 429 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 429 EXPECT_CALL(*data_type_manager, state()). | 430 EXPECT_CALL(*data_type_manager, state()). |
| 430 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 431 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
| 431 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 432 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 432 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 433 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 433 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 434 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 434 GaiaConstants::kSyncService, "sync_token"); | 435 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 435 sync_->Initialize(); | 436 sync_->Initialize(); |
| 436 | 437 |
| 437 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( | 438 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( |
| 438 prefs::kSyncKeepEverythingSynced)); | 439 prefs::kSyncKeepEverythingSynced)); |
| 439 } | 440 } |
| 440 | 441 |
| 441 TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) { | 442 TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) { |
| 442 // Service should not be started by Initialize() since it's managed. | 443 // Service should not be started by Initialize() since it's managed. |
| 443 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 444 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
| 444 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 445 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
| 445 profile_.get(), NULL); | 446 profile_.get(), NULL); |
| 446 CreateSyncService(); | 447 CreateSyncService(); |
| 447 | 448 |
| 448 // Disable sync through policy. | 449 // Disable sync through policy. |
| 449 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); | 450 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); |
| 450 EXPECT_CALL(*sync_->components_factory_mock(), | 451 EXPECT_CALL(*sync_->components_factory_mock(), |
| 451 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); | 452 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); |
| 452 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 453 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 453 | 454 |
| 454 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 455 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 455 GaiaConstants::kSyncService, "sync_token"); | 456 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 456 sync_->Initialize(); | 457 sync_->Initialize(); |
| 457 } | 458 } |
| 458 | 459 |
| 459 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { | 460 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { |
| 460 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 461 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
| 461 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 462 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
| 462 profile_.get(), NULL); | 463 profile_.get(), NULL); |
| 463 CreateSyncService(); | 464 CreateSyncService(); |
| 464 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 465 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
| 465 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 466 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
| 466 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 467 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 467 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 468 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 468 GaiaConstants::kSyncService, "sync_token"); | 469 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 469 sync_->Initialize(); | 470 sync_->Initialize(); |
| 470 | 471 |
| 471 // The service should stop when switching to managed mode. | 472 // The service should stop when switching to managed mode. |
| 472 Mock::VerifyAndClearExpectations(data_type_manager); | 473 Mock::VerifyAndClearExpectations(data_type_manager); |
| 473 EXPECT_CALL(*data_type_manager, state()). | 474 EXPECT_CALL(*data_type_manager, state()). |
| 474 WillOnce(Return(DataTypeManager::CONFIGURED)); | 475 WillOnce(Return(DataTypeManager::CONFIGURED)); |
| 475 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 476 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
| 476 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 477 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 477 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); | 478 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); |
| 478 | 479 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 502 errors, | 503 errors, |
| 503 syncer::ModelTypeSet()); | 504 syncer::ModelTypeSet()); |
| 504 EXPECT_CALL(*data_type_manager, Configure(_, _)). | 505 EXPECT_CALL(*data_type_manager, Configure(_, _)). |
| 505 WillRepeatedly( | 506 WillRepeatedly( |
| 506 DoAll(InvokeOnConfigureStart(sync_), | 507 DoAll(InvokeOnConfigureStart(sync_), |
| 507 InvokeOnConfigureDone(sync_, result))); | 508 InvokeOnConfigureDone(sync_, result))); |
| 508 EXPECT_CALL(*data_type_manager, state()). | 509 EXPECT_CALL(*data_type_manager, state()). |
| 509 WillOnce(Return(DataTypeManager::STOPPED)); | 510 WillOnce(Return(DataTypeManager::STOPPED)); |
| 510 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 511 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 511 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 512 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 512 GaiaConstants::kSyncService, "sync_token"); | 513 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 513 sync_->Initialize(); | 514 sync_->Initialize(); |
| 514 EXPECT_TRUE(sync_->HasUnrecoverableError()); | 515 EXPECT_TRUE(sync_->HasUnrecoverableError()); |
| 515 } | 516 } |
| 516 | 517 |
| 517 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { | 518 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { |
| 518 // Pre load the tokens | 519 // Pre load the tokens |
| 519 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 520 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
| 520 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 521 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
| 521 profile_.get(), NULL); | 522 profile_.get(), NULL); |
| 522 CreateSyncService(); | 523 CreateSyncService(); |
| 523 | 524 |
| 524 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 525 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
| 525 | 526 |
| 526 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 527 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
| 527 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 528 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
| 528 GaiaConstants::kSyncService, "sync_token"); | 529 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
| 529 sync_->fail_initial_download(); | 530 sync_->fail_initial_download(); |
| 530 | 531 |
| 532 sync_->SetSetupInProgress(true); |
| 531 sync_->Initialize(); | 533 sync_->Initialize(); |
| 534 sync_->SetSetupInProgress(false); |
| 532 EXPECT_FALSE(sync_->sync_initialized()); | 535 EXPECT_FALSE(sync_->sync_initialized()); |
| 533 EXPECT_FALSE(sync_->GetBackendForTest()); | 536 EXPECT_TRUE(sync_->GetBackendForTest()); |
| 534 } | 537 } |
| OLD | NEW |