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