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 14namespace { 15const char kHighResAvatarDownloadUrlPrefix[] = 16 "http://www.gstatic.com/chrome/profile_avatars/"; 17} 18 19ProfileAvatarDownloader::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 31ProfileAvatarDownloader::~ProfileAvatarDownloader() { 32} 33 34void 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. 47void 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