Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Side by Side Diff: chrome/browser/chromeos/login/user_image_loader.cc

Issue 10912019: Enable robust decoding of custom wallpaper and allow custom wallpaper on login page (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Check conflict. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/login/user_image_loader.h" 5 #include "chrome/browser/chromeos/login/user_image_loader.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 12 matching lines...) Expand all
23 23
24 UserImageLoader::ImageInfo::ImageInfo(int size, 24 UserImageLoader::ImageInfo::ImageInfo(int size,
25 const LoadedCallback& loaded_cb) 25 const LoadedCallback& loaded_cb)
26 : size(size), 26 : size(size),
27 loaded_cb(loaded_cb) { 27 loaded_cb(loaded_cb) {
28 } 28 }
29 29
30 UserImageLoader::ImageInfo::~ImageInfo() { 30 UserImageLoader::ImageInfo::~ImageInfo() {
31 } 31 }
32 32
33 UserImageLoader::UserImageLoader() 33 UserImageLoader::UserImageLoader(ImageDecoder::ImageCodec image_codec)
34 : target_message_loop_(NULL) { 34 : target_message_loop_(NULL),
35 image_codec_(image_codec) {
35 } 36 }
36 37
37 UserImageLoader::~UserImageLoader() { 38 UserImageLoader::~UserImageLoader() {
38 } 39 }
39 40
40 void UserImageLoader::Start(const std::string& filepath, 41 void UserImageLoader::Start(const std::string& filepath,
41 int size, 42 int size,
42 const LoadedCallback& loaded_cb) { 43 const LoadedCallback& loaded_cb) {
43 target_message_loop_ = MessageLoop::current(); 44 target_message_loop_ = MessageLoop::current();
44 45
45 ImageInfo image_info(size, loaded_cb); 46 ImageInfo image_info(size, loaded_cb);
46 BrowserThread::PostTask( 47 BrowserThread::PostTask(
47 BrowserThread::FILE, FROM_HERE, 48 BrowserThread::FILE, FROM_HERE,
48 base::Bind(&UserImageLoader::LoadImage, this, filepath, image_info)); 49 base::Bind(&UserImageLoader::LoadImage, this, filepath, image_info));
49 } 50 }
50 51
51 void UserImageLoader::LoadImage(const std::string& filepath, 52 void UserImageLoader::LoadImage(const std::string& filepath,
52 const ImageInfo& image_info) { 53 const ImageInfo& image_info) {
53 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 54 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
54 55
55 std::string image_data; 56 std::string image_data;
56 file_util::ReadFileToString(FilePath(filepath), &image_data); 57 file_util::ReadFileToString(FilePath(filepath), &image_data);
57 58
58 scoped_refptr<ImageDecoder> image_decoder = 59 scoped_refptr<ImageDecoder> image_decoder =
59 new ImageDecoder(this, image_data, ImageDecoder::DEFAULT_CODEC); 60 new ImageDecoder(this, image_data, image_codec_);
60 image_info_map_.insert(std::make_pair(image_decoder.get(), image_info)); 61 image_info_map_.insert(std::make_pair(image_decoder.get(), image_info));
61 image_decoder->Start(); 62 image_decoder->Start();
62 } 63 }
63 64
64 void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder, 65 void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder,
65 const SkBitmap& decoded_image) { 66 const SkBitmap& decoded_image) {
66 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 67 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
67 68
68 ImageInfoMap::iterator info_it = image_info_map_.find(decoder); 69 ImageInfoMap::iterator info_it = image_info_map_.find(decoder);
69 if (info_it == image_info_map_.end()) { 70 if (info_it == image_info_map_.end()) {
(...skipping 27 matching lines...) Expand all
97 target_message_loop_->PostTask( 98 target_message_loop_->PostTask(
98 FROM_HERE, 99 FROM_HERE,
99 base::Bind(image_info.loaded_cb, 100 base::Bind(image_info.loaded_cb,
100 UserImage(final_image_skia, decoder->get_image_data()))); 101 UserImage(final_image_skia, decoder->get_image_data())));
101 102
102 image_info_map_.erase(info_it); 103 image_info_map_.erase(info_it);
103 } 104 }
104 105
105 void UserImageLoader::OnDecodeImageFailed(const ImageDecoder* decoder) { 106 void UserImageLoader::OnDecodeImageFailed(const ImageDecoder* decoder) {
106 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 107 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
108
109 ImageInfoMap::iterator info_it = image_info_map_.find(decoder);
110 if (info_it == image_info_map_.end()) {
111 NOTREACHED();
112 return;
113 }
114
115 const ImageInfo& image_info = info_it->second;
116 target_message_loop_->PostTask(
117 FROM_HERE,
118 base::Bind(image_info.loaded_cb, UserImage()));
107 image_info_map_.erase(decoder); 119 image_info_map_.erase(decoder);
108 } 120 }
109 121
110 } // namespace chromeos 122 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/user_image_loader.h ('k') | chrome/browser/chromeos/login/user_manager_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698