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)#ifndef CHROME_BROWSER_PROFILES_GAIA_INFO_UPDATE_SERVICE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_PROFILES_GAIA_INFO_UPDATE_SERVICE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_downloader.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_downloader_delegate.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "components/signin/core/browser/signin_manager.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileDownloader; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This service kicks off a download of the user's name and profile picture. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The results are saved in the profile info cache. 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass GAIAInfoUpdateService : public KeyedService, 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public ProfileDownloaderDelegate, 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public SigninManagerBase::Observer { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit GAIAInfoUpdateService(Profile* profile); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~GAIAInfoUpdateService(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates the GAIA info for the profile associated with this instance. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Update(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks if downloading GAIA info for the given profile is allowed. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool ShouldUseGAIAProfileInfo(Profile* profile); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ProfileDownloaderDelegate: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool NeedsProfilePicture() const OVERRIDE; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetDesiredImageSideLength() const OVERRIDE; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual Profile* GetBrowserProfile() OVERRIDE; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetCachedPictureURL() const OVERRIDE; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnProfileDownloadSuccess(ProfileDownloader* downloader) OVERRIDE; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnProfileDownloadFailure( 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileDownloader* downloader, 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileDownloaderDelegate::FailureReason reason) OVERRIDE; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Overridden from KeyedService: 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void Shutdown() OVERRIDE; 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(GAIAInfoUpdateServiceTest, ScheduleUpdate); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void OnUsernameChanged(const std::string& username); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ScheduleNextUpdate(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Overridden from SigninManagerBase::Observer: 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void GoogleSigninSucceeded(const std::string& account_id, 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& username, 57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& password) OVERRIDE; 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void GoogleSignedOut(const std::string& account_id, 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& username) OVERRIDE; 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ProfileDownloader> profile_image_downloader_; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_updated_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::OneShotTimer<GAIAInfoUpdateService> timer_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(GAIAInfoUpdateService); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_PROFILES_GAIA_INFO_UPDATE_SERVICE_H_ 70