- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / chromeos / login / oobe_ui.h
1 // Copyright (c) 2011 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_CHROMEOS_LOGIN_OOBE_UI_H_
6 #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
7
8 #include <map>
9 #include <string>
10 #include <vector>
11
12 #include "base/compiler_specific.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/observer_list.h"
15 #include "chrome/browser/chromeos/login/oobe_display.h"
16 #include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h"
17 #include "content/public/browser/web_ui_controller.h"
18
19 namespace base {
20 class DictionaryValue;
21 }  // namespace base
22
23 namespace chromeos {
24 class AppLaunchSplashScreenActor;
25 class BaseScreenHandler;
26 class CoreOobeHandler;
27 class ErrorScreenHandler;
28 class KioskAppMenuHandler;
29 class KioskEnableScreenActor;
30 class NativeWindowDelegate;
31 class NetworkDropdownHandler;
32 class NetworkStateInformer;
33 class SigninScreenHandler;
34 class SigninScreenHandlerDelegate;
35 class UpdateScreenHandler;
36
37 // A custom WebUI that defines datasource for out-of-box-experience (OOBE) UI:
38 // - welcome screen (setup language/keyboard/network).
39 // - eula screen (CrOS (+ OEM) EULA content/TPM password/crash reporting).
40 // - update screen.
41 class OobeUI : public OobeDisplay,
42                public content::WebUIController,
43                public CoreOobeHandler::Delegate {
44  public:
45   class Observer {
46    public:
47     virtual ~Observer() {}
48     virtual void OnCurrentScreenChanged(
49         Screen current_screen, Screen new_screen) = 0;
50   };
51
52   // JS oobe/login screens names.
53   static const char kScreenOobeNetwork[];
54   static const char kScreenOobeEula[];
55   static const char kScreenOobeUpdate[];
56   static const char kScreenOobeEnrollment[];
57   static const char kScreenGaiaSignin[];
58   static const char kScreenAccountPicker[];
59   static const char kScreenKioskAutolaunch[];
60   static const char kScreenKioskEnable[];
61   static const char kScreenErrorMessage[];
62   static const char kScreenUserImagePicker[];
63   static const char kScreenTpmError[];
64   static const char kScreenPasswordChanged[];
65   static const char kScreenManagedUserCreationFlow[];
66   static const char kScreenTermsOfService[];
67   static const char kScreenWrongHWID[];
68   static const char kScreenAppLaunchSplash[];
69   static const char kScreenConfirmPassword[];
70   static const char kScreenMessageBox[];
71
72   OobeUI(content::WebUI* web_ui, const GURL& url);
73   virtual ~OobeUI();
74
75   // OobeDisplay implementation:
76   virtual void ShowScreen(WizardScreen* screen) OVERRIDE;
77   virtual void HideScreen(WizardScreen* screen) OVERRIDE;
78   virtual UpdateScreenActor* GetUpdateScreenActor() OVERRIDE;
79   virtual NetworkScreenActor* GetNetworkScreenActor() OVERRIDE;
80   virtual EulaScreenActor* GetEulaScreenActor() OVERRIDE;
81   virtual EnrollmentScreenActor* GetEnrollmentScreenActor() OVERRIDE;
82   virtual ResetScreenActor* GetResetScreenActor() OVERRIDE;
83   virtual KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() OVERRIDE;
84   virtual KioskEnableScreenActor* GetKioskEnableScreenActor() OVERRIDE;
85   virtual TermsOfServiceScreenActor*
86       GetTermsOfServiceScreenActor() OVERRIDE;
87   virtual UserImageScreenActor* GetUserImageScreenActor() OVERRIDE;
88   virtual ErrorScreenActor* GetErrorScreenActor() OVERRIDE;
89   virtual WrongHWIDScreenActor* GetWrongHWIDScreenActor() OVERRIDE;
90   virtual LocallyManagedUserCreationScreenHandler*
91       GetLocallyManagedUserCreationScreenActor() OVERRIDE;
92   virtual AppLaunchSplashScreenActor*
93       GetAppLaunchSplashScreenActor() OVERRIDE;
94   virtual bool IsJSReady(const base::Closure& display_is_ready_callback)
95       OVERRIDE;
96
97   // Collects localized strings from the owned handlers.
98   void GetLocalizedStrings(base::DictionaryValue* localized_strings);
99
100   // Initializes the handlers.
101   void InitializeHandlers();
102
103   // Shows or hides OOBE UI elements.
104   void ShowOobeUI(bool show);
105
106   // TODO(rkc): Create a separate retail mode login UI and move this method
107   // there - see crbug.com/157671.
108   // Shows a login spinner for retail mode logins.
109   void ShowRetailModeLoginSpinner();
110
111   // Shows the signin screen.
112   void ShowSigninScreen(SigninScreenHandlerDelegate* delegate,
113                         NativeWindowDelegate* native_window_delegate);
114
115   // Shows the kiosk splash screen.
116   void ShowAppLaunchSplashScreen();
117
118   // Resets the delegate set in ShowSigninScreen.
119   void ResetSigninScreenHandlerDelegate();
120
121   // Add and remove observers for screen change events.
122   void AddObserver(Observer* observer);
123   void RemoveObserver(Observer* observer);
124
125   Screen current_screen() const { return current_screen_; }
126
127   const std::string& GetScreenName(Screen screen) const;
128
129   SigninScreenHandler* signin_screen_handler_for_test() {
130     return signin_screen_handler_;
131   }
132
133  private:
134   // Initializes |screen_ids_| and |screen_names_| structures.
135   void InitializeScreenMaps();
136
137   void AddScreenHandler(BaseScreenHandler* handler);
138
139   // CoreOobeHandler::Delegate implementation:
140   virtual void OnCurrentScreenChanged(const std::string& screen) OVERRIDE;
141
142   // Type of UI.
143   std::string display_type_;
144
145   // Reference to NetworkStateInformer that handles changes in network
146   // state.
147   scoped_refptr<NetworkStateInformer> network_state_informer_;
148
149   // Reference to CoreOobeHandler that handles common requests of Oobe page.
150   CoreOobeHandler* core_handler_;
151
152   // Reference to NetworkDropdownHandler that handles interaction with
153   // network dropdown.
154   NetworkDropdownHandler* network_dropdown_handler_;
155
156   // Screens actors. Note, OobeUI owns them via |handlers_|, not directly here.
157   UpdateScreenHandler* update_screen_handler_;
158   NetworkScreenActor* network_screen_actor_;
159   EulaScreenActor* eula_screen_actor_;
160   EnrollmentScreenActor* enrollment_screen_actor_;
161   ResetScreenActor* reset_screen_actor_;
162   KioskAutolaunchScreenActor* autolaunch_screen_actor_;
163   KioskEnableScreenActor* kiosk_enable_screen_actor_;
164   WrongHWIDScreenActor* wrong_hwid_screen_actor_;
165   LocallyManagedUserCreationScreenHandler*
166       locally_managed_user_creation_screen_actor_;
167   AppLaunchSplashScreenActor* app_launch_splash_screen_actor_;
168
169   // Reference to ErrorScreenHandler that handles error screen
170   // requests and forward calls from native code to JS side.
171   ErrorScreenHandler* error_screen_handler_;
172
173   // Reference to SigninScreenHandler that handles sign-in screen requests and
174   // forward calls from native code to JS side.
175   SigninScreenHandler* signin_screen_handler_;
176
177   TermsOfServiceScreenActor* terms_of_service_screen_actor_;
178   UserImageScreenActor* user_image_screen_actor_;
179
180   std::vector<BaseScreenHandler*> handlers_;  // Non-owning pointers.
181
182   KioskAppMenuHandler* kiosk_app_menu_handler_;  // Non-owning pointers.
183
184   // Id of the current oobe/login screen.
185   Screen current_screen_;
186
187   // Maps JS screen names to screen ids.
188   std::map<std::string, Screen> screen_ids_;
189
190   // Maps screen ids to JS screen names.
191   std::vector<std::string> screen_names_;
192
193   // Flag that indicates whether JS part is fully loaded and ready to accept
194   // calls.
195   bool ready_;
196
197   // Callbacks to notify when JS part is fully loaded and ready to accept calls.
198   std::vector<base::Closure> ready_callbacks_;
199
200   // List of registered observers.
201   ObserverList<Observer> observer_list_;
202
203   DISALLOW_COPY_AND_ASSIGN(OobeUI);
204 };
205
206 }  // namespace chromeos
207
208 #endif  // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_