OLD | NEW |
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 Loading... |
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 Loading... |
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, ImageDecoder::DEFAULT_CODEC, false); |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |