| OLD | NEW |
| 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/screens/user_image_screen.h" | 5 #include "chrome/browser/chromeos/login/screens/user_image_screen.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 | 59 |
| 60 // static | 60 // static |
| 61 UserImageScreen* UserImageScreen::Get(ScreenManager* manager) { | 61 UserImageScreen* UserImageScreen::Get(ScreenManager* manager) { |
| 62 return static_cast<UserImageScreen*>( | 62 return static_cast<UserImageScreen*>( |
| 63 manager->GetScreen(WizardController::kUserImageScreenName)); | 63 manager->GetScreen(WizardController::kUserImageScreenName)); |
| 64 } | 64 } |
| 65 | 65 |
| 66 UserImageScreen::UserImageScreen(BaseScreenDelegate* base_screen_delegate, | 66 UserImageScreen::UserImageScreen(BaseScreenDelegate* base_screen_delegate, |
| 67 UserImageView* view) | 67 UserImageView* view) |
| 68 : UserImageModel(base_screen_delegate), | 68 : UserImageModel(base_screen_delegate), |
| 69 ImageRequest( |
| 70 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), |
| 69 view_(view), | 71 view_(view), |
| 70 accept_photo_after_decoding_(false), | 72 accept_photo_after_decoding_(false), |
| 71 selected_image_(user_manager::User::USER_IMAGE_INVALID), | 73 selected_image_(user_manager::User::USER_IMAGE_INVALID), |
| 72 is_screen_ready_(false), | 74 is_screen_ready_(false), |
| 73 user_has_selected_image_(false) { | 75 user_has_selected_image_(false) { |
| 74 if (view_) | 76 if (view_) |
| 75 view_->Bind(*this); | 77 view_->Bind(*this); |
| 76 notification_registrar_.Add(this, | 78 notification_registrar_.Add(this, |
| 77 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, | 79 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, |
| 78 content::NotificationService::AllSources()); | 80 content::NotificationService::AllSources()); |
| 79 notification_registrar_.Add(this, | 81 notification_registrar_.Add(this, |
| 80 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, | 82 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, |
| 81 content::NotificationService::AllSources()); | 83 content::NotificationService::AllSources()); |
| 82 notification_registrar_.Add(this, | 84 notification_registrar_.Add(this, |
| 83 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, | 85 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, |
| 84 content::NotificationService::AllSources()); | 86 content::NotificationService::AllSources()); |
| 85 GetContextEditor().SetString(kContextKeyProfilePictureDataURL, std::string()); | 87 GetContextEditor().SetString(kContextKeyProfilePictureDataURL, std::string()); |
| 86 } | 88 } |
| 87 | 89 |
| 88 UserImageScreen::~UserImageScreen() { | 90 UserImageScreen::~UserImageScreen() { |
| 89 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); | 91 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); |
| 90 if (view_) | 92 if (view_) |
| 91 view_->Unbind(); | 93 view_->Unbind(); |
| 92 if (image_decoder_.get()) | |
| 93 image_decoder_->set_delegate(NULL); | |
| 94 } | 94 } |
| 95 | 95 |
| 96 void UserImageScreen::OnScreenReady() { | 96 void UserImageScreen::OnScreenReady() { |
| 97 is_screen_ready_ = true; | 97 is_screen_ready_ = true; |
| 98 if (!IsWaitingForSync()) | 98 if (!IsWaitingForSync()) |
| 99 HideCurtain(); | 99 HideCurtain(); |
| 100 } | 100 } |
| 101 | 101 |
| 102 void UserImageScreen::OnPhotoTaken(const std::string& raw_data) { | 102 void UserImageScreen::OnPhotoTaken(const std::string& raw_data) { |
| 103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 104 user_photo_ = gfx::ImageSkia(); | 104 user_photo_ = gfx::ImageSkia(); |
| 105 if (image_decoder_.get()) | 105 ImageDecoder::Cancel(this); |
| 106 image_decoder_->set_delegate(NULL); | 106 ImageDecoder::Start(this, raw_data); |
| 107 image_decoder_ = new ImageDecoder(this, raw_data, | |
| 108 ImageDecoder::DEFAULT_CODEC); | |
| 109 scoped_refptr<base::MessageLoopProxy> task_runner = | |
| 110 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); | |
| 111 image_decoder_->Start(task_runner); | |
| 112 } | 107 } |
| 113 | 108 |
| 114 void UserImageScreen::OnCameraPresenceCheckDone(bool is_camera_present) { | 109 void UserImageScreen::OnCameraPresenceCheckDone(bool is_camera_present) { |
| 115 GetContextEditor().SetBoolean(kContextKeyIsCameraPresent, is_camera_present); | 110 GetContextEditor().SetBoolean(kContextKeyIsCameraPresent, is_camera_present); |
| 116 } | 111 } |
| 117 | 112 |
| 118 void UserImageScreen::HideCurtain() { | 113 void UserImageScreen::HideCurtain() { |
| 119 if (view_) | 114 if (view_) |
| 120 view_->HideCurtain(); | 115 view_->HideCurtain(); |
| 121 } | 116 } |
| 122 | 117 |
| 123 void UserImageScreen::OnImageDecoded(const ImageDecoder* decoder, | 118 void UserImageScreen::OnImageDecoded(const SkBitmap& decoded_image) { |
| 124 const SkBitmap& decoded_image) { | |
| 125 DCHECK_EQ(image_decoder_.get(), decoder); | |
| 126 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); | 119 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); |
| 127 if (accept_photo_after_decoding_) | 120 if (accept_photo_after_decoding_) |
| 128 OnImageAccepted(); | 121 OnImageAccepted(); |
| 129 } | 122 } |
| 130 | 123 |
| 131 void UserImageScreen::OnDecodeImageFailed(const ImageDecoder* decoder) { | 124 void UserImageScreen::OnDecodeImageFailed() { |
| 132 NOTREACHED() << "Failed to decode PNG image from WebUI"; | 125 NOTREACHED() << "Failed to decode PNG image from WebUI"; |
| 133 } | 126 } |
| 134 | 127 |
| 135 void UserImageScreen::OnInitialSync(bool local_image_updated) { | 128 void UserImageScreen::OnInitialSync(bool local_image_updated) { |
| 136 DCHECK(sync_timer_); | 129 DCHECK(sync_timer_); |
| 137 if (!local_image_updated) { | 130 if (!local_image_updated) { |
| 138 sync_timer_.reset(); | 131 sync_timer_.reset(); |
| 139 GetSyncObserver()->RemoveObserver(this); | 132 GetSyncObserver()->RemoveObserver(this); |
| 140 if (is_screen_ready_) | 133 if (is_screen_ready_) |
| 141 HideCurtain(); | 134 HideCurtain(); |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 | 338 |
| 346 void UserImageScreen::ExitScreen() { | 339 void UserImageScreen::ExitScreen() { |
| 347 policy_registrar_.reset(); | 340 policy_registrar_.reset(); |
| 348 sync_timer_.reset(); | 341 sync_timer_.reset(); |
| 349 if (UserImageSyncObserver* sync_observer = GetSyncObserver()) | 342 if (UserImageSyncObserver* sync_observer = GetSyncObserver()) |
| 350 sync_observer->RemoveObserver(this); | 343 sync_observer->RemoveObserver(this); |
| 351 Finish(BaseScreenDelegate::USER_IMAGE_SELECTED); | 344 Finish(BaseScreenDelegate::USER_IMAGE_SELECTED); |
| 352 } | 345 } |
| 353 | 346 |
| 354 } // namespace chromeos | 347 } // namespace chromeos |
| OLD | NEW |