cros: Wait for auto enrollment check before enabling kiosk.
[chromium-blink-merge.git] / chrome / browser / ui / webui / chromeos / login / oobe_ui.h
blob387139f23e6c2a87fc681110aa8bb1dd995478ad
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.
5 #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
6 #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
8 #include <map>
9 #include <string>
10 #include <vector>
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"
19 namespace base {
20 class DictionaryValue;
21 } // namespace base
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;
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;
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[];
72 OobeUI(content::WebUI* web_ui, const GURL& url);
73 virtual ~OobeUI();
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;
97 // Collects localized strings from the owned handlers.
98 void GetLocalizedStrings(base::DictionaryValue* localized_strings);
100 // Initializes the handlers.
101 void InitializeHandlers();
103 // Shows or hides OOBE UI elements.
104 void ShowOobeUI(bool show);
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();
111 // Shows the signin screen.
112 void ShowSigninScreen(SigninScreenHandlerDelegate* delegate,
113 NativeWindowDelegate* native_window_delegate);
115 // Shows the kiosk splash screen.
116 void ShowAppLaunchSplashScreen();
118 // Resets the delegate set in ShowSigninScreen.
119 void ResetSigninScreenHandlerDelegate();
121 // Add and remove observers for screen change events.
122 void AddObserver(Observer* observer);
123 void RemoveObserver(Observer* observer);
125 Screen current_screen() const { return current_screen_; }
127 const std::string& GetScreenName(Screen screen) const;
129 SigninScreenHandler* signin_screen_handler_for_test() {
130 return signin_screen_handler_;
133 private:
134 // Initializes |screen_ids_| and |screen_names_| structures.
135 void InitializeScreenMaps();
137 void AddScreenHandler(BaseScreenHandler* handler);
139 // CoreOobeHandler::Delegate implementation:
140 virtual void OnCurrentScreenChanged(const std::string& screen) OVERRIDE;
142 // Type of UI.
143 std::string display_type_;
145 // Reference to NetworkStateInformer that handles changes in network
146 // state.
147 scoped_refptr<NetworkStateInformer> network_state_informer_;
149 // Reference to CoreOobeHandler that handles common requests of Oobe page.
150 CoreOobeHandler* core_handler_;
152 // Reference to NetworkDropdownHandler that handles interaction with
153 // network dropdown.
154 NetworkDropdownHandler* network_dropdown_handler_;
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_;
169 // Reference to ErrorScreenHandler that handles error screen
170 // requests and forward calls from native code to JS side.
171 ErrorScreenHandler* error_screen_handler_;
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_;
177 TermsOfServiceScreenActor* terms_of_service_screen_actor_;
178 UserImageScreenActor* user_image_screen_actor_;
180 std::vector<BaseScreenHandler*> handlers_; // Non-owning pointers.
182 KioskAppMenuHandler* kiosk_app_menu_handler_; // Non-owning pointers.
184 // Id of the current oobe/login screen.
185 Screen current_screen_;
187 // Maps JS screen names to screen ids.
188 std::map<std::string, Screen> screen_ids_;
190 // Maps screen ids to JS screen names.
191 std::vector<std::string> screen_names_;
193 // Flag that indicates whether JS part is fully loaded and ready to accept
194 // calls.
195 bool ready_;
197 // Callbacks to notify when JS part is fully loaded and ready to accept calls.
198 std::vector<base::Closure> ready_callbacks_;
200 // List of registered observers.
201 ObserverList<Observer> observer_list_;
203 DISALLOW_COPY_AND_ASSIGN(OobeUI);
206 } // namespace chromeos
208 #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_