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