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/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"
20 class DictionaryValue
;
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).
41 class OobeUI
: public OobeDisplay
,
42 public content::WebUIController
,
43 public CoreOobeHandler::Delegate
{
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
);
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
)
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_
;
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
;
143 std::string display_type_
;
145 // Reference to NetworkStateInformer that handles changes in network
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
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
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_