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 "chrome/browser/chromeos/login/oobe_display.h" 15 #include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h" 16 #include "content/public/browser/web_ui_controller.h" 17 18 namespace base { 19 class DictionaryValue; 20 } 21 22 namespace chromeos { 23 class BaseScreenHandler; 24 class CoreOobeHandler; 25 class ErrorScreenHandler; 26 class KioskAppMenuHandler; 27 class KioskEnableScreenActor; 28 class NativeWindowDelegate; 29 class NetworkDropdownHandler; 30 class NetworkStateInformer; 31 class SigninScreenHandler; 32 class SigninScreenHandlerDelegate; 33 class UpdateScreenHandler; 34 35 // A custom WebUI that defines datasource for out-of-box-experience (OOBE) UI: 36 // - welcome screen (setup language/keyboard/network). 37 // - eula screen (CrOS (+ OEM) EULA content/TPM password/crash reporting). 38 // - update screen. 39 class OobeUI : public OobeDisplay, 40 public content::WebUIController, 41 public CoreOobeHandler::Delegate { 42 public: 43 // JS oobe/login screens names. 44 static const char kScreenOobeNetwork[]; 45 static const char kScreenOobeEula[]; 46 static const char kScreenOobeUpdate[]; 47 static const char kScreenOobeEnrollment[]; 48 static const char kScreenGaiaSignin[]; 49 static const char kScreenAccountPicker[]; 50 static const char kScreenKioskAutolaunch[]; 51 static const char kScreenKioskEnable[]; 52 static const char kScreenErrorMessage[]; 53 static const char kScreenUserImagePicker[]; 54 static const char kScreenTpmError[]; 55 static const char kScreenPasswordChanged[]; 56 static const char kScreenManagedUserCreationFlow[]; 57 static const char kScreenTermsOfService[]; 58 static const char kScreenWrongHWID[]; 59 60 explicit OobeUI(content::WebUI* web_ui); 61 virtual ~OobeUI(); 62 63 // OobeDisplay implementation: 64 virtual void ShowScreen(WizardScreen* screen) OVERRIDE; 65 virtual void HideScreen(WizardScreen* screen) OVERRIDE; 66 virtual UpdateScreenActor* GetUpdateScreenActor() OVERRIDE; 67 virtual NetworkScreenActor* GetNetworkScreenActor() OVERRIDE; 68 virtual EulaScreenActor* GetEulaScreenActor() OVERRIDE; 69 virtual EnrollmentScreenActor* GetEnrollmentScreenActor() OVERRIDE; 70 virtual ResetScreenActor* GetResetScreenActor() OVERRIDE; 71 virtual KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() OVERRIDE; 72 virtual KioskEnableScreenActor* GetKioskEnableScreenActor() OVERRIDE; 73 virtual TermsOfServiceScreenActor* 74 GetTermsOfServiceScreenActor() OVERRIDE; 75 virtual UserImageScreenActor* GetUserImageScreenActor() OVERRIDE; 76 virtual ErrorScreenActor* GetErrorScreenActor() OVERRIDE; 77 virtual WrongHWIDScreenActor* GetWrongHWIDScreenActor() OVERRIDE; 78 virtual LocallyManagedUserCreationScreenHandler* 79 GetLocallyManagedUserCreationScreenActor() OVERRIDE; 80 virtual bool IsJSReady(const base::Closure& display_is_ready_callback) 81 OVERRIDE; 82 83 // Collects localized strings from the owned handlers. 84 void GetLocalizedStrings(base::DictionaryValue* localized_strings); 85 86 // Initializes the handlers. 87 void InitializeHandlers(); 88 89 // Shows or hides OOBE UI elements. 90 void ShowOobeUI(bool show); 91 92 // TODO(rkc): Create a separate retail mode login UI and move this method 93 // there - see crbug.com/157671. 94 // Shows a login spinner for retail mode logins. 95 void ShowRetailModeLoginSpinner(); 96 97 // Shows the signin screen. 98 void ShowSigninScreen(SigninScreenHandlerDelegate* delegate, 99 NativeWindowDelegate* native_window_delegate); 100 101 // Resets the delegate set in ShowSigninScreen. 102 void ResetSigninScreenHandlerDelegate(); 103 104 Screen current_screen() const { return current_screen_; } 105 106 const std::string& GetScreenName(Screen screen) const; 107 108 private: 109 // Initializes |screen_ids_| and |screen_names_| structures. 110 void InitializeScreenMaps(); 111 112 void AddScreenHandler(BaseScreenHandler* handler); 113 114 // CoreOobeHandler::Delegate implementation: 115 virtual void OnCurrentScreenChanged(const std::string& screen) OVERRIDE; 116 117 // Reference to NetworkStateInformer that handles changes in network 118 // state. 119 scoped_refptr<NetworkStateInformer> network_state_informer_; 120 121 // Reference to CoreOobeHandler that handles common requests of Oobe page. 122 CoreOobeHandler* core_handler_; 123 124 // Reference to NetworkDropdownHandler that handles interaction with 125 // network dropdown. 126 NetworkDropdownHandler* network_dropdown_handler_; 127 128 // Screens actors. Note, OobeUI owns them via |handlers_|, not directly here. 129 UpdateScreenHandler* update_screen_handler_; 130 NetworkScreenActor* network_screen_actor_; 131 EulaScreenActor* eula_screen_actor_; 132 EnrollmentScreenActor* enrollment_screen_actor_; 133 ResetScreenActor* reset_screen_actor_; 134 KioskAutolaunchScreenActor* autolaunch_screen_actor_; 135 KioskEnableScreenActor* kiosk_enable_screen_actor_; 136 WrongHWIDScreenActor* wrong_hwid_screen_actor_; 137 LocallyManagedUserCreationScreenHandler* 138 locally_managed_user_creation_screen_actor_; 139 140 // Reference to ErrorScreenHandler that handles error screen 141 // requests and forward calls from native code to JS side. 142 ErrorScreenHandler* error_screen_handler_; 143 144 // Reference to SigninScreenHandler that handles sign-in screen requests and 145 // forward calls from native code to JS side. 146 SigninScreenHandler* signin_screen_handler_; 147 148 TermsOfServiceScreenActor* terms_of_service_screen_actor_; 149 UserImageScreenActor* user_image_screen_actor_; 150 151 std::vector<BaseScreenHandler*> handlers_; // Non-owning pointers. 152 153 KioskAppMenuHandler* kiosk_app_menu_handler_; // Non-owning pointers. 154 155 // Id of the current oobe/login screen. 156 Screen current_screen_; 157 158 // Maps JS screen names to screen ids. 159 std::map<std::string, Screen> screen_ids_; 160 161 // Maps screen ids to JS screen names. 162 std::vector<std::string> screen_names_; 163 164 // Flag that indicates whether JS part is fully loaded and ready to accept 165 // calls. 166 bool ready_; 167 168 // Callbacks to notify when JS part is fully loaded and ready to accept calls. 169 std::vector<base::Closure> ready_callbacks_; 170 171 DISALLOW_COPY_AND_ASSIGN(OobeUI); 172 }; 173 174 } // namespace chromeos 175 176 #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_ 177