text: // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #ifndef CHROME_BROWSER_PROFILES_PROFILE_DOWNLOADER_DELEGATE_H_
  #define CHROME_BROWSER_PROFILES_PROFILE_DOWNLOADER_DELEGATE_H_
  
  #include <string>
  
  #include "base/basictypes.h"
  #include "base/string16.h"
  
  class Profile;
  class ProfileDownloader;
  
  // Reports on success or failure of Profile download. It is OK to delete the
  // |ProfileImageDownloader| instance in any of these handlers.
  class ProfileDownloaderDelegate {
   public:
    // Error codes passed to OnProfileDownloadFailure.
    enum FailureReason {
      TOKEN_ERROR,         // Cannot fetch OAuth2 token.
      NETWORK_ERROR,       // Network failure while downloading profile.
      SERVICE_ERROR,       // Service returned an error or malformed reply.
      IMAGE_DECODE_FAILED  // Cannot decode fetched image.
    };
  
    virtual ~ProfileDownloaderDelegate() {}
  
    // Whether the delegate need profile picture to be downloaded.
    virtual bool NeedsProfilePicture() const = 0;
  
    // Returns the desired side length of the profile image. If 0, returns image
    // of the originally uploaded size.
    virtual int GetDesiredImageSideLength() const = 0;
  
    // Returns the cached URL. If the cache URL matches the new image URL
    // the image will not be downloaded. Return an empty string when there is no
    // cached URL.
    virtual std::string GetCachedPictureURL() const = 0;
  
    // Returns the browser profile associated with this download request.
    virtual Profile* GetBrowserProfile() = 0;
  
    // Called when the profile download has completed successfully. Delegate can
    // query the downloader for the picture and full name.
    virtual void OnProfileDownloadSuccess(ProfileDownloader* downloader) = 0;
  
    // Called when the profile download has failed.
    virtual void OnProfileDownloadFailure(
        ProfileDownloader* downloader,
        ProfileDownloaderDelegate::FailureReason reason) = 0;
  };
  
  #endif  // CHROME_BROWSER_PROFILES_PROFILE_DOWNLOADER_DELEGATE_H_
  