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

Side by Side Diff: chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc

Issue 931993002: Make image_decoder a Leaky LazyInstance (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix a few comments Created 5 years, 9 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/ui/webui/options/chromeos/change_picture_options_handle r.h" 5 #include "chrome/browser/ui/webui/options/chromeos/change_picture_options_handle r.h"
6 6
7 #include "ash/audio/sounds.h" 7 #include "ash/audio/sounds.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 70
71 return file_type_info; 71 return file_type_info;
72 } 72 }
73 73
74 // Time histogram suffix for profile image download. 74 // Time histogram suffix for profile image download.
75 const char kProfileDownloadReason[] = "Preferences"; 75 const char kProfileDownloadReason[] = "Preferences";
76 76
77 } // namespace 77 } // namespace
78 78
79 ChangePictureOptionsHandler::ChangePictureOptionsHandler() 79 ChangePictureOptionsHandler::ChangePictureOptionsHandler()
80 : previous_image_url_(url::kAboutBlankURL), 80 : ImageRequest(
81 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)),
82 previous_image_url_(url::kAboutBlankURL),
81 previous_image_index_(user_manager::User::USER_IMAGE_INVALID) { 83 previous_image_index_(user_manager::User::USER_IMAGE_INVALID) {
82 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, 84 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED,
83 content::NotificationService::AllSources()); 85 content::NotificationService::AllSources());
84 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, 86 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED,
85 content::NotificationService::AllSources()); 87 content::NotificationService::AllSources());
86 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, 88 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED,
87 content::NotificationService::AllSources()); 89 content::NotificationService::AllSources());
88 90
89 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 91 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
90 media::SoundsManager* manager = media::SoundsManager::Get(); 92 media::SoundsManager* manager = media::SoundsManager::Get();
91 manager->Initialize(SOUND_OBJECT_DELETE, 93 manager->Initialize(SOUND_OBJECT_DELETE,
92 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); 94 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV));
93 manager->Initialize(SOUND_CAMERA_SNAP, 95 manager->Initialize(SOUND_CAMERA_SNAP,
94 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); 96 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV));
95 } 97 }
96 98
97 ChangePictureOptionsHandler::~ChangePictureOptionsHandler() { 99 ChangePictureOptionsHandler::~ChangePictureOptionsHandler() {
98 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); 100 CameraPresenceNotifier::GetInstance()->RemoveObserver(this);
99 if (select_file_dialog_.get()) 101 if (select_file_dialog_.get())
100 select_file_dialog_->ListenerDestroyed(); 102 select_file_dialog_->ListenerDestroyed();
101 if (image_decoder_.get())
102 image_decoder_->set_delegate(NULL);
103 } 103 }
104 104
105 void ChangePictureOptionsHandler::GetLocalizedValues( 105 void ChangePictureOptionsHandler::GetLocalizedValues(
106 base::DictionaryValue* localized_strings) { 106 base::DictionaryValue* localized_strings) {
107 DCHECK(localized_strings); 107 DCHECK(localized_strings);
108 localized_strings->SetString("changePicturePage", 108 localized_strings->SetString("changePicturePage",
109 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TITLE)); 109 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TITLE));
110 localized_strings->SetString("changePicturePageDescription", 110 localized_strings->SetString("changePicturePageDescription",
111 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT)); 111 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT));
112 localized_strings->SetString("takePhoto", 112 localized_strings->SetString("takePhoto",
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 DCHECK(!image_url.empty()); 233 DCHECK(!image_url.empty());
234 234
235 std::string mime_type, charset, raw_data; 235 std::string mime_type, charset, raw_data;
236 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) 236 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data))
237 NOTREACHED(); 237 NOTREACHED();
238 DCHECK_EQ("image/png", mime_type); 238 DCHECK_EQ("image/png", mime_type);
239 239
240 user_photo_ = gfx::ImageSkia(); 240 user_photo_ = gfx::ImageSkia();
241 user_photo_data_url_ = image_url; 241 user_photo_data_url_ = image_url;
242 242
243 if (image_decoder_.get()) 243 ImageDecoder::Cancel(this);
244 image_decoder_->set_delegate(NULL); 244 ImageDecoder::Start(this, raw_data);
245 image_decoder_ = new ImageDecoder(this, raw_data,
246 ImageDecoder::DEFAULT_CODEC);
247 scoped_refptr<base::MessageLoopProxy> task_runner =
248 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
249 image_decoder_->Start(task_runner);
250 } 245 }
251 246
252 void ChangePictureOptionsHandler::HandlePageInitialized( 247 void ChangePictureOptionsHandler::HandlePageInitialized(
253 const base::ListValue* args) { 248 const base::ListValue* args) {
254 DCHECK(args && args->empty()); 249 DCHECK(args && args->empty());
255 SendDefaultImages(); 250 SendDefaultImages();
256 } 251 }
257 252
258 void ChangePictureOptionsHandler::HandlePageShown(const base::ListValue* args) { 253 void ChangePictureOptionsHandler::HandlePageShown(const base::ListValue* args) {
259 DCHECK(args && args->empty()); 254 DCHECK(args && args->empty());
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 user_image_manager->SaveUserDefaultImageIndex(image_index); 358 user_image_manager->SaveUserDefaultImageIndex(image_index);
364 359
365 UMA_HISTOGRAM_ENUMERATION( 360 UMA_HISTOGRAM_ENUMERATION(
366 "UserImage.ChangeChoice", 361 "UserImage.ChangeChoice",
367 user_manager::GetDefaultImageHistogramValue(image_index), 362 user_manager::GetDefaultImageHistogramValue(image_index),
368 user_manager::kHistogramImagesCount); 363 user_manager::kHistogramImagesCount);
369 VLOG(1) << "Selected default user image: " << image_index; 364 VLOG(1) << "Selected default user image: " << image_index;
370 } else if (image_type == "camera") { 365 } else if (image_type == "camera") {
371 // Camera image is selected. 366 // Camera image is selected.
372 if (user_photo_.isNull()) { 367 if (user_photo_.isNull()) {
373 DCHECK(image_decoder_.get());
374 waiting_for_camera_photo = true; 368 waiting_for_camera_photo = true;
375 VLOG(1) << "Still waiting for camera image to decode"; 369 VLOG(1) << "Still waiting for camera image to decode";
376 } else { 370 } else {
377 SetImageFromCamera(user_photo_); 371 SetImageFromCamera(user_photo_);
378 } 372 }
379 } else if (image_type == "profile") { 373 } else if (image_type == "profile") {
380 // Profile image selected. Could be previous (old) user image. 374 // Profile image selected. Could be previous (old) user image.
381 user_image_manager->SaveUserImageFromProfileImage(); 375 user_image_manager->SaveUserImageFromProfileImage();
382 376
383 if (previous_image_index_ == user_manager::User::USER_IMAGE_PROFILE) { 377 if (previous_image_index_ == user_manager::User::USER_IMAGE_PROFILE) {
384 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", 378 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice",
385 user_manager::kHistogramImageOld, 379 user_manager::kHistogramImageOld,
386 user_manager::kHistogramImagesCount); 380 user_manager::kHistogramImagesCount);
387 VLOG(1) << "Selected old (profile) user image"; 381 VLOG(1) << "Selected old (profile) user image";
388 } else { 382 } else {
389 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", 383 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice",
390 user_manager::kHistogramImageFromProfile, 384 user_manager::kHistogramImageFromProfile,
391 user_manager::kHistogramImagesCount); 385 user_manager::kHistogramImagesCount);
392 VLOG(1) << "Selected profile image"; 386 VLOG(1) << "Selected profile image";
393 } 387 }
394 } else { 388 } else {
395 NOTREACHED() << "Unexpected image type: " << image_type; 389 NOTREACHED() << "Unexpected image type: " << image_type;
396 } 390 }
397 391
398 // Ignore the result of the previous decoding if it's no longer needed. 392 // Ignore the result of the previous decoding if it's no longer needed.
399 if (!waiting_for_camera_photo && image_decoder_.get()) 393 if (!waiting_for_camera_photo)
400 image_decoder_->set_delegate(NULL); 394 ImageDecoder::Cancel(this);
401 } 395 }
402 396
403 void ChangePictureOptionsHandler::FileSelected(const base::FilePath& path, 397 void ChangePictureOptionsHandler::FileSelected(const base::FilePath& path,
404 int index, 398 int index,
405 void* params) { 399 void* params) {
406 ChromeUserManager::Get() 400 ChromeUserManager::Get()
407 ->GetUserImageManager(GetUser()->email()) 401 ->GetUserImageManager(GetUser()->email())
408 ->SaveUserImageFromFile(path); 402 ->SaveUserImageFromFile(path);
409 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", 403 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice",
410 user_manager::kHistogramImageFromFile, 404 user_manager::kHistogramImageFromFile,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 } 445 }
452 } 446 }
453 447
454 gfx::NativeWindow ChangePictureOptionsHandler::GetBrowserWindow() const { 448 gfx::NativeWindow ChangePictureOptionsHandler::GetBrowserWindow() const {
455 Browser* browser = 449 Browser* browser =
456 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); 450 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents());
457 return browser->window()->GetNativeWindow(); 451 return browser->window()->GetNativeWindow();
458 } 452 }
459 453
460 void ChangePictureOptionsHandler::OnImageDecoded( 454 void ChangePictureOptionsHandler::OnImageDecoded(
461 const ImageDecoder* decoder,
462 const SkBitmap& decoded_image) { 455 const SkBitmap& decoded_image) {
463 DCHECK_EQ(image_decoder_.get(), decoder);
464 image_decoder_ = NULL;
465 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); 456 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image);
466 SetImageFromCamera(user_photo_); 457 SetImageFromCamera(user_photo_);
467 } 458 }
468 459
469 void ChangePictureOptionsHandler::OnDecodeImageFailed( 460 void ChangePictureOptionsHandler::OnDecodeImageFailed() {
470 const ImageDecoder* decoder) {
471 NOTREACHED() << "Failed to decode PNG image from WebUI"; 461 NOTREACHED() << "Failed to decode PNG image from WebUI";
472 } 462 }
473 463
474 const user_manager::User* ChangePictureOptionsHandler::GetUser() const { 464 const user_manager::User* ChangePictureOptionsHandler::GetUser() const {
475 Profile* profile = Profile::FromWebUI(web_ui()); 465 Profile* profile = Profile::FromWebUI(web_ui());
476 const user_manager::User* user = 466 const user_manager::User* user =
477 ProfileHelper::Get()->GetUserByProfile(profile); 467 ProfileHelper::Get()->GetUserByProfile(profile);
478 if (!user) 468 if (!user)
479 return user_manager::UserManager::Get()->GetActiveUser(); 469 return user_manager::UserManager::Get()->GetActiveUser();
480 return user; 470 return user;
481 } 471 }
482 472
483 } // namespace options 473 } // namespace options
484 } // namespace chromeos 474 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.h ('k') | chrome/common/chrome_utility_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698