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_
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"
22 class DictionaryValue
;
26 class AppLaunchSplashScreenActor
;
27 class BaseScreenHandler
;
28 class ControllerPairingScreenActor
;
29 class DeviceDisabledScreenActor
;
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).
49 class OobeUI
: public OobeDisplay
,
50 public content::WebUIController
,
51 public CoreOobeHandler::Delegate
,
52 public ShutdownPolicyHandler::Delegate
{
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
);
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()
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();
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
;
181 std::string display_type_
;
183 // Reference to NetworkStateInformer that handles changes in network
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
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
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_