1// Copyright 2014 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_SUPERVISED_USER_CUSTODIAN_PROFILE_DOWNLOADER_SERVICE_H_
6#define CHROME_BROWSER_SUPERVISED_USER_CUSTODIAN_PROFILE_DOWNLOADER_SERVICE_H_
7
8#include "base/callback.h"
9#include "chrome/browser/profiles/profile_downloader.h"
10#include "chrome/browser/profiles/profile_downloader_delegate.h"
11#include "components/keyed_service/core/keyed_service.h"
12
13class CustodianProfileDownloaderService : public KeyedService,
14                                          public ProfileDownloaderDelegate {
15 public:
16  // Callback for DownloadProfile() below. If the GAIA profile download is
17  // successful, the profile's full (display) name will be returned.
18  typedef base::Callback<void(const base::string16& /* full name */)>
19      DownloadProfileCallback;
20
21  virtual ~CustodianProfileDownloaderService();
22
23  // KeyedService:
24  virtual void Shutdown() OVERRIDE;
25
26  // Downloads the GAIA account information for the |custodian_profile_|.
27  // This is a best-effort attempt with no error reporting nor timeout.
28  // If the download is successful, the profile's full (display) name will
29  // be returned via the callback. If the download fails or never completes,
30  // the callback will not be called.
31  void DownloadProfile(const DownloadProfileCallback& callback);
32
33  // ProfileDownloaderDelegate:
34  virtual bool NeedsProfilePicture() const OVERRIDE;
35  virtual int GetDesiredImageSideLength() const OVERRIDE;
36  virtual std::string GetCachedPictureURL() const OVERRIDE;
37  virtual Profile* GetBrowserProfile() OVERRIDE;
38  virtual void OnProfileDownloadSuccess(ProfileDownloader* downloader) OVERRIDE;
39  virtual void OnProfileDownloadFailure(
40      ProfileDownloader* downloader,
41      ProfileDownloaderDelegate::FailureReason reason) OVERRIDE;
42
43 private:
44  friend class CustodianProfileDownloaderServiceFactory;
45  // Use |CustodianProfileDownloaderServiceFactory::GetForProfile(...)| to
46  // get instances of this service.
47  explicit CustodianProfileDownloaderService(Profile* custodian_profile);
48
49  scoped_ptr<ProfileDownloader> profile_downloader_;
50  DownloadProfileCallback download_callback_;
51
52  // Owns us via the KeyedService mechanism.
53  Profile* custodian_profile_;
54
55  std::string last_downloaded_profile_email_;
56  std::string in_progress_profile_email_;
57};
58
59#endif  // CHROME_BROWSER_SUPERVISED_USER_CUSTODIAN_PROFILE_DOWNLOADER_SERVICE_H_
60