• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
ProfileAvatarDownloader(size_t icon_index,const base::FilePath & profile_path,ProfileInfoCache * cache)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 
~ProfileAvatarDownloader()31 ProfileAvatarDownloader::~ProfileAvatarDownloader() {
32 }
33 
Start()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.
OnFetchComplete(const GURL url,const SkBitmap * bitmap)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