profile_sync_service_startup_unittest.cc revision a3f7b4e666c476898878fa745f637129375cd889
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 10a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/run_loop.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/signin/fake_signin_manager.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/signin/oauth2_token_service.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_manager.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/token_service.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/token_service_factory.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/data_type_manager.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/data_type_manager_mock.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_components_factory_mock.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_test_util.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/sync_prefs.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test_profile_sync_service.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_service.h" 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_source.h" 31a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h" 32a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/test/test_utils.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_auth_consumer.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_constants.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::DataTypeManager; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::DataTypeManagerMock; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::AnyNumber; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::DoAll; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::InvokeArgument; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Mock; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Return; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P(InvokeOnConfigureStart, pss) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestProfileSyncService* service = static_cast<TestProfileSyncService*>(pss); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->OnConfigureStart(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P2(InvokeOnConfigureDone, pss, result) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestProfileSyncService* service = static_cast<TestProfileSyncService*>(pss); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManager::ConfigureResult configure_result = 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DataTypeManager::ConfigureResult>(result); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->OnConfigureDone(configure_result); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FakeTokenService : public TokenService { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FakeTokenService() {} 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~FakeTokenService() {} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void LoadTokensFromDB() OVERRIDE { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_tokens_loaded(true); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::current()->Notify( 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_TOKEN_LOADING_FINISHED, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Source<TokenService>(this), 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::NoDetails()); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileSyncServiceStartupTest : public testing::Test { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncServiceStartupTest() 76a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch : thread_bundle_(content::TestBrowserThreadBundle::REAL_DB_THREAD | 77a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch content::TestBrowserThreadBundle::REAL_FILE_THREAD | 78a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch content::TestBrowserThreadBundle::REAL_IO_THREAD), 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_(new TestingProfile), 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_(NULL) {} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ProfileSyncServiceStartupTest() { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 86a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#if defined(OS_CHROMEOS) 87a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetInstance()->SetTestingFactory( 88a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) profile_.get(), FakeSigninManagerBase::Build); 89a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#else 90a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetInstance()->SetTestingFactory( 91a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) profile_.get(), FakeSigninManager::Build); 92a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#endif 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->RemoveObserver(&observer_); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileSyncServiceFactory::GetInstance()->SetTestingFactory( 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_.get(), NULL); 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) profile_.get(), NULL); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pump messages posted by the sync core thread (which may end up 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // posting on the IO thread). 105a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 106a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch content::RunAllPendingInMessageLoop(content::BrowserThread::IO); 107a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static BrowserContextKeyedService* BuildService( 11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::BrowserContext* profile) { 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new TestProfileSyncService( 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ProfileSyncComponentsFactoryMock(), 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static_cast<Profile*>(profile), 115a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile(static_cast<Profile*>(profile)), 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService::MANUAL_START, 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 120a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) void CreateSyncService() { 1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( 1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) profile_.get(), FakeOAuth2TokenService::BuildTokenService); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_ = static_cast<TestProfileSyncService*>( 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_.get(), BuildService)); 126a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) sync_->AddObserver(&observer_); 127a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) sync_->set_synchronous_sync_configuration(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 130a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) protected: 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManagerMock* SetUpDataTypeManager() { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*sync_->components_factory_mock(), 134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateDataTypeManager(_, _, _, _, _, _)). 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillOnce(Return(data_type_manager)); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return data_type_manager; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 139a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch content::TestBrowserThreadBundle thread_bundle_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestProfileSyncService* sync_; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncServiceObserverMock observer_; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 147a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) virtual void SetUp() { 148a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ProfileSyncServiceStartupTest::SetUp(); 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) profile_.get(), FakeOAuth2TokenService::BuildTokenService); 151a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) sync_ = static_cast<TestProfileSyncService*>( 152a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( 153a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) profile_.get(), BuildCrosService)); 154a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) sync_->AddObserver(&observer_); 155a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) sync_->set_synchronous_sync_configuration(); 156a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static BrowserContextKeyedService* BuildCrosService( 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) { 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SigninManagerBase* signin = 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile); 163a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) profile->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) signin->Initialize(profile, NULL); 166a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_FALSE(signin->GetAuthenticatedUsername().empty()); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new TestProfileSyncService( 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new ProfileSyncComponentsFactoryMock(), 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile, 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) signin, 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProfileSyncService::AUTO_START, 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)BrowserContextKeyedService* BuildFakeTokenService( 17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::BrowserContext* profile) { 178a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return new FakeTokenService(); 179a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 181a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, StartFirstTime) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We've never completed startup. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); 184a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile( 18590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get())->Initialize(profile_.get(), NULL); 186a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 187a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 188a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should not actually start, rather just clean things up and wait 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be enabled. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Preferences should be back to defaults. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(data_type_manager); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Then start things up. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, state()). 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillOnce(Return(DataTypeManager::CONFIGURED)). 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillOnce(Return(DataTypeManager::CONFIGURED)); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Stop()).Times(1); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->SetSetupInProgress(true); 209a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 210a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Simulate successful signin as test_user. 211a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch sync_->signin()->SetAuthenticatedUsername("test_user@gmail.com"); 214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GoogleServiceSigninSuccessDetails details("test_user@gmail.com", ""); 215a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::NotificationService::current()->Notify( 216a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, 217a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::Source<Profile>(profile_.get()), 218a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::Details<const GoogleServiceSigninSuccessDetails>(&details)); 219a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 220a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Create some tokens in the token service. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kSyncService, "token"); 225a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 226a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Simulate the UI telling sync it has finished setting up. 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->SetSetupInProgress(false); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(sync_->ShouldPushChanges()); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// TODO(pavely): Reenable test once android is switched to oauth2. 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) { 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // We've never completed startup. 234a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); 235a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile( 23690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get())->Initialize(profile_.get(), NULL); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TokenService* token_service = static_cast<TokenService*>( 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_.get(), BuildFakeTokenService)); 240a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should not actually start, rather just clean things up and wait 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be enabled. 2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*sync_->components_factory_mock(), 2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreateDataTypeManager(_, _, _, _, _, _)).Times(0); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(sync_->GetBackendForTest()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Preferences should be back to defaults. 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Then start things up. 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->SetSetupInProgress(true); 256a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 2577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Simulate successful signin as test_user. 258a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch sync_->signin()->SetAuthenticatedUsername("test_user@gmail.com"); 261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GoogleServiceSigninSuccessDetails details("test_user@gmail.com", ""); 262a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::NotificationService::current()->Notify( 263a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, 264a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::Source<Profile>(profile_.get()), 265a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::Details<const GoogleServiceSigninSuccessDetails>(&details)); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens. 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) token_service->LoadTokensFromDB(); 268a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->SetSetupInProgress(false); 2707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // ProfileSyncService should try to start by requesting access token. 2717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This request should fail as login token was not issued to TokenService. 2727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_->ShouldPushChanges()); 2737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, 2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) sync_->GetAuthError().state()); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// TODO(pavely): Reenable test once android is switched to oauth2. 2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartInvalidCredentials) { 279a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 281a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile( 28290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get())->Initialize(profile_.get(), NULL); 283a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); 2867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Issue login token so that ProfileSyncServer tries to initialize backend. 2877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 2887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tell the backend to stall while downloading control types (simulating an 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // auth error). 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->fail_initial_download(); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(sync_->GetBackendForTest()); 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(sync_->sync_initialized()); 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mock::VerifyAndClearExpectations(data_type_manager); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Update the credentials, unstalling the backend. 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*data_type_manager, state()). 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WillRepeatedly(Return(DataTypeManager::CONFIGURED)); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*data_type_manager, Stop()).Times(1); 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->SetSetupInProgress(true); 307a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 308a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Simulate successful signin. 309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GoogleServiceSigninSuccessDetails details("test_user@gmail.com", 310eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string()); 311a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::NotificationService::current()->Notify( 312a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, 313a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::Source<Profile>(profile_.get()), 314a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::Details<const GoogleServiceSigninSuccessDetails>(&details)); 315a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 3167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 3177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->SetSetupInProgress(false); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify we successfully finish startup and configuration. 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(sync_->ShouldPushChanges()); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*sync_->components_factory_mock(), 326868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateDataTypeManager(_, _, _, _, _, _)).Times(0); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TokenService* token_service = static_cast<TokenService*>( 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_.get(), BuildFakeTokenService)); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sync should not start because there are no tokens yet. 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(sync_->ShouldPushChanges()); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(sync_->GetBackendForTest()); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) token_service->LoadTokensFromDB(); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->SetSetupInProgress(false); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sync should not start because there are still no tokens. 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(sync_->ShouldPushChanges()); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(sync_->GetBackendForTest()); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, state()). 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillRepeatedly(Return(DataTypeManager::CONFIGURED)); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Stop()).Times(1); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 3557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 3567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GaiaConstants::kSyncService, "sync_token"); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(sync_->ShouldPushChanges()); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, StartNormal) { 363a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Pre load the tokens 364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 365eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 366a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile_.get())->Initialize( 36790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get(), NULL); 368a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, state()). 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillRepeatedly(Return(DataTypeManager::CONFIGURED)); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Stop()).Times(1); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 3777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 3787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GaiaConstants::kSyncService, "sync_token"); 380a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can recover from a case where a bug in the code resulted in 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OnUserChoseDatatypes not being properly called and datatype preferences 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// therefore being left unset. 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear the datatype preference fields (simulating bug 154940). 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSet user_types = syncer::UserTypes(); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (syncer::ModelTypeSet::Iterator iter = user_types.First(); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter.Good(); iter.Inc()) { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->ClearPref( 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_sync::SyncPrefs::GetPrefNameForDataType(iter.Get())); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pre load the tokens 398eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 399eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 400a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile_.get())->Initialize( 40190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get(), NULL); 402a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 403a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 404a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)); 405a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_CALL(*data_type_manager, state()). 406a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) WillRepeatedly(Return(DataTypeManager::CONFIGURED)); 407a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_CALL(*data_type_manager, Stop()).Times(1); 408a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 409a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 4117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 4127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GaiaConstants::kSyncService, "sync_token"); 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kSyncKeepEverythingSynced)); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that the recovery of datatype preferences doesn't overwrite a valid 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// case where only bookmarks are enabled. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) { 423a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Explicitly set Keep Everything Synced to false and have only bookmarks 424a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // enabled. 425a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false); 426a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 427a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Pre load the tokens 428eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 430a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile_.get())->Initialize( 43190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get(), NULL); 432a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, state()). 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillRepeatedly(Return(DataTypeManager::CONFIGURED)); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Stop()).Times(1); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 4407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 4417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GaiaConstants::kSyncService, "sync_token"); 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kSyncKeepEverythingSynced)); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) { 450a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Service should not be started by Initialize() since it's managed. 451eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 452eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 453a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile_.get())->Initialize( 45490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get(), NULL); 455a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 456a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable sync through policy. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*sync_->components_factory_mock(), 460868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateDataTypeManager(_, _, _, _, _, _)).Times(0); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 4647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { 469eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 470eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 471a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile_.get())->Initialize( 47290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get(), NULL); 473a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 4787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kSyncService, "token"); 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The service should stop when switching to managed mode. 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(data_type_manager); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, state()). 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillOnce(Return(DataTypeManager::CONFIGURED)); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Stop()).Times(1); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When switching back to unmanaged, the state should change, but the service 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should not start up automatically (kSyncSetupCompleted will be false). 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(data_type_manager); 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*sync_->components_factory_mock(), 495868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateDataTypeManager(_, _, _, _, _, _)).Times(0); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->ClearPref(prefs::kSyncManaged); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, StartFailure) { 501eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 502eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 503a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile_.get())->Initialize( 50490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get(), NULL); 505a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManager::ConfigureStatus status = DataTypeManager::ABORTED; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::SyncError error( 509eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FROM_HERE, 510eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch syncer::SyncError::DATATYPE_ERROR, 511eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "Association failed.", 512eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch syncer::BOOKMARKS); 513868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::map<syncer::ModelType, syncer::SyncError> errors; 514868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) errors[syncer::BOOKMARKS] = error; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataTypeManager::ConfigureResult result( 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status, 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSet(), 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors, 519868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) syncer::ModelTypeSet(), 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSet()); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, Configure(_, _)). 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillRepeatedly( 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DoAll(InvokeOnConfigureStart(sync_), 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InvokeOnConfigureDone(sync_, result))); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*data_type_manager, state()). 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillOnce(Return(DataTypeManager::STOPPED)); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 5297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 5307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 5317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kSyncService, "token"); 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(sync_->HasUnrecoverableError()); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { 537a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Pre load the tokens 538eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 539eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "test_user@gmail.com"); 540a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile_.get())->Initialize( 54190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_.get(), NULL); 542a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CreateSyncService(); 543a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 5487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 5497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 5507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaConstants::kSyncService, "token"); 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->fail_initial_download(); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) sync_->SetSetupInProgress(true); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_->Initialize(); 5557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) sync_->SetSetupInProgress(false); 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(sync_->sync_initialized()); 5577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(sync_->GetBackendForTest()); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 559