• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_CHROMEOS_LOGIN_USER_IMAGE_DOWNLOADER_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USER_IMAGE_DOWNLOADER_H_
7 #pragma once
8 
9 #include <string>
10 
11 #include "base/basictypes.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "chrome/browser/chromeos/login/image_decoder.h"
14 #include "chrome/common/net/url_fetcher.h"
15 
16 class ListValue;
17 
18 namespace chromeos {
19 
20 // Gets user image URL from user's Google Profile, downloads the image,
21 // executes image decode and calls UserManager to store image in a file with
22 // path to it stored in local state dictionary.
23 class UserImageDownloader : public URLFetcher::Delegate,
24                             public ImageDecoder::Delegate {
25  public:
26   // |auth_token| is a authentication token received in ClientLogin
27   // response, used for requests sent to Contacts API.
28   // Starts downloading the picture. Object is deleted as reference counted
29   // object.
30   UserImageDownloader(const std::string& username,
31                       const std::string& auth_token);
32 
33  private:
34   // It's a reference counted object, so destructor is private.
35   ~UserImageDownloader();
36 
37   // Overriden from URLFetcher::Delegate:
38   virtual void OnURLFetchComplete(const URLFetcher* source,
39                                   const GURL& url,
40                                   const net::URLRequestStatus& status,
41                                   int response_code,
42                                   const ResponseCookies& cookies,
43                                   const std::string& data);
44 
45   // Overriden from ImageDecoder::Delegate:
46   virtual void OnImageDecoded(const SkBitmap& decoded_image);
47 
48   // Parses received JSON data looking for user image url.
49   // If succeeded, returns true and stores the url in |image_url| parameter.
50   // Otherwise, returns false.
51   bool GetImageURL(const std::string& json_data, GURL* image_url) const;
52 
53   // Searches for image url in a list of contacts matching contact address
54   // with user email. Returns true and image url if succeeds, false
55   // otherwise.
56   bool GetImageURLFromEntries(ListValue* entry_list, GURL* image_url) const;
57 
58   // Checks if email list contains user email. Returns true if match is
59   // found.
60   bool IsUserEntry(ListValue* email_list) const;
61 
62   // Searches for image url in list of links for the found contact.
63   // Returns true and image url if succeeds, false otherwise.
64   bool GetImageURLFromLinks(ListValue* link_list, GURL* image_url) const;
65 
66   // Encodes user image in PNG format and saves the result to the file
67   // specified. Should work on IO thread.
68   void SaveImageAsPNG(const std::string& filename, const SkBitmap& image);
69 
70   // Fetcher for user's profile page.
71   scoped_ptr<URLFetcher> profile_fetcher_;
72 
73   // Username saved to use as a key for user picture in preferences.
74   std::string username_;
75 
76   // Authentication token to use for image download.
77   std::string auth_token_;
78 
79   DISALLOW_COPY_AND_ASSIGN(UserImageDownloader);
80 };
81 
82 }  // namespace chromeos
83 
84 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USER_IMAGE_DOWNLOADER_H_
85 
86