- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / options / chromeos / change_picture_options_handler.h
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
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_CHANGE_PICTURE_OPTIONS_HANDLER_H_
6 #define CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_CHANGE_PICTURE_OPTIONS_HANDLER_H_
7
8 #include "base/memory/weak_ptr.h"
9 #include "chrome/browser/image_decoder.h"
10 #include "chrome/browser/ui/webui/options/options_ui.h"
11 #include "content/public/browser/notification_registrar.h"
12 #include "ui/gfx/image/image_skia.h"
13 #include "ui/gfx/native_widget_types.h"
14 #include "ui/shell_dialogs/select_file_dialog.h"
15
16 namespace base {
17 class DictionaryValue;
18 class ListValue;
19 }
20
21 namespace chromeos {
22 namespace options {
23
24 // ChromeOS user image options page UI handler.
25 class ChangePictureOptionsHandler : public ::options::OptionsPageUIHandler,
26                                     public ui::SelectFileDialog::Listener,
27                                     public ImageDecoder::Delegate {
28  public:
29   ChangePictureOptionsHandler();
30   virtual ~ChangePictureOptionsHandler();
31
32   // OptionsPageUIHandler implementation.
33   virtual void GetLocalizedValues(
34       base::DictionaryValue* localized_strings) OVERRIDE;
35
36   // WebUIMessageHandler implementation.
37   virtual void RegisterMessages() OVERRIDE;
38
39  private:
40   // Sends list of available default images to the page.
41   void SendDefaultImages();
42
43   // Sends current selection to the page.
44   void SendSelectedImage();
45
46   // Sends the profile image to the page. If |should_select| is true then
47   // the profile image element is selected.
48   void SendProfileImage(const gfx::ImageSkia& image, bool should_select);
49
50   // Starts profile image update and shows the last downloaded profile image,
51   // if any, on the page. Shouldn't be called before |SendProfileImage|.
52   void UpdateProfileImage();
53
54   // Sends previous user image to the page.
55   void SendOldImage(const std::string& image_url);
56
57   // Starts camera presence check.
58   void CheckCameraPresence();
59
60   // Updates UI with camera presence state.
61   void SetCameraPresent(bool present);
62
63   // Opens a file selection dialog to choose user image from file.
64   void HandleChooseFile(const base::ListValue* args);
65
66   // Handles photo taken with WebRTC UI.
67   void HandlePhotoTaken(const base::ListValue* args);
68
69   // Handles camera presence check request.
70   void HandleCheckCameraPresence(const base::ListValue* args);
71
72   // Gets the list of available user images and sends it to the page.
73   void HandleGetAvailableImages(const base::ListValue* args);
74
75   // Handles page initialized event.
76   void HandlePageInitialized(const base::ListValue* args);
77
78   // Handles page shown event.
79   void HandlePageShown(const base::ListValue* args);
80
81   // Selects one of the available images as user's.
82   void HandleSelectImage(const base::ListValue* args);
83
84   // SelectFileDialog::Delegate implementation.
85   virtual void FileSelected(
86       const base::FilePath& path,
87       int index, void* params) OVERRIDE;
88
89   // content::NotificationObserver implementation.
90   virtual void Observe(int type,
91                        const content::NotificationSource& source,
92                        const content::NotificationDetails& details) OVERRIDE;
93
94   // Called when the camera presence check has been completed.
95   void OnCameraPresenceCheckDone();
96
97   // Sets user image to photo taken from camera.
98   void SetImageFromCamera(const gfx::ImageSkia& photo);
99
100   // Returns handle to browser window or NULL if it can't be found.
101   gfx::NativeWindow GetBrowserWindow() const;
102
103   // Overriden from ImageDecoder::Delegate:
104   virtual void OnImageDecoded(const ImageDecoder* decoder,
105                               const SkBitmap& decoded_image) OVERRIDE;
106   virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE;
107
108   scoped_refptr<ui::SelectFileDialog> select_file_dialog_;
109
110   // Previous user image from camera/file and its data URL.
111   gfx::ImageSkia previous_image_;
112   std::string previous_image_url_;
113
114   // Index of the previous user image.
115   int previous_image_index_;
116
117   // Last user photo, if taken.
118   gfx::ImageSkia user_photo_;
119
120   // Data URL for |user_photo_|.
121   std::string user_photo_data_url_;
122
123   content::NotificationRegistrar registrar_;
124
125   base::WeakPtrFactory<ChangePictureOptionsHandler> weak_factory_;
126
127   // Last ImageDecoder instance used to decode an image blob received by
128   // HandlePhotoTaken.
129   scoped_refptr<ImageDecoder> image_decoder_;
130
131   DISALLOW_COPY_AND_ASSIGN(ChangePictureOptionsHandler);
132 };
133
134 }  // namespace options
135 }  // namespace chromeos
136
137 #endif  // CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_CHANGE_PICTURE_OPTIONS_HANDLER_H_