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