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