Home | History | Annotate | Download | only in supervised_user
      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 #include "chrome/browser/supervised_user/custodian_profile_downloader_service.h"
      6 
      7 #include "base/prefs/pref_service.h"
      8 #include "chrome/browser/profiles/profile.h"
      9 #include "chrome/common/pref_names.h"
     10 #include "google_apis/gaia/gaia_auth_util.h"
     11 
     12 CustodianProfileDownloaderService::CustodianProfileDownloaderService(
     13     Profile* custodian_profile)
     14         : custodian_profile_(custodian_profile) {
     15 }
     16 
     17 CustodianProfileDownloaderService::~CustodianProfileDownloaderService() {}
     18 
     19 void CustodianProfileDownloaderService::Shutdown() {
     20   profile_downloader_.reset();
     21 }
     22 
     23 void CustodianProfileDownloaderService::DownloadProfile(
     24     const DownloadProfileCallback& callback) {
     25   // The user must be logged in.
     26   std::string username = custodian_profile_->GetPrefs()->GetString(
     27       prefs::kGoogleServicesUsername);
     28   if (username.empty())
     29     return;
     30 
     31   download_callback_ = callback;
     32   std::string current_email = custodian_profile_->GetProfileName();
     33   if (gaia::AreEmailsSame(last_downloaded_profile_email_, current_email)) {
     34     // Profile was previously downloaded successfully, use it as it is unlikely
     35     // that we will need to download it again.
     36     OnProfileDownloadSuccess(profile_downloader_.get());
     37     return;
     38   }
     39   // If another profile download is in progress, drop it. It's not worth
     40   // queueing them up, and more likely that the one that hasn't ended yet is
     41   // failing somehow than that the new one won't succeed.
     42   in_progress_profile_email_ = current_email;
     43   profile_downloader_.reset(new ProfileDownloader(this));
     44   profile_downloader_->Start();
     45 }
     46 
     47 bool CustodianProfileDownloaderService::NeedsProfilePicture() const {
     48   return false;
     49 }
     50 
     51 int CustodianProfileDownloaderService::GetDesiredImageSideLength() const {
     52   return 0;
     53 }
     54 
     55 std::string CustodianProfileDownloaderService::GetCachedPictureURL() const {
     56   return std::string();
     57 }
     58 
     59 Profile* CustodianProfileDownloaderService::GetBrowserProfile() {
     60   DCHECK(custodian_profile_);
     61   return custodian_profile_;
     62 }
     63 
     64 void CustodianProfileDownloaderService::OnProfileDownloadSuccess(
     65     ProfileDownloader* downloader) {
     66   download_callback_.Run(downloader->GetProfileFullName());
     67   download_callback_.Reset();
     68   last_downloaded_profile_email_ = in_progress_profile_email_;
     69 }
     70 
     71 void CustodianProfileDownloaderService::OnProfileDownloadFailure(
     72     ProfileDownloader* downloader,
     73     ProfileDownloaderDelegate::FailureReason reason) {
     74   // Ignore failures; proceed without the custodian's name.
     75   download_callback_.Reset();
     76   profile_downloader_.reset();
     77 }
     78