| 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 manager->Initialize(SOUND_OBJECT_DELETE, | 91 manager->Initialize(SOUND_OBJECT_DELETE, |
| 92 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); | 92 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); |
| 93 manager->Initialize(SOUND_CAMERA_SNAP, | 93 manager->Initialize(SOUND_CAMERA_SNAP, |
| 94 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); | 94 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); |
| 95 } | 95 } |
| 96 | 96 |
| 97 ChangePictureOptionsHandler::~ChangePictureOptionsHandler() { | 97 ChangePictureOptionsHandler::~ChangePictureOptionsHandler() { |
| 98 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); | 98 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); |
| 99 if (select_file_dialog_.get()) | 99 if (select_file_dialog_.get()) |
| 100 select_file_dialog_->ListenerDestroyed(); | 100 select_file_dialog_->ListenerDestroyed(); |
| 101 if (image_decoder_.get()) | 101 ImageDecoder::GetInstance()->RemoveDelegate(this); |
| 102 image_decoder_->set_delegate(NULL); | |
| 103 } | 102 } |
| 104 | 103 |
| 105 void ChangePictureOptionsHandler::GetLocalizedValues( | 104 void ChangePictureOptionsHandler::GetLocalizedValues( |
| 106 base::DictionaryValue* localized_strings) { | 105 base::DictionaryValue* localized_strings) { |
| 107 DCHECK(localized_strings); | 106 DCHECK(localized_strings); |
| 108 localized_strings->SetString("changePicturePage", | 107 localized_strings->SetString("changePicturePage", |
| 109 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TITLE)); | 108 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TITLE)); |
| 110 localized_strings->SetString("changePicturePageDescription", | 109 localized_strings->SetString("changePicturePageDescription", |
| 111 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT)); | 110 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT)); |
| 112 localized_strings->SetString("takePhoto", | 111 localized_strings->SetString("takePhoto", |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 DCHECK(!image_url.empty()); | 232 DCHECK(!image_url.empty()); |
| 234 | 233 |
| 235 std::string mime_type, charset, raw_data; | 234 std::string mime_type, charset, raw_data; |
| 236 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) | 235 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) |
| 237 NOTREACHED(); | 236 NOTREACHED(); |
| 238 DCHECK_EQ("image/png", mime_type); | 237 DCHECK_EQ("image/png", mime_type); |
| 239 | 238 |
| 240 user_photo_ = gfx::ImageSkia(); | 239 user_photo_ = gfx::ImageSkia(); |
| 241 user_photo_data_url_ = image_url; | 240 user_photo_data_url_ = image_url; |
| 242 | 241 |
| 243 if (image_decoder_.get()) | 242 ImageDecoder::GetInstance()->RemoveDelegate(this); |
| 244 image_decoder_->set_delegate(NULL); | |
| 245 image_decoder_ = new ImageDecoder(this, raw_data, | |
| 246 ImageDecoder::DEFAULT_CODEC); | |
| 247 scoped_refptr<base::MessageLoopProxy> task_runner = | 243 scoped_refptr<base::MessageLoopProxy> task_runner = |
| 248 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); | 244 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); |
| 249 image_decoder_->Start(task_runner); | 245 ImageDecoder::GetInstance()->Start( |
| 246 this, raw_data, ImageDecoder::DEFAULT_CODEC, task_runner, false); |
| 250 } | 247 } |
| 251 | 248 |
| 252 void ChangePictureOptionsHandler::HandlePageInitialized( | 249 void ChangePictureOptionsHandler::HandlePageInitialized( |
| 253 const base::ListValue* args) { | 250 const base::ListValue* args) { |
| 254 DCHECK(args && args->empty()); | 251 DCHECK(args && args->empty()); |
| 255 SendDefaultImages(); | 252 SendDefaultImages(); |
| 256 } | 253 } |
| 257 | 254 |
| 258 void ChangePictureOptionsHandler::HandlePageShown(const base::ListValue* args) { | 255 void ChangePictureOptionsHandler::HandlePageShown(const base::ListValue* args) { |
| 259 DCHECK(args && args->empty()); | 256 DCHECK(args && args->empty()); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 user_image_manager->SaveUserDefaultImageIndex(image_index); | 360 user_image_manager->SaveUserDefaultImageIndex(image_index); |
| 364 | 361 |
| 365 UMA_HISTOGRAM_ENUMERATION( | 362 UMA_HISTOGRAM_ENUMERATION( |
| 366 "UserImage.ChangeChoice", | 363 "UserImage.ChangeChoice", |
| 367 user_manager::GetDefaultImageHistogramValue(image_index), | 364 user_manager::GetDefaultImageHistogramValue(image_index), |
| 368 user_manager::kHistogramImagesCount); | 365 user_manager::kHistogramImagesCount); |
| 369 VLOG(1) << "Selected default user image: " << image_index; | 366 VLOG(1) << "Selected default user image: " << image_index; |
| 370 } else if (image_type == "camera") { | 367 } else if (image_type == "camera") { |
| 371 // Camera image is selected. | 368 // Camera image is selected. |
| 372 if (user_photo_.isNull()) { | 369 if (user_photo_.isNull()) { |
| 373 DCHECK(image_decoder_.get()); | |
| 374 waiting_for_camera_photo = true; | 370 waiting_for_camera_photo = true; |
| 375 VLOG(1) << "Still waiting for camera image to decode"; | 371 VLOG(1) << "Still waiting for camera image to decode"; |
| 376 } else { | 372 } else { |
| 377 SetImageFromCamera(user_photo_); | 373 SetImageFromCamera(user_photo_); |
| 378 } | 374 } |
| 379 } else if (image_type == "profile") { | 375 } else if (image_type == "profile") { |
| 380 // Profile image selected. Could be previous (old) user image. | 376 // Profile image selected. Could be previous (old) user image. |
| 381 user_image_manager->SaveUserImageFromProfileImage(); | 377 user_image_manager->SaveUserImageFromProfileImage(); |
| 382 | 378 |
| 383 if (previous_image_index_ == user_manager::User::USER_IMAGE_PROFILE) { | 379 if (previous_image_index_ == user_manager::User::USER_IMAGE_PROFILE) { |
| 384 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 380 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
| 385 user_manager::kHistogramImageOld, | 381 user_manager::kHistogramImageOld, |
| 386 user_manager::kHistogramImagesCount); | 382 user_manager::kHistogramImagesCount); |
| 387 VLOG(1) << "Selected old (profile) user image"; | 383 VLOG(1) << "Selected old (profile) user image"; |
| 388 } else { | 384 } else { |
| 389 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 385 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
| 390 user_manager::kHistogramImageFromProfile, | 386 user_manager::kHistogramImageFromProfile, |
| 391 user_manager::kHistogramImagesCount); | 387 user_manager::kHistogramImagesCount); |
| 392 VLOG(1) << "Selected profile image"; | 388 VLOG(1) << "Selected profile image"; |
| 393 } | 389 } |
| 394 } else { | 390 } else { |
| 395 NOTREACHED() << "Unexpected image type: " << image_type; | 391 NOTREACHED() << "Unexpected image type: " << image_type; |
| 396 } | 392 } |
| 397 | 393 |
| 398 // Ignore the result of the previous decoding if it's no longer needed. | 394 // Ignore the result of the previous decoding if it's no longer needed. |
| 399 if (!waiting_for_camera_photo && image_decoder_.get()) | 395 if (!waiting_for_camera_photo) |
| 400 image_decoder_->set_delegate(NULL); | 396 ImageDecoder::GetInstance()->RemoveDelegate(this); |
| 401 } | 397 } |
| 402 | 398 |
| 403 void ChangePictureOptionsHandler::FileSelected(const base::FilePath& path, | 399 void ChangePictureOptionsHandler::FileSelected(const base::FilePath& path, |
| 404 int index, | 400 int index, |
| 405 void* params) { | 401 void* params) { |
| 406 ChromeUserManager::Get() | 402 ChromeUserManager::Get() |
| 407 ->GetUserImageManager(GetUser()->email()) | 403 ->GetUserImageManager(GetUser()->email()) |
| 408 ->SaveUserImageFromFile(path); | 404 ->SaveUserImageFromFile(path); |
| 409 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 405 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
| 410 user_manager::kHistogramImageFromFile, | 406 user_manager::kHistogramImageFromFile, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 } | 447 } |
| 452 } | 448 } |
| 453 | 449 |
| 454 gfx::NativeWindow ChangePictureOptionsHandler::GetBrowserWindow() const { | 450 gfx::NativeWindow ChangePictureOptionsHandler::GetBrowserWindow() const { |
| 455 Browser* browser = | 451 Browser* browser = |
| 456 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); | 452 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); |
| 457 return browser->window()->GetNativeWindow(); | 453 return browser->window()->GetNativeWindow(); |
| 458 } | 454 } |
| 459 | 455 |
| 460 void ChangePictureOptionsHandler::OnImageDecoded( | 456 void ChangePictureOptionsHandler::OnImageDecoded( |
| 461 const ImageDecoder* decoder, | |
| 462 const SkBitmap& decoded_image) { | 457 const SkBitmap& decoded_image) { |
| 463 DCHECK_EQ(image_decoder_.get(), decoder); | |
| 464 image_decoder_ = NULL; | |
| 465 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); | 458 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); |
| 466 SetImageFromCamera(user_photo_); | 459 SetImageFromCamera(user_photo_); |
| 467 } | 460 } |
| 468 | 461 |
| 469 void ChangePictureOptionsHandler::OnDecodeImageFailed( | 462 void ChangePictureOptionsHandler::OnDecodeImageFailed() { |
| 470 const ImageDecoder* decoder) { | |
| 471 NOTREACHED() << "Failed to decode PNG image from WebUI"; | 463 NOTREACHED() << "Failed to decode PNG image from WebUI"; |
| 472 } | 464 } |
| 473 | 465 |
| 474 const user_manager::User* ChangePictureOptionsHandler::GetUser() const { | 466 const user_manager::User* ChangePictureOptionsHandler::GetUser() const { |
| 475 Profile* profile = Profile::FromWebUI(web_ui()); | 467 Profile* profile = Profile::FromWebUI(web_ui()); |
| 476 const user_manager::User* user = | 468 const user_manager::User* user = |
| 477 ProfileHelper::Get()->GetUserByProfile(profile); | 469 ProfileHelper::Get()->GetUserByProfile(profile); |
| 478 if (!user) | 470 if (!user) |
| 479 return user_manager::UserManager::Get()->GetActiveUser(); | 471 return user_manager::UserManager::Get()->GetActiveUser(); |
| 480 return user; | 472 return user; |
| 481 } | 473 } |
| 482 | 474 |
| 483 } // namespace options | 475 } // namespace options |
| 484 } // namespace chromeos | 476 } // namespace chromeos |
| OLD | NEW |