| Index: chrome/browser/sync/profile_sync_service_startup_unittest.cc
|
| diff --git a/chrome/browser/sync/profile_sync_service_startup_unittest.cc b/chrome/browser/sync/profile_sync_service_startup_unittest.cc
|
| index 6b3b6f5f7fe82f0e570b7330cb2bbd70e518f2ef..052ed6792283eea1a353053a824b7bebd29434a1 100644
|
| --- a/chrome/browser/sync/profile_sync_service_startup_unittest.cc
|
| +++ b/chrome/browser/sync/profile_sync_service_startup_unittest.cc
|
| @@ -82,9 +82,13 @@ class ProfileSyncServiceStartupTest : public testing::Test {
|
| file_thread_.Start();
|
| io_thread_.StartIOThread();
|
| profile_->CreateRequestContext();
|
| - CreateSyncService();
|
| - sync_->AddObserver(&observer_);
|
| - sync_->set_synchronous_sync_configuration();
|
| +#if defined(OS_CHROMEOS)
|
| + SigninManagerFactory::GetInstance()->SetTestingFactory(
|
| + profile_.get(), FakeSigninManagerBase::Build);
|
| +#else
|
| + SigninManagerFactory::GetInstance()->SetTestingFactory(
|
| + profile_.get(), FakeSigninManager::Build);
|
| +#endif
|
| }
|
|
|
| virtual void TearDown() {
|
| @@ -101,38 +105,24 @@ class ProfileSyncServiceStartupTest : public testing::Test {
|
| ui_loop_.RunUntilIdle();
|
| }
|
|
|
| - void Signin() {
|
| - sync_->signin()->SetAuthenticatedUsername("test_user");
|
| - profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
|
| - "test_user");
|
| - GoogleServiceSigninSuccessDetails details("test_user", "");
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
|
| - content::Source<Profile>(profile_.get()),
|
| - content::Details<const GoogleServiceSigninSuccessDetails>(&details));
|
| - }
|
| -
|
| static ProfileKeyedService* BuildService(content::BrowserContext* profile) {
|
| - SigninManagerBase* signin = static_cast<SigninManagerBase*>(
|
| - SigninManagerFactory::GetInstance()->SetTestingFactoryAndUse(
|
| - profile, FakeSigninManagerBase::Build));
|
| - signin->SetAuthenticatedUsername("test_user");
|
| return new TestProfileSyncService(
|
| new ProfileSyncComponentsFactoryMock(),
|
| static_cast<Profile*>(profile),
|
| - signin,
|
| + SigninManagerFactory::GetForProfile(static_cast<Profile*>(profile)),
|
| ProfileSyncService::MANUAL_START,
|
| true);
|
| }
|
|
|
| - protected:
|
| - // Overridden below by ProfileSyncServiceStartupCrosTest.
|
| - virtual void CreateSyncService() {
|
| + void CreateSyncService() {
|
| sync_ = static_cast<TestProfileSyncService*>(
|
| ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| profile_.get(), BuildService));
|
| + sync_->AddObserver(&observer_);
|
| + sync_->set_synchronous_sync_configuration();
|
| }
|
|
|
| + protected:
|
| DataTypeManagerMock* SetUpDataTypeManager() {
|
| DataTypeManagerMock* data_type_manager = new DataTypeManagerMock();
|
| EXPECT_CALL(*sync_->components_factory_mock(),
|
| @@ -153,12 +143,24 @@ class ProfileSyncServiceStartupTest : public testing::Test {
|
|
|
| class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest {
|
| public:
|
| + virtual void SetUp() {
|
| + ProfileSyncServiceStartupTest::SetUp();
|
| + sync_ = static_cast<TestProfileSyncService*>(
|
| + ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| + profile_.get(), BuildCrosService));
|
| + sync_->AddObserver(&observer_);
|
| + sync_->set_synchronous_sync_configuration();
|
| + }
|
| +
|
| static ProfileKeyedService* BuildCrosService(
|
| content::BrowserContext* context) {
|
| Profile* profile = static_cast<Profile*>(context);
|
| SigninManagerBase* signin =
|
| SigninManagerFactory::GetForProfile(profile);
|
| - signin->SetAuthenticatedUsername("test_user");
|
| + profile->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
|
| + "test_user");
|
| + signin->Initialize(profile);
|
| + EXPECT_FALSE(signin->GetAuthenticatedUsername().empty());
|
| return new TestProfileSyncService(
|
| new ProfileSyncComponentsFactoryMock(),
|
| profile,
|
| @@ -166,24 +168,20 @@ class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest {
|
| ProfileSyncService::AUTO_START,
|
| true);
|
| }
|
| -
|
| - protected:
|
| - virtual void CreateSyncService() OVERRIDE {
|
| - sync_ = static_cast<TestProfileSyncService*>(
|
| - ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| - profile_.get(), BuildCrosService));
|
| - }
|
| };
|
|
|
| -TEST_F(ProfileSyncServiceStartupTest, StartFirstTime) {
|
| - DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| - EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
|
| +ProfileKeyedService* BuildFakeTokenService(content::BrowserContext* profile) {
|
| + return new FakeTokenService();
|
| +}
|
|
|
| +TEST_F(ProfileSyncServiceStartupTest, StartFirstTime) {
|
| // We've never completed startup.
|
| profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted);
|
| - // Make sure SigninManager doesn't think we're signed in (undoes the call to
|
| - // SetAuthenticatedUsername() in CreateSyncService()).
|
| - SigninManagerFactory::GetForProfile(profile_.get())->SignOut();
|
| + SigninManagerFactory::GetForProfile(
|
| + profile_.get())->Initialize(profile_.get());
|
| + CreateSyncService();
|
| + DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| + EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
|
|
|
| // Should not actually start, rather just clean things up and wait
|
| // to be enabled.
|
| @@ -203,34 +201,40 @@ TEST_F(ProfileSyncServiceStartupTest, StartFirstTime) {
|
| EXPECT_CALL(*data_type_manager, Stop()).Times(1);
|
| EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
|
|
| - // Create some tokens in the token service; the service will startup when
|
| - // it is notified that tokens are available.
|
| sync_->SetSetupInProgress(true);
|
| - Signin();
|
| +
|
| + // Simulate successful signin as test_user.
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
|
| + "test_user");
|
| + sync_->signin()->SetAuthenticatedUsername("test_user");
|
| + GoogleServiceSigninSuccessDetails details("test_user", "");
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
|
| + content::Source<Profile>(profile_.get()),
|
| + content::Details<const GoogleServiceSigninSuccessDetails>(&details));
|
| +
|
| + // Create some tokens in the token service.
|
| TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
|
| GaiaConstants::kSyncService, "sync_token");
|
| TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
|
| GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token");
|
| +
|
| + // Simulate the UI telling sync it has finished setting up.
|
| sync_->SetSetupInProgress(false);
|
| EXPECT_TRUE(sync_->ShouldPushChanges());
|
| }
|
|
|
| -ProfileKeyedService* BuildFakeTokenService(content::BrowserContext* profile) {
|
| - return new FakeTokenService();
|
| -}
|
| -
|
| TEST_F(ProfileSyncServiceStartupTest, StartNoCredentials) {
|
| - DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| - EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
|
| + // We've never completed startup.
|
| + profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted);
|
| + SigninManagerFactory::GetForProfile(
|
| + profile_.get())->Initialize(profile_.get());
|
| TokenService* token_service = static_cast<TokenService*>(
|
| TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| profile_.get(), BuildFakeTokenService));
|
| -
|
| - // We've never completed startup.
|
| - profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted);
|
| - // Make sure SigninManager doesn't think we're signed in (undoes the call to
|
| - // SetAuthenticatedUsername() in CreateSyncService()).
|
| - SigninManagerFactory::GetForProfile(profile_.get())->SignOut();
|
| + CreateSyncService();
|
| + DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| + EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
|
|
|
| // Should not actually start, rather just clean things up and wait
|
| // to be enabled.
|
| @@ -252,15 +256,30 @@ TEST_F(ProfileSyncServiceStartupTest, StartNoCredentials) {
|
| EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
|
|
| sync_->SetSetupInProgress(true);
|
| - Signin();
|
| +
|
| +// Simulate successful signin as test_user.
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
|
| + "test_user");
|
| + sync_->signin()->SetAuthenticatedUsername("test_user");
|
| + GoogleServiceSigninSuccessDetails details("test_user", "");
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
|
| + content::Source<Profile>(profile_.get()),
|
| + content::Details<const GoogleServiceSigninSuccessDetails>(&details));
|
| // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens.
|
| token_service->LoadTokensFromDB();
|
| +
|
| sync_->SetSetupInProgress(false);
|
| // Backend should initialize using a bogus GAIA token for credentials.
|
| EXPECT_TRUE(sync_->ShouldPushChanges());
|
| }
|
|
|
| TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) {
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
|
| + "test_user");
|
| + SigninManagerFactory::GetForProfile(
|
| + profile_.get())->Initialize(profile_.get());
|
| + CreateSyncService();
|
| DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
|
| TokenService* token_service = static_cast<TokenService*>(
|
| @@ -286,7 +305,14 @@ TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) {
|
| EXPECT_CALL(*data_type_manager, Stop()).Times(1);
|
| EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
| sync_->SetSetupInProgress(true);
|
| - Signin();
|
| +
|
| + // Simulate successful signin.
|
| + GoogleServiceSigninSuccessDetails details("test_user", std::string());
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
|
| + content::Source<Profile>(profile_.get()),
|
| + content::Details<const GoogleServiceSigninSuccessDetails>(&details));
|
| +
|
| token_service->IssueAuthTokenForTest(
|
| GaiaConstants::kSyncService, "sync_token");
|
| sync_->SetSetupInProgress(false);
|
| @@ -333,18 +359,21 @@ TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) {
|
| }
|
|
|
| TEST_F(ProfileSyncServiceStartupTest, StartNormal) {
|
| + // Pre load the tokens
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| + SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
|
| + profile_.get());
|
| + CreateSyncService();
|
| DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| EXPECT_CALL(*data_type_manager, Configure(_, _));
|
| EXPECT_CALL(*data_type_manager, state()).
|
| WillRepeatedly(Return(DataTypeManager::CONFIGURED));
|
| EXPECT_CALL(*data_type_manager, Stop()).Times(1);
|
| -
|
| EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
|
|
| - // Pre load the tokens
|
| TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
|
| GaiaConstants::kSyncService, "sync_token");
|
| - profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| +
|
| sync_->Initialize();
|
| }
|
|
|
| @@ -352,14 +381,6 @@ TEST_F(ProfileSyncServiceStartupTest, StartNormal) {
|
| // OnUserChoseDatatypes not being properly called and datatype preferences
|
| // therefore being left unset.
|
| TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) {
|
| - DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| - EXPECT_CALL(*data_type_manager, Configure(_, _));
|
| - EXPECT_CALL(*data_type_manager, state()).
|
| - WillRepeatedly(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(*data_type_manager, Stop()).Times(1);
|
| -
|
| - EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
| -
|
| // Clear the datatype preference fields (simulating bug 154940).
|
| profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced);
|
| syncer::ModelTypeSet user_types = syncer::UserTypes();
|
| @@ -370,9 +391,19 @@ TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) {
|
| }
|
|
|
| // Pre load the tokens
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| + SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
|
| + profile_.get());
|
| + CreateSyncService();
|
| + DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| + EXPECT_CALL(*data_type_manager, Configure(_, _));
|
| + EXPECT_CALL(*data_type_manager, state()).
|
| + WillRepeatedly(Return(DataTypeManager::CONFIGURED));
|
| + EXPECT_CALL(*data_type_manager, Stop()).Times(1);
|
| + EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
| +
|
| TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
|
| GaiaConstants::kSyncService, "sync_token");
|
| - profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| sync_->Initialize();
|
|
|
| EXPECT_TRUE(profile_->GetPrefs()->GetBoolean(
|
| @@ -382,22 +413,23 @@ TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) {
|
| // Verify that the recovery of datatype preferences doesn't overwrite a valid
|
| // case where only bookmarks are enabled.
|
| TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) {
|
| + // Explicitly set Keep Everything Synced to false and have only bookmarks
|
| + // enabled.
|
| + profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false);
|
| +
|
| + // Pre load the tokens
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| + SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
|
| + profile_.get());
|
| + CreateSyncService();
|
| DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| EXPECT_CALL(*data_type_manager, Configure(_, _));
|
| EXPECT_CALL(*data_type_manager, state()).
|
| WillRepeatedly(Return(DataTypeManager::CONFIGURED));
|
| EXPECT_CALL(*data_type_manager, Stop()).Times(1);
|
| -
|
| EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
| -
|
| - // Explicitly set Keep Everything Synced to false and have only bookmarks
|
| - // enabled.
|
| - profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false);
|
| -
|
| - // Pre load the tokens
|
| TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
|
| GaiaConstants::kSyncService, "sync_token");
|
| - profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| sync_->Initialize();
|
|
|
| EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(
|
| @@ -405,28 +437,33 @@ TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) {
|
| }
|
|
|
| TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) {
|
| + // Service should not be started by Initialize() since it's managed.
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| + SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
|
| + profile_.get());
|
| + CreateSyncService();
|
| +
|
| // Disable sync through policy.
|
| profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true);
|
| -
|
| EXPECT_CALL(*sync_->components_factory_mock(),
|
| CreateDataTypeManager(_, _, _, _, _)).Times(0);
|
| EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
|
|
| - // Service should not be started by Initialize() since it's managed.
|
| TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
|
| GaiaConstants::kSyncService, "sync_token");
|
| - profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| sync_->Initialize();
|
| }
|
|
|
| TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) {
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| + SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
|
| + profile_.get());
|
| + CreateSyncService();
|
| DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| EXPECT_CALL(*data_type_manager, Configure(_, _));
|
| EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
| -
|
| TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
|
| GaiaConstants::kSyncService, "sync_token");
|
| - profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| sync_->Initialize();
|
|
|
| // The service should stop when switching to managed mode.
|
| @@ -447,6 +484,10 @@ TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) {
|
| }
|
|
|
| TEST_F(ProfileSyncServiceStartupTest, StartFailure) {
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| + SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
|
| + profile_.get());
|
| + CreateSyncService();
|
| DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
|
| DataTypeManager::ConfigureStatus status = DataTypeManager::ABORTED;
|
| syncer::SyncError error(
|
| @@ -464,22 +505,23 @@ TEST_F(ProfileSyncServiceStartupTest, StartFailure) {
|
| InvokeOnConfigureDone(sync_, result)));
|
| EXPECT_CALL(*data_type_manager, state()).
|
| WillOnce(Return(DataTypeManager::STOPPED));
|
| -
|
| EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
| -
|
| TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
|
| GaiaConstants::kSyncService, "sync_token");
|
| - profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| sync_->Initialize();
|
| EXPECT_TRUE(sync_->HasUnrecoverableError());
|
| }
|
|
|
| TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) {
|
| + // Pre load the tokens
|
| + profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
|
| + SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
|
| + profile_.get());
|
| + CreateSyncService();
|
| +
|
| profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted);
|
|
|
| EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
|
| -
|
| - // Preload the tokens.
|
| TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
|
| GaiaConstants::kSyncService, "sync_token");
|
| sync_->fail_initial_download();
|
|
|