1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
#include <map>
#include <string>
#include <vector>
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/observer_list.h"
#include "chrome/browser/chromeos/login/ui/oobe_display.h"
#include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h"
#include "content/public/browser/web_ui_controller.h"
namespace base {
class DictionaryValue;
} // namespace base
namespace chromeos {
class AppLaunchSplashScreenActor;
class BaseScreenHandler;
class ControllerPairingScreenActor;
class DeviceDisabledScreenActor;
class ErrorScreen;
class ErrorScreenHandler;
class GaiaScreenHandler;
class HostPairingScreenActor;
class KioskAppMenuHandler;
class KioskEnableScreenActor;
class LoginScreenContext;
class NativeWindowDelegate;
class NetworkDropdownHandler;
class NetworkStateInformer;
class SigninScreenHandler;
class SigninScreenHandlerDelegate;
class UpdateScreenHandler;
class UserBoardScreenHandler;
// A custom WebUI that defines datasource for out-of-box-experience (OOBE) UI:
// - welcome screen (setup language/keyboard/network).
// - eula screen (CrOS (+ OEM) EULA content/TPM password/crash reporting).
// - update screen.
class OobeUI : public OobeDisplay,
public content::WebUIController,
public CoreOobeHandler::Delegate {
public:
class Observer {
public:
virtual ~Observer() {}
virtual void OnCurrentScreenChanged(
Screen current_screen, Screen new_screen) = 0;
};
// List of known types of OobeUI. Type added as path in chrome://oobe url, for
// example chrome://oobe/user-adding.
static const char kOobeDisplay[];
static const char kLoginDisplay[];
static const char kLockDisplay[];
static const char kUserAddingDisplay[];
static const char kAppLaunchSplashDisplay[];
static const char kNewOobeDisplay[];
// JS oobe/login screens names.
static const char kScreenOobeHIDDetection[];
static const char kScreenOobeNetwork[];
static const char kScreenOobeEnableDebugging[];
static const char kScreenOobeEula[];
static const char kScreenOobeUpdate[];
static const char kScreenOobeEnrollment[];
static const char kScreenOobeReset[];
static const char kScreenGaiaSignin[];
static const char kScreenAccountPicker[];
static const char kScreenKioskAutolaunch[];
static const char kScreenKioskEnable[];
static const char kScreenErrorMessage[];
static const char kScreenUserImagePicker[];
static const char kScreenTpmError[];
static const char kScreenPasswordChanged[];
static const char kScreenSupervisedUserCreationFlow[];
static const char kScreenTermsOfService[];
static const char kScreenWrongHWID[];
static const char kScreenAutoEnrollmentCheck[];
static const char kScreenAppLaunchSplash[];
static const char kScreenConfirmPassword[];
static const char kScreenFatalError[];
static const char kScreenHIDDetection[];
static const char kScreenControllerPairing[];
static const char kScreenHostPairing[];
static const char kScreenDeviceDisabled[];
OobeUI(content::WebUI* web_ui, const GURL& url);
virtual ~OobeUI();
// OobeDisplay implementation:
virtual CoreOobeActor* GetCoreOobeActor() override;
virtual UpdateScreenActor* GetUpdateScreenActor() override;
virtual NetworkView* GetNetworkView() override;
virtual EulaView* GetEulaView() override;
virtual EnableDebuggingScreenActor* GetEnableDebuggingScreenActor() override;
virtual EnrollmentScreenActor* GetEnrollmentScreenActor() override;
virtual ResetScreenActor* GetResetScreenActor() override;
virtual KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() override;
virtual KioskEnableScreenActor* GetKioskEnableScreenActor() override;
virtual TermsOfServiceScreenActor*
GetTermsOfServiceScreenActor() override;
virtual UserImageScreenActor* GetUserImageScreenActor() override;
virtual ErrorScreenActor* GetErrorScreenActor() override;
virtual WrongHWIDScreenActor* GetWrongHWIDScreenActor() override;
virtual AutoEnrollmentCheckScreenActor*
GetAutoEnrollmentCheckScreenActor() override;
virtual SupervisedUserCreationScreenHandler*
GetSupervisedUserCreationScreenActor() override;
virtual AppLaunchSplashScreenActor*
GetAppLaunchSplashScreenActor() override;
virtual bool IsJSReady(const base::Closure& display_is_ready_callback)
override;
virtual HIDDetectionScreenActor* GetHIDDetectionScreenActor() override;
virtual ControllerPairingScreenActor* GetControllerPairingScreenActor()
override;
virtual HostPairingScreenActor* GetHostPairingScreenActor() override;
DeviceDisabledScreenActor* GetDeviceDisabledScreenActor() override;
virtual GaiaScreenHandler* GetGaiaScreenActor() override;
virtual UserBoardView* GetUserBoardScreenActor() override;
// Collects localized strings from the owned handlers.
void GetLocalizedStrings(base::DictionaryValue* localized_strings);
// Initializes the handlers.
void InitializeHandlers();
// Invoked after the async assets load. The screen handler that has the same
// async assets load id will be initialized.
void OnScreenAssetsLoaded(const std::string& async_assets_load_id);
// Shows or hides OOBE UI elements.
void ShowOobeUI(bool show);
// Shows the signin screen.
void ShowSigninScreen(const LoginScreenContext& context,
SigninScreenHandlerDelegate* delegate,
NativeWindowDelegate* native_window_delegate);
// Resets the delegate set in ShowSigninScreen.
void ResetSigninScreenHandlerDelegate();
// Add and remove observers for screen change events.
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
Screen current_screen() const { return current_screen_; }
Screen previous_screen() const { return previous_screen_; }
const std::string& display_type() const { return display_type_; }
const std::string& GetScreenName(Screen screen) const;
SigninScreenHandler* signin_screen_handler_for_test() {
return signin_screen_handler_;
}
NetworkStateInformer* network_state_informer_for_test() const {
return network_state_informer_.get();
}
private:
// Initializes |screen_ids_| and |screen_names_| structures.
void InitializeScreenMaps();
void AddScreenHandler(BaseScreenHandler* handler);
// CoreOobeHandler::Delegate implementation:
virtual void OnCurrentScreenChanged(const std::string& screen) override;
// Type of UI.
std::string display_type_;
// Reference to NetworkStateInformer that handles changes in network
// state.
scoped_refptr<NetworkStateInformer> network_state_informer_;
// Reference to CoreOobeHandler that handles common requests of Oobe page.
CoreOobeHandler* core_handler_;
// Reference to NetworkDropdownHandler that handles interaction with
// network dropdown.
NetworkDropdownHandler* network_dropdown_handler_;
// Screens actors. Note, OobeUI owns them via |handlers_|, not directly here.
UpdateScreenHandler* update_screen_handler_;
NetworkView* network_view_;
EnableDebuggingScreenActor* debugging_screen_actor_;
EulaView* eula_view_;
EnrollmentScreenActor* enrollment_screen_actor_;
HIDDetectionScreenActor* hid_detection_screen_actor_;
ResetScreenActor* reset_screen_actor_;
KioskAutolaunchScreenActor* autolaunch_screen_actor_;
KioskEnableScreenActor* kiosk_enable_screen_actor_;
WrongHWIDScreenActor* wrong_hwid_screen_actor_;
AutoEnrollmentCheckScreenActor* auto_enrollment_check_screen_actor_;
SupervisedUserCreationScreenHandler*
supervised_user_creation_screen_actor_;
AppLaunchSplashScreenActor* app_launch_splash_screen_actor_;
ControllerPairingScreenActor* controller_pairing_screen_actor_;
HostPairingScreenActor* host_pairing_screen_actor_;
DeviceDisabledScreenActor* device_disabled_screen_actor_;
// Reference to ErrorScreenHandler that handles error screen
// requests and forward calls from native code to JS side.
ErrorScreenHandler* error_screen_handler_;
// Reference to GaiaScreenHandler that handles gaia screen requests and
// forwards calls from native code to JS side.
GaiaScreenHandler* gaia_screen_handler_;
// Reference to UserBoardScreenHandler, that allows to pick user on device
// and attempt authentication.
UserBoardScreenHandler* user_board_screen_handler_;
// Reference to SigninScreenHandler that handles sign-in screen requests and
// forwards calls from native code to JS side.
SigninScreenHandler* signin_screen_handler_;
TermsOfServiceScreenActor* terms_of_service_screen_actor_;
UserImageScreenActor* user_image_screen_actor_;
std::vector<BaseScreenHandler*> handlers_; // Non-owning pointers.
KioskAppMenuHandler* kiosk_app_menu_handler_; // Non-owning pointers.
scoped_ptr<ErrorScreen> error_screen_;
// Id of the current oobe/login screen.
Screen current_screen_;
// Id of the previous oobe/login screen.
Screen previous_screen_;
// Maps JS screen names to screen ids.
std::map<std::string, Screen> screen_ids_;
// Maps screen ids to JS screen names.
std::vector<std::string> screen_names_;
// Flag that indicates whether JS part is fully loaded and ready to accept
// calls.
bool ready_;
// Callbacks to notify when JS part is fully loaded and ready to accept calls.
std::vector<base::Closure> ready_callbacks_;
// List of registered observers.
ObserverList<Observer> observer_list_;
DISALLOW_COPY_AND_ASSIGN(OobeUI);
};
} // namespace chromeos
#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
|