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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 notification_registrar_.Add(this, | 82 notification_registrar_.Add(this, |
83 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, | 83 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, |
84 content::NotificationService::AllSources()); | 84 content::NotificationService::AllSources()); |
85 GetContextEditor().SetString(kContextKeyProfilePictureDataURL, std::string()); | 85 GetContextEditor().SetString(kContextKeyProfilePictureDataURL, std::string()); |
86 } | 86 } |
87 | 87 |
88 UserImageScreen::~UserImageScreen() { | 88 UserImageScreen::~UserImageScreen() { |
89 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); | 89 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); |
90 if (view_) | 90 if (view_) |
91 view_->Unbind(); | 91 view_->Unbind(); |
92 if (image_decoder_.get()) | 92 ImageDecoder::GetInstance()->RemoveDelegate(this); |
93 image_decoder_->set_delegate(NULL); | |
94 } | 93 } |
95 | 94 |
96 void UserImageScreen::OnScreenReady() { | 95 void UserImageScreen::OnScreenReady() { |
97 is_screen_ready_ = true; | 96 is_screen_ready_ = true; |
98 if (!IsWaitingForSync()) | 97 if (!IsWaitingForSync()) |
99 HideCurtain(); | 98 HideCurtain(); |
100 } | 99 } |
101 | 100 |
102 void UserImageScreen::OnPhotoTaken(const std::string& raw_data) { | 101 void UserImageScreen::OnPhotoTaken(const std::string& raw_data) { |
103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
104 user_photo_ = gfx::ImageSkia(); | 103 user_photo_ = gfx::ImageSkia(); |
105 if (image_decoder_.get()) | |
106 image_decoder_->set_delegate(NULL); | |
107 image_decoder_ = new ImageDecoder(this, raw_data, | |
108 ImageDecoder::DEFAULT_CODEC); | |
109 scoped_refptr<base::MessageLoopProxy> task_runner = | 104 scoped_refptr<base::MessageLoopProxy> task_runner = |
110 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); | 105 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); |
111 image_decoder_->Start(task_runner); | 106 ImageDecoder::GetInstance()->RemoveDelegate(this); |
| 107 ImageDecoder::GetInstance()->Start( |
| 108 this, raw_data, ImageDecoder::DEFAULT_CODEC, task_runner, false); |
112 } | 109 } |
113 | 110 |
114 void UserImageScreen::OnCameraPresenceCheckDone(bool is_camera_present) { | 111 void UserImageScreen::OnCameraPresenceCheckDone(bool is_camera_present) { |
115 GetContextEditor().SetBoolean(kContextKeyIsCameraPresent, is_camera_present); | 112 GetContextEditor().SetBoolean(kContextKeyIsCameraPresent, is_camera_present); |
116 } | 113 } |
117 | 114 |
118 void UserImageScreen::HideCurtain() { | 115 void UserImageScreen::HideCurtain() { |
119 if (view_) | 116 if (view_) |
120 view_->HideCurtain(); | 117 view_->HideCurtain(); |
121 } | 118 } |
122 | 119 |
123 void UserImageScreen::OnImageDecoded(const ImageDecoder* decoder, | 120 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); | 121 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); |
127 if (accept_photo_after_decoding_) | 122 if (accept_photo_after_decoding_) |
128 OnImageAccepted(); | 123 OnImageAccepted(); |
129 } | 124 } |
130 | 125 |
131 void UserImageScreen::OnDecodeImageFailed(const ImageDecoder* decoder) { | 126 void UserImageScreen::OnDecodeImageFailed() { |
132 NOTREACHED() << "Failed to decode PNG image from WebUI"; | 127 NOTREACHED() << "Failed to decode PNG image from WebUI"; |
133 } | 128 } |
134 | 129 |
135 void UserImageScreen::OnInitialSync(bool local_image_updated) { | 130 void UserImageScreen::OnInitialSync(bool local_image_updated) { |
136 DCHECK(sync_timer_); | 131 DCHECK(sync_timer_); |
137 if (!local_image_updated) { | 132 if (!local_image_updated) { |
138 sync_timer_.reset(); | 133 sync_timer_.reset(); |
139 GetSyncObserver()->RemoveObserver(this); | 134 GetSyncObserver()->RemoveObserver(this); |
140 if (is_screen_ready_) | 135 if (is_screen_ready_) |
141 HideCurtain(); | 136 HideCurtain(); |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 | 340 |
346 void UserImageScreen::ExitScreen() { | 341 void UserImageScreen::ExitScreen() { |
347 policy_registrar_.reset(); | 342 policy_registrar_.reset(); |
348 sync_timer_.reset(); | 343 sync_timer_.reset(); |
349 if (UserImageSyncObserver* sync_observer = GetSyncObserver()) | 344 if (UserImageSyncObserver* sync_observer = GetSyncObserver()) |
350 sync_observer->RemoveObserver(this); | 345 sync_observer->RemoveObserver(this); |
351 Finish(BaseScreenDelegate::USER_IMAGE_SELECTED); | 346 Finish(BaseScreenDelegate::USER_IMAGE_SELECTED); |
352 } | 347 } |
353 | 348 |
354 } // namespace chromeos | 349 } // namespace chromeos |
OLD | NEW |