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 |