Home | History | Annotate | Download | only in profiles
      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/profiles/profile_avatar_downloader.h"
      6 
      7 #include "base/files/file_path.h"
      8 #include "chrome/browser/browser_process.h"
      9 #include "chrome/browser/profiles/profile.h"
     10 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
     11 #include "chrome/browser/profiles/profile_info_cache.h"
     12 #include "net/base/load_flags.h"
     13 
     14 namespace {
     15 const char kHighResAvatarDownloadUrlPrefix[] =
     16     "http://www.gstatic.com/chrome/profile_avatars/";
     17 }
     18 
     19 ProfileAvatarDownloader::ProfileAvatarDownloader(
     20     size_t icon_index,
     21     const base::FilePath& profile_path,
     22     ProfileInfoCache* cache)
     23     : icon_index_(icon_index),
     24       profile_path_(profile_path),
     25       cache_(cache) {
     26   GURL url(std::string(kHighResAvatarDownloadUrlPrefix) +
     27            profiles::GetDefaultAvatarIconFileNameAtIndex(icon_index));
     28   fetcher_.reset(new chrome::BitmapFetcher(url, this));
     29 }
     30 
     31 ProfileAvatarDownloader::~ProfileAvatarDownloader() {
     32 }
     33 
     34 void ProfileAvatarDownloader::Start() {
     35   // In unit tests, the browser process can return a NULL request context.
     36   net::URLRequestContextGetter* request_context =
     37       g_browser_process->system_request_context();
     38   if (request_context)
     39     fetcher_->Start(
     40         request_context,
     41         std::string(),
     42         net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE,
     43         net::LOAD_NORMAL);
     44 }
     45 
     46 // BitmapFetcherDelegate overrides.
     47 void ProfileAvatarDownloader::OnFetchComplete(const GURL url,
     48                                               const SkBitmap* bitmap) {
     49   if (!bitmap || !cache_)
     50     return;
     51 
     52   // Decode the downloaded bitmap. Ownership of the image is taken by |cache_|.
     53   gfx::Image image = gfx::Image::CreateFrom1xBitmap(*bitmap);
     54   cache_->SaveAvatarImageAtPath(&image,
     55       profiles::GetDefaultAvatarIconFileNameAtIndex(icon_index_),
     56       profiles::GetPathOfHighResAvatarAtIndex(icon_index_),
     57       profile_path_);
     58 }
     59