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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_PROFILES_GAIA_INFO_UPDATE_SERVICE_H_ 6 #define CHROME_BROWSER_PROFILES_GAIA_INFO_UPDATE_SERVICE_H_ 7 8 #include "base/compiler_specific.h" 9 #include "base/gtest_prod_util.h" 10 #include "base/memory/scoped_ptr.h" 11 #include "base/timer/timer.h" 12 #include "chrome/browser/profiles/profile_downloader.h" 13 #include "chrome/browser/profiles/profile_downloader_delegate.h" 14 #include "components/keyed_service/core/keyed_service.h" 15 #include "components/signin/core/browser/signin_manager.h" 16 17 class Profile; 18 class ProfileDownloader; 19 20 // This service kicks off a download of the user's name and profile picture. 21 // The results are saved in the profile info cache. 22 class GAIAInfoUpdateService : public KeyedService, 23 public ProfileDownloaderDelegate, 24 public SigninManagerBase::Observer { 25 public: 26 explicit GAIAInfoUpdateService(Profile* profile); 27 virtual ~GAIAInfoUpdateService(); 28 29 // Updates the GAIA info for the profile associated with this instance. 30 virtual void Update(); 31 32 // Checks if downloading GAIA info for the given profile is allowed. 33 static bool ShouldUseGAIAProfileInfo(Profile* profile); 34 35 // ProfileDownloaderDelegate: 36 virtual bool NeedsProfilePicture() const OVERRIDE; 37 virtual int GetDesiredImageSideLength() const OVERRIDE; 38 virtual Profile* GetBrowserProfile() OVERRIDE; 39 virtual std::string GetCachedPictureURL() const OVERRIDE; 40 virtual void OnProfileDownloadSuccess(ProfileDownloader* downloader) OVERRIDE; 41 virtual void OnProfileDownloadFailure( 42 ProfileDownloader* downloader, 43 ProfileDownloaderDelegate::FailureReason reason) OVERRIDE; 44 45 // Overridden from KeyedService: 46 virtual void Shutdown() OVERRIDE; 47 48 private: 49 FRIEND_TEST_ALL_PREFIXES(GAIAInfoUpdateServiceTest, ScheduleUpdate); 50 51 void OnUsernameChanged(const std::string& username); 52 void ScheduleNextUpdate(); 53 54 // Overridden from SigninManagerBase::Observer: 55 virtual void GoogleSigninSucceeded(const std::string& account_id, 56 const std::string& username, 57 const std::string& password) OVERRIDE; 58 virtual void GoogleSignedOut(const std::string& account_id, 59 const std::string& username) OVERRIDE; 60 61 Profile* profile_; 62 scoped_ptr<ProfileDownloader> profile_image_downloader_; 63 base::Time last_updated_; 64 base::OneShotTimer<GAIAInfoUpdateService> timer_; 65 66 DISALLOW_COPY_AND_ASSIGN(GAIAInfoUpdateService); 67 }; 68 69 #endif // CHROME_BROWSER_PROFILES_GAIA_INFO_UPDATE_SERVICE_H_ 70