Index: chrome/browser/chromeos/login/screens/user_image_screen.h |
diff --git a/chrome/browser/chromeos/login/screens/user_image_screen.h b/chrome/browser/chromeos/login/screens/user_image_screen.h |
index 1d364953af48e89dbcb823a4bfdb131d46b7f22b..28c61df9bed7e305e66c4308bbb2028d4b6a1e1b 100644 |
--- a/chrome/browser/chromeos/login/screens/user_image_screen.h |
+++ b/chrome/browser/chromeos/login/screens/user_image_screen.h |
@@ -6,9 +6,11 @@ |
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_USER_IMAGE_SCREEN_H_ |
#include "base/compiler_specific.h" |
+#include "base/memory/weak_ptr.h" |
#include "chrome/browser/chromeos/login/screens/user_image_screen_actor.h" |
#include "chrome/browser/chromeos/login/screens/wizard_screen.h" |
#include "chrome/browser/chromeos/login/user.h" |
+#include "chrome/browser/image_decoder.h" |
#include "content/public/browser/notification_observer.h" |
#include "content/public/browser/notification_registrar.h" |
@@ -16,6 +18,7 @@ namespace chromeos { |
class UserImageScreen: public WizardScreen, |
public UserImageScreenActor::Delegate, |
+ public ImageDecoder::Delegate, |
public content::NotificationObserver { |
public: |
UserImageScreen(ScreenObserver* screen_observer, |
@@ -34,25 +37,62 @@ class UserImageScreen: public WizardScreen, |
virtual std::string GetName() const OVERRIDE; |
// UserImageScreenActor::Delegate implementation: |
- virtual void OnPhotoTaken(const gfx::ImageSkia& image) OVERRIDE; |
- virtual void OnProfileImageSelected() OVERRIDE; |
- virtual void OnDefaultImageSelected(int index) OVERRIDE; |
+ virtual void CheckCameraPresence() OVERRIDE; |
+ virtual void OnPhotoTaken(const std::string& raw_data) OVERRIDE; |
+ virtual void OnImageSelected(const std::string& image_url, |
+ const std::string& image_type) OVERRIDE; |
+ virtual void OnImageAccepted() OVERRIDE; |
virtual void OnActorDestroyed(UserImageScreenActor* actor) OVERRIDE; |
+ virtual bool profile_picture_absent() OVERRIDE; |
+ virtual int selected_image() OVERRIDE; |
+ virtual std::string profile_picture_data_url() OVERRIDE; |
+ |
// content::NotificationObserver implementation: |
virtual void Observe(int type, |
const content::NotificationSource& source, |
const content::NotificationDetails& details) OVERRIDE; |
+ // Overriden from ImageDecoder::Delegate: |
+ virtual void OnImageDecoded(const ImageDecoder* decoder, |
+ const SkBitmap& decoded_image) OVERRIDE; |
+ virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE; |
+ |
private: |
const User* GetUser(); |
+ // Called when the camera presence check has been completed. |
+ void OnCameraPresenceCheckDone(); |
+ |
content::NotificationRegistrar registrar_; |
UserImageScreenActor* actor_; |
+ base::WeakPtrFactory<UserImageScreen> weak_factory_; |
+ |
+ // Last ImageDecoder instance used to decode an image blob received by |
+ // HandlePhotoTaken. |
+ scoped_refptr<ImageDecoder> image_decoder_; |
+ |
+ // Last user photo, if taken. |
+ gfx::ImageSkia user_photo_; |
+ |
+ // If |true|, decoded photo should be immediately accepeted (i.e., both |
+ // HandleTakePhoto and HandleImageAccepted have already been called but we're |
+ // still waiting for photo image decoding to finish. |
+ bool accept_photo_after_decoding_; |
+ |
+ // Index of the selected user image. |
+ int selected_image_; |
+ |
bool profile_picture_enabled_; |
+ // Encoded profile picture. |
+ std::string profile_picture_data_url_; |
+ |
+ // True if user has no custom profile picture. |
+ bool profile_picture_absent_; |
+ |
std::string user_id_; |
DISALLOW_COPY_AND_ASSIGN(UserImageScreen); |