ProfilePolicyConnectorFactory: Refactoring from Profile to BrowserContext.
[chromium-blink-merge.git] / chrome / browser / ui / webui / chromeos / login / oobe_ui.h
blob977de2f7fa51e5ce73cbc75aa27c48f83dfa2d6d
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/memory/scoped_ptr.h"
15 #include "base/observer_list.h"
16 #include "chrome/browser/chromeos/login/ui/oobe_display.h"
17 #include "chrome/browser/chromeos/settings/shutdown_policy_handler.h"
18 #include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h"
19 #include "content/public/browser/web_ui_controller.h"
21 namespace base {
22 class DictionaryValue;
23 } // namespace base
25 namespace chromeos {
26 class AppLaunchSplashScreenActor;
27 class BaseScreenHandler;
28 class ControllerPairingScreenActor;
29 class DeviceDisabledScreenActor;
30 class ErrorScreen;
31 class ErrorScreenHandler;
32 class GaiaScreenHandler;
33 class HostPairingScreenActor;
34 class KioskAppMenuHandler;
35 class KioskEnableScreenActor;
36 class LoginScreenContext;
37 class NativeWindowDelegate;
38 class NetworkDropdownHandler;
39 class NetworkStateInformer;
40 class SigninScreenHandler;
41 class SigninScreenHandlerDelegate;
42 class UpdateScreenHandler;
43 class UserBoardScreenHandler;
45 // A custom WebUI that defines datasource for out-of-box-experience (OOBE) UI:
46 // - welcome screen (setup language/keyboard/network).
47 // - eula screen (CrOS (+ OEM) EULA content/TPM password/crash reporting).
48 // - update screen.
49 class OobeUI : public OobeDisplay,
50 public content::WebUIController,
51 public CoreOobeHandler::Delegate,
52 public ShutdownPolicyHandler::Delegate {
53 public:
54 class Observer {
55 public:
56 virtual ~Observer() {}
57 virtual void OnCurrentScreenChanged(
58 Screen current_screen, Screen new_screen) = 0;
61 // List of known types of OobeUI. Type added as path in chrome://oobe url, for
62 // example chrome://oobe/user-adding.
63 static const char kOobeDisplay[];
64 static const char kLoginDisplay[];
65 static const char kLockDisplay[];
66 static const char kUserAddingDisplay[];
67 static const char kAppLaunchSplashDisplay[];
68 static const char kNewOobeDisplay[];
70 // JS oobe/login screens names.
71 static const char kScreenOobeHIDDetection[];
72 static const char kScreenOobeNetwork[];
73 static const char kScreenOobeEnableDebugging[];
74 static const char kScreenOobeEula[];
75 static const char kScreenOobeUpdate[];
76 static const char kScreenOobeEnrollment[];
77 static const char kScreenOobeReset[];
78 static const char kScreenGaiaSignin[];
79 static const char kScreenAccountPicker[];
80 static const char kScreenKioskAutolaunch[];
81 static const char kScreenKioskEnable[];
82 static const char kScreenErrorMessage[];
83 static const char kScreenUserImagePicker[];
84 static const char kScreenTpmError[];
85 static const char kScreenPasswordChanged[];
86 static const char kScreenSupervisedUserCreationFlow[];
87 static const char kScreenTermsOfService[];
88 static const char kScreenWrongHWID[];
89 static const char kScreenAutoEnrollmentCheck[];
90 static const char kScreenAppLaunchSplash[];
91 static const char kScreenConfirmPassword[];
92 static const char kScreenFatalError[];
93 static const char kScreenHIDDetection[];
94 static const char kScreenControllerPairing[];
95 static const char kScreenHostPairing[];
96 static const char kScreenDeviceDisabled[];
98 OobeUI(content::WebUI* web_ui, const GURL& url);
99 ~OobeUI() override;
101 // OobeDisplay implementation:
102 CoreOobeActor* GetCoreOobeActor() override;
103 NetworkView* GetNetworkView() override;
104 EulaView* GetEulaView() override;
105 UpdateView* GetUpdateView() override;
106 EnableDebuggingScreenActor* GetEnableDebuggingScreenActor() override;
107 EnrollmentScreenActor* GetEnrollmentScreenActor() override;
108 ResetView* GetResetView() override;
109 KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() override;
110 KioskEnableScreenActor* GetKioskEnableScreenActor() override;
111 TermsOfServiceScreenActor* GetTermsOfServiceScreenActor() override;
112 UserImageView* GetUserImageView() override;
113 NetworkErrorView* GetNetworkErrorView() override;
114 WrongHWIDScreenActor* GetWrongHWIDScreenActor() override;
115 AutoEnrollmentCheckScreenActor* GetAutoEnrollmentCheckScreenActor() override;
116 SupervisedUserCreationScreenHandler* GetSupervisedUserCreationScreenActor()
117 override;
118 AppLaunchSplashScreenActor* GetAppLaunchSplashScreenActor() override;
119 bool IsJSReady(const base::Closure& display_is_ready_callback) override;
120 HIDDetectionView* GetHIDDetectionView() override;
121 ControllerPairingScreenActor* GetControllerPairingScreenActor() override;
122 HostPairingScreenActor* GetHostPairingScreenActor() override;
123 DeviceDisabledScreenActor* GetDeviceDisabledScreenActor() override;
124 GaiaScreenHandler* GetGaiaScreenActor() override;
125 UserBoardView* GetUserBoardScreenActor() override;
127 // ShutdownPolicyObserver::Delegate
128 void OnShutdownPolicyChanged(bool reboot_on_shutdown) override;
130 // Collects localized strings from the owned handlers.
131 void GetLocalizedStrings(base::DictionaryValue* localized_strings);
133 // Initializes the handlers.
134 void InitializeHandlers();
136 // Invoked after the async assets load. The screen handler that has the same
137 // async assets load id will be initialized.
138 void OnScreenAssetsLoaded(const std::string& async_assets_load_id);
140 // Shows or hides OOBE UI elements.
141 void ShowOobeUI(bool show);
143 // Shows the signin screen.
144 void ShowSigninScreen(const LoginScreenContext& context,
145 SigninScreenHandlerDelegate* delegate,
146 NativeWindowDelegate* native_window_delegate);
148 // Resets the delegate set in ShowSigninScreen.
149 void ResetSigninScreenHandlerDelegate();
151 // Add and remove observers for screen change events.
152 void AddObserver(Observer* observer);
153 void RemoveObserver(Observer* observer);
155 Screen current_screen() const { return current_screen_; }
157 Screen previous_screen() const { return previous_screen_; }
159 const std::string& display_type() const { return display_type_; }
161 const std::string& GetScreenName(Screen screen) const;
163 SigninScreenHandler* signin_screen_handler_for_test() {
164 return signin_screen_handler_;
167 NetworkStateInformer* network_state_informer_for_test() const {
168 return network_state_informer_.get();
171 private:
172 // Initializes |screen_ids_| and |screen_names_| structures.
173 void InitializeScreenMaps();
175 void AddScreenHandler(BaseScreenHandler* handler);
177 // CoreOobeHandler::Delegate implementation:
178 void OnCurrentScreenChanged(const std::string& screen) override;
180 // Type of UI.
181 std::string display_type_;
183 // Reference to NetworkStateInformer that handles changes in network
184 // state.
185 scoped_refptr<NetworkStateInformer> network_state_informer_;
187 // Reference to CoreOobeHandler that handles common requests of Oobe page.
188 CoreOobeHandler* core_handler_;
190 // Reference to NetworkDropdownHandler that handles interaction with
191 // network dropdown.
192 NetworkDropdownHandler* network_dropdown_handler_;
194 // Screens actors. Note, OobeUI owns them via |handlers_|, not directly here.
195 UpdateScreenHandler* update_screen_handler_;
196 NetworkView* network_view_;
197 EnableDebuggingScreenActor* debugging_screen_actor_;
198 EulaView* eula_view_;
199 EnrollmentScreenActor* enrollment_screen_actor_;
200 ResetView* reset_view_;
201 HIDDetectionView* hid_detection_view_;
202 KioskAutolaunchScreenActor* autolaunch_screen_actor_;
203 KioskEnableScreenActor* kiosk_enable_screen_actor_;
204 WrongHWIDScreenActor* wrong_hwid_screen_actor_;
205 AutoEnrollmentCheckScreenActor* auto_enrollment_check_screen_actor_;
206 SupervisedUserCreationScreenHandler*
207 supervised_user_creation_screen_actor_;
208 AppLaunchSplashScreenActor* app_launch_splash_screen_actor_;
209 ControllerPairingScreenActor* controller_pairing_screen_actor_;
210 HostPairingScreenActor* host_pairing_screen_actor_;
211 DeviceDisabledScreenActor* device_disabled_screen_actor_;
213 // Reference to ErrorScreenHandler that handles error screen
214 // requests and forward calls from native code to JS side.
215 ErrorScreenHandler* error_screen_handler_;
217 // Reference to GaiaScreenHandler that handles gaia screen requests and
218 // forwards calls from native code to JS side.
219 GaiaScreenHandler* gaia_screen_handler_;
221 // Reference to UserBoardScreenHandler, that allows to pick user on device
222 // and attempt authentication.
223 UserBoardScreenHandler* user_board_screen_handler_;
225 // Reference to SigninScreenHandler that handles sign-in screen requests and
226 // forwards calls from native code to JS side.
227 SigninScreenHandler* signin_screen_handler_;
229 TermsOfServiceScreenActor* terms_of_service_screen_actor_;
230 UserImageView* user_image_view_;
232 std::vector<BaseScreenHandler*> handlers_; // Non-owning pointers.
234 KioskAppMenuHandler* kiosk_app_menu_handler_; // Non-owning pointers.
236 scoped_ptr<ErrorScreen> error_screen_;
238 // Id of the current oobe/login screen.
239 Screen current_screen_;
241 // Id of the previous oobe/login screen.
242 Screen previous_screen_;
244 // Maps JS screen names to screen ids.
245 std::map<std::string, Screen> screen_ids_;
247 // Maps screen ids to JS screen names.
248 std::vector<std::string> screen_names_;
250 // Flag that indicates whether JS part is fully loaded and ready to accept
251 // calls.
252 bool ready_;
254 // Callbacks to notify when JS part is fully loaded and ready to accept calls.
255 std::vector<base::Closure> ready_callbacks_;
257 // List of registered observers.
258 ObserverList<Observer> observer_list_;
260 // Observer of CrosSettings watching the kRebootOnShutdown policy.
261 scoped_ptr<ShutdownPolicyHandler> shutdown_policy_handler_;
263 DISALLOW_COPY_AND_ASSIGN(OobeUI);
266 } // namespace chromeos
268 #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_