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 17class Profile; 18class 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. 22class 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