1 // Copyright (c) 2012 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 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
7 #include "base/command_line.h"
8 #include "base/logging.h"
9 #include "base/strings/stringprintf.h"
10 #include "base/values.h"
11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/browser_process_platform_part.h"
13 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h"
14 #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen_actor.h"
15 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen_actor.h"
16 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
17 #include "chrome/browser/chromeos/policy/consumer_management_service.h"
18 #include "chrome/browser/chromeos/system/input_device_settings.h"
19 #include "chrome/browser/extensions/signin/gaia_auth_extension_loader.h"
20 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/ui/webui/about_ui.h"
22 #include "chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.h"
23 #include "chrome/browser/ui/webui/chromeos/login/auto_enrollment_check_screen_handler.h"
24 #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
25 #include "chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h"
26 #include "chrome/browser/ui/webui/chromeos/login/device_disabled_screen_handler.h"
27 #include "chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h"
28 #include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h"
29 #include "chrome/browser/ui/webui/chromeos/login/eula_screen_handler.h"
30 #include "chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h"
31 #include "chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.h"
32 #include "chrome/browser/ui/webui/chromeos/login/host_pairing_screen_handler.h"
33 #include "chrome/browser/ui/webui/chromeos/login/kiosk_app_menu_handler.h"
34 #include "chrome/browser/ui/webui/chromeos/login/kiosk_autolaunch_screen_handler.h"
35 #include "chrome/browser/ui/webui/chromeos/login/kiosk_enable_screen_handler.h"
36 #include "chrome/browser/ui/webui/chromeos/login/network_dropdown_handler.h"
37 #include "chrome/browser/ui/webui/chromeos/login/network_screen_handler.h"
38 #include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h"
39 #include "chrome/browser/ui/webui/chromeos/login/polymer_resources_map.h"
40 #include "chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h"
41 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
42 #include "chrome/browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.h"
43 #include "chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.h"
44 #include "chrome/browser/ui/webui/chromeos/login/update_screen_handler.h"
45 #include "chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h"
46 #include "chrome/browser/ui/webui/chromeos/login/wrong_hwid_screen_handler.h"
47 #include "chrome/browser/ui/webui/options/chromeos/user_image_source.h"
48 #include "chrome/browser/ui/webui/theme_source.h"
49 #include "chrome/common/chrome_constants.h"
50 #include "chrome/common/url_constants.h"
51 #include "chromeos/chromeos_switches.h"
52 #include "content/public/browser/web_ui.h"
53 #include "content/public/browser/web_ui_data_source.h"
54 #include "grit/browser_resources.h"
55 #include "grit/chrome_unscaled_resources.h"
56 #include "ui/base/resource/resource_bundle.h"
57 #include "ui/base/webui/web_ui_util.h"
63 const char* kKnownDisplayTypes[] = {
65 OobeUI::kLoginDisplay,
67 OobeUI::kUserAddingDisplay,
68 OobeUI::kAppLaunchSplashDisplay
71 const char kStringsJSPath[] = "strings.js";
72 const char kLoginJSPath[] = "login.js";
73 const char kOobeJSPath[] = "oobe.js";
74 const char kKeyboardUtilsJSPath[] = "keyboard_utils.js";
75 const char kDemoUserLoginJSPath[] = "demo_user_login.js";
76 const char kCustomElementsHTMLPath[] = "custom_elements.html";
77 const char kCustomElementsJSPath[] = "custom_elements.js";
79 // Paths for deferred resource loading.
80 const char kEnrollmentHTMLPath[] = "enrollment.html";
81 const char kEnrollmentCSSPath[] = "enrollment.css";
82 const char kEnrollmentJSPath[] = "enrollment.js";
84 void AddPolymerResourcesPaths(content::WebUIDataSource* source) {
85 for (const auto& mapping: GetPolymerResourcesMap())
86 source->AddResourcePath(mapping.first, mapping.second);
89 // Creates a WebUIDataSource for chrome://oobe
90 content::WebUIDataSource* CreateOobeUIDataSource(
91 const base::DictionaryValue& localized_strings,
92 const std::string& display_type) {
93 content::WebUIDataSource* source =
94 content::WebUIDataSource::Create(chrome::kChromeUIOobeHost);
95 source->AddLocalizedStrings(localized_strings);
96 source->SetJsonPath(kStringsJSPath);
98 if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) {
99 source->SetDefaultResource(IDR_DEMO_USER_LOGIN_HTML);
100 source->AddResourcePath(kDemoUserLoginJSPath, IDR_DEMO_USER_LOGIN_JS);
103 if (display_type == OobeUI::kOobeDisplay) {
104 source->SetDefaultResource(IDR_OOBE_HTML);
105 source->AddResourcePath(kOobeJSPath, IDR_OOBE_JS);
107 source->SetDefaultResource(IDR_LOGIN_HTML);
108 source->AddResourcePath(kLoginJSPath, IDR_LOGIN_JS);
110 source->AddResourcePath(kKeyboardUtilsJSPath, IDR_KEYBOARD_UTILS_JS);
111 source->OverrideContentSecurityPolicyFrameSrc(
113 "frame-src chrome://terms/ %s/;",
114 extensions::kGaiaAuthExtensionOrigin));
116 // Serve deferred resources.
117 source->AddResourcePath(kEnrollmentHTMLPath, IDR_OOBE_ENROLLMENT_HTML);
118 source->AddResourcePath(kEnrollmentCSSPath, IDR_OOBE_ENROLLMENT_CSS);
119 source->AddResourcePath(kEnrollmentJSPath, IDR_OOBE_ENROLLMENT_JS);
121 if (display_type == OobeUI::kOobeDisplay) {
122 AddPolymerResourcesPaths(source);
123 source->AddResourcePath(kCustomElementsHTMLPath, IDR_CUSTOM_ELEMENTS_HTML);
124 source->AddResourcePath(kCustomElementsJSPath, IDR_CUSTOM_ELEMENTS_JS);
126 source->AddResourcePath("Roboto-Thin.ttf", IDR_FONT_ROBOTO_THIN);
127 source->AddResourcePath("Roboto-Light.ttf", IDR_FONT_ROBOTO_LIGHT);
128 source->AddResourcePath("Roboto-Regular.ttf", IDR_FONT_ROBOTO_REGULAR);
129 source->AddResourcePath("Roboto-Medium.ttf", IDR_FONT_ROBOTO_MEDIUM);
130 source->AddResourcePath("Roboto-Bold.ttf", IDR_FONT_ROBOTO_BOLD);
136 std::string GetDisplayType(const GURL& url) {
137 std::string path = url.path().size() ? url.path().substr(1) : "";
138 if (std::find(kKnownDisplayTypes,
139 kKnownDisplayTypes + arraysize(kKnownDisplayTypes),
140 path) == kKnownDisplayTypes + arraysize(kKnownDisplayTypes)) {
141 LOG(ERROR) << "Unknown display type '" << path << "'. Setting default.";
142 return OobeUI::kLoginDisplay;
150 const char OobeUI::kOobeDisplay[] = "oobe";
151 const char OobeUI::kLoginDisplay[] = "login";
152 const char OobeUI::kLockDisplay[] = "lock";
153 const char OobeUI::kUserAddingDisplay[] = "user-adding";
154 const char OobeUI::kAppLaunchSplashDisplay[] = "app-launch-splash";
157 const char OobeUI::kScreenOobeHIDDetection[] = "hid-detection";
158 const char OobeUI::kScreenOobeNetwork[] = "connect";
159 const char OobeUI::kScreenOobeEula[] = "eula";
160 const char OobeUI::kScreenOobeUpdate[] = "update";
161 const char OobeUI::kScreenOobeEnrollment[] = "oauth-enrollment";
162 const char OobeUI::kScreenOobeReset[] = "reset";
163 const char OobeUI::kScreenGaiaSignin[] = "gaia-signin";
164 const char OobeUI::kScreenAccountPicker[] = "account-picker";
165 const char OobeUI::kScreenKioskAutolaunch[] = "autolaunch";
166 const char OobeUI::kScreenKioskEnable[] = "kiosk-enable";
167 const char OobeUI::kScreenErrorMessage[] = "error-message";
168 const char OobeUI::kScreenUserImagePicker[] = "user-image";
169 const char OobeUI::kScreenTpmError[] = "tpm-error-message";
170 const char OobeUI::kScreenPasswordChanged[] = "password-changed";
171 const char OobeUI::kScreenSupervisedUserCreationFlow[] =
172 "supervised-user-creation";
173 const char OobeUI::kScreenTermsOfService[] = "terms-of-service";
174 const char OobeUI::kScreenWrongHWID[] = "wrong-hwid";
175 const char OobeUI::kScreenAutoEnrollmentCheck[] = "auto-enrollment-check";
176 const char OobeUI::kScreenHIDDetection[] = "hid-detection";
177 const char OobeUI::kScreenAppLaunchSplash[] = "app-launch-splash";
178 const char OobeUI::kScreenConfirmPassword[] = "confirm-password";
179 const char OobeUI::kScreenFatalError[] = "fatal-error";
180 const char OobeUI::kScreenControllerPairing[] = "controller-pairing";
181 const char OobeUI::kScreenHostPairing[] = "host-pairing";
182 const char OobeUI::kScreenDeviceDisabled[] = "device-disabled";
184 OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url)
185 : WebUIController(web_ui),
187 network_dropdown_handler_(NULL),
188 update_screen_handler_(NULL),
189 network_screen_actor_(NULL),
190 eula_screen_actor_(NULL),
191 hid_detection_screen_actor_(NULL),
192 reset_screen_actor_(NULL),
193 autolaunch_screen_actor_(NULL),
194 kiosk_enable_screen_actor_(NULL),
195 wrong_hwid_screen_actor_(NULL),
196 auto_enrollment_check_screen_actor_(NULL),
197 supervised_user_creation_screen_actor_(NULL),
198 app_launch_splash_screen_actor_(NULL),
199 controller_pairing_screen_actor_(NULL),
200 host_pairing_screen_actor_(NULL),
201 device_disabled_screen_actor_(NULL),
202 error_screen_handler_(NULL),
203 signin_screen_handler_(NULL),
204 terms_of_service_screen_actor_(NULL),
205 user_image_screen_actor_(NULL),
206 kiosk_app_menu_handler_(NULL),
207 current_screen_(SCREEN_UNKNOWN),
208 previous_screen_(SCREEN_UNKNOWN),
210 display_type_ = GetDisplayType(url);
211 InitializeScreenMaps();
213 network_state_informer_ = new NetworkStateInformer();
214 network_state_informer_->Init();
216 core_handler_ = new CoreOobeHandler(this);
217 AddScreenHandler(core_handler_);
218 core_handler_->SetDelegate(this);
220 network_dropdown_handler_ = new NetworkDropdownHandler();
221 AddScreenHandler(network_dropdown_handler_);
223 update_screen_handler_ = new UpdateScreenHandler();
224 AddScreenHandler(update_screen_handler_);
225 network_dropdown_handler_->AddObserver(update_screen_handler_);
227 if (display_type_ == kOobeDisplay) {
228 NetworkScreenHandler* network_screen_handler =
229 new NetworkScreenHandler(core_handler_);
230 network_screen_actor_ = network_screen_handler;
231 AddScreenHandler(network_screen_handler);
234 EulaScreenHandler* eula_screen_handler = new EulaScreenHandler(core_handler_);
235 eula_screen_actor_ = eula_screen_handler;
236 AddScreenHandler(eula_screen_handler);
238 ResetScreenHandler* reset_screen_handler = new ResetScreenHandler();
239 reset_screen_actor_ = reset_screen_handler;
240 AddScreenHandler(reset_screen_handler);
242 KioskAutolaunchScreenHandler* autolaunch_screen_handler =
243 new KioskAutolaunchScreenHandler();
244 autolaunch_screen_actor_ = autolaunch_screen_handler;
245 AddScreenHandler(autolaunch_screen_handler);
247 KioskEnableScreenHandler* kiosk_enable_screen_handler =
248 new KioskEnableScreenHandler();
249 kiosk_enable_screen_actor_ = kiosk_enable_screen_handler;
250 AddScreenHandler(kiosk_enable_screen_handler);
252 SupervisedUserCreationScreenHandler* supervised_user_creation_screen_handler =
253 new SupervisedUserCreationScreenHandler();
254 supervised_user_creation_screen_actor_ =
255 supervised_user_creation_screen_handler;
256 AddScreenHandler(supervised_user_creation_screen_handler);
258 WrongHWIDScreenHandler* wrong_hwid_screen_handler =
259 new WrongHWIDScreenHandler();
260 wrong_hwid_screen_actor_ = wrong_hwid_screen_handler;
261 AddScreenHandler(wrong_hwid_screen_handler);
263 AutoEnrollmentCheckScreenHandler* auto_enrollment_check_screen_handler =
264 new AutoEnrollmentCheckScreenHandler();
265 auto_enrollment_check_screen_actor_ = auto_enrollment_check_screen_handler;
266 AddScreenHandler(auto_enrollment_check_screen_handler);
268 HIDDetectionScreenHandler* hid_detection_screen_handler =
269 new HIDDetectionScreenHandler(core_handler_);
270 hid_detection_screen_actor_ = hid_detection_screen_handler;
271 AddScreenHandler(hid_detection_screen_handler);
273 error_screen_handler_ = new ErrorScreenHandler(network_state_informer_);
274 AddScreenHandler(error_screen_handler_);
276 EnrollmentScreenHandler* enrollment_screen_handler =
277 new EnrollmentScreenHandler(network_state_informer_,
278 error_screen_handler_);
279 enrollment_screen_actor_ = enrollment_screen_handler;
280 AddScreenHandler(enrollment_screen_handler);
282 TermsOfServiceScreenHandler* terms_of_service_screen_handler =
283 new TermsOfServiceScreenHandler(core_handler_);
284 terms_of_service_screen_actor_ = terms_of_service_screen_handler;
285 AddScreenHandler(terms_of_service_screen_handler);
287 UserImageScreenHandler* user_image_screen_handler =
288 new UserImageScreenHandler();
289 user_image_screen_actor_ = user_image_screen_handler;
290 AddScreenHandler(user_image_screen_handler);
292 policy::ConsumerManagementService* consumer_management =
293 g_browser_process->platform_part()->browser_policy_connector_chromeos()->
294 GetConsumerManagementService();
295 gaia_screen_handler_ =
296 new GaiaScreenHandler(
297 core_handler_, network_state_informer_, consumer_management);
298 AddScreenHandler(gaia_screen_handler_);
300 signin_screen_handler_ = new SigninScreenHandler(network_state_informer_,
301 error_screen_handler_,
303 gaia_screen_handler_);
304 AddScreenHandler(signin_screen_handler_);
306 AppLaunchSplashScreenHandler* app_launch_splash_screen_handler =
307 new AppLaunchSplashScreenHandler(network_state_informer_,
308 error_screen_handler_);
309 AddScreenHandler(app_launch_splash_screen_handler);
310 app_launch_splash_screen_actor_ = app_launch_splash_screen_handler;
312 if (display_type_ == kOobeDisplay) {
313 ControllerPairingScreenHandler* handler =
314 new ControllerPairingScreenHandler();
315 controller_pairing_screen_actor_ = handler;
316 AddScreenHandler(handler);
319 if (display_type_ == kOobeDisplay) {
320 HostPairingScreenHandler* handler = new HostPairingScreenHandler();
321 host_pairing_screen_actor_ = handler;
322 AddScreenHandler(handler);
325 DeviceDisabledScreenHandler* device_disabled_screen_handler =
326 new DeviceDisabledScreenHandler;
327 device_disabled_screen_actor_ = device_disabled_screen_handler;
328 AddScreenHandler(device_disabled_screen_handler);
330 // Initialize KioskAppMenuHandler. Note that it is NOT a screen handler.
331 kiosk_app_menu_handler_ = new KioskAppMenuHandler(network_state_informer_);
332 web_ui->AddMessageHandler(kiosk_app_menu_handler_);
334 base::DictionaryValue localized_strings;
335 GetLocalizedStrings(&localized_strings);
337 Profile* profile = Profile::FromWebUI(web_ui);
338 // Set up the chrome://theme/ source, for Chrome logo.
339 ThemeSource* theme = new ThemeSource(profile);
340 content::URLDataSource::Add(profile, theme);
342 // Set up the chrome://terms/ data source, for EULA content.
343 AboutUIHTMLSource* about_source =
344 new AboutUIHTMLSource(chrome::kChromeUITermsHost, profile);
345 content::URLDataSource::Add(profile, about_source);
347 // Set up the chrome://oobe/ source.
348 content::WebUIDataSource::Add(profile,
349 CreateOobeUIDataSource(localized_strings,
352 // Set up the chrome://userimage/ source.
353 options::UserImageSource* user_image_source =
354 new options::UserImageSource();
355 content::URLDataSource::Add(profile, user_image_source);
359 core_handler_->SetDelegate(NULL);
360 network_dropdown_handler_->RemoveObserver(update_screen_handler_);
363 CoreOobeActor* OobeUI::GetCoreOobeActor() {
364 return core_handler_;
367 UpdateScreenActor* OobeUI::GetUpdateScreenActor() {
368 return update_screen_handler_;
371 NetworkScreenActor* OobeUI::GetNetworkScreenActor() {
372 return network_screen_actor_;
375 EulaScreenActor* OobeUI::GetEulaScreenActor() {
376 return eula_screen_actor_;
379 EnrollmentScreenActor* OobeUI::GetEnrollmentScreenActor() {
380 return enrollment_screen_actor_;
383 ResetScreenActor* OobeUI::GetResetScreenActor() {
384 return reset_screen_actor_;
387 KioskAutolaunchScreenActor* OobeUI::GetKioskAutolaunchScreenActor() {
388 return autolaunch_screen_actor_;
391 KioskEnableScreenActor* OobeUI::GetKioskEnableScreenActor() {
392 return kiosk_enable_screen_actor_;
395 TermsOfServiceScreenActor* OobeUI::GetTermsOfServiceScreenActor() {
396 return terms_of_service_screen_actor_;
399 WrongHWIDScreenActor* OobeUI::GetWrongHWIDScreenActor() {
400 return wrong_hwid_screen_actor_;
403 AutoEnrollmentCheckScreenActor* OobeUI::GetAutoEnrollmentCheckScreenActor() {
404 return auto_enrollment_check_screen_actor_;
407 HIDDetectionScreenActor* OobeUI::GetHIDDetectionScreenActor() {
408 return hid_detection_screen_actor_;
411 ControllerPairingScreenActor* OobeUI::GetControllerPairingScreenActor() {
412 return controller_pairing_screen_actor_;
415 HostPairingScreenActor* OobeUI::GetHostPairingScreenActor() {
416 return host_pairing_screen_actor_;
419 DeviceDisabledScreenActor* OobeUI::GetDeviceDisabledScreenActor() {
420 return device_disabled_screen_actor_;
423 UserImageScreenActor* OobeUI::GetUserImageScreenActor() {
424 return user_image_screen_actor_;
427 ErrorScreenActor* OobeUI::GetErrorScreenActor() {
428 return error_screen_handler_;
431 SupervisedUserCreationScreenHandler*
432 OobeUI::GetSupervisedUserCreationScreenActor() {
433 return supervised_user_creation_screen_actor_;
436 AppLaunchSplashScreenActor*
437 OobeUI::GetAppLaunchSplashScreenActor() {
438 return app_launch_splash_screen_actor_;
441 void OobeUI::GetLocalizedStrings(base::DictionaryValue* localized_strings) {
442 // Note, handlers_[0] is a GenericHandler used by the WebUI.
443 for (size_t i = 0; i < handlers_.size(); ++i)
444 handlers_[i]->GetLocalizedStrings(localized_strings);
445 webui::SetFontAndTextDirection(localized_strings);
446 kiosk_app_menu_handler_->GetLocalizedStrings(localized_strings);
448 #if defined(GOOGLE_CHROME_BUILD)
449 localized_strings->SetString("buildType", "chrome");
451 localized_strings->SetString("buildType", "chromium");
454 // If we're not doing boot animation then WebUI should trigger
455 // wallpaper load on boot.
456 if (CommandLine::ForCurrentProcess()->HasSwitch(
457 switches::kDisableBootAnimation)) {
458 localized_strings->SetString("bootIntoWallpaper", "on");
460 localized_strings->SetString("bootIntoWallpaper", "off");
463 bool keyboard_driven_oobe =
464 system::InputDeviceSettings::Get()->ForceKeyboardDrivenUINavigation();
465 localized_strings->SetString("highlightStrength",
466 keyboard_driven_oobe ? "strong" : "normal");
468 bool new_kiosk_ui = KioskAppMenuHandler::EnableNewKioskUI();
469 localized_strings->SetString("newKioskUI", new_kiosk_ui ? "on" : "off");
472 void OobeUI::InitializeScreenMaps() {
473 screen_names_.resize(SCREEN_UNKNOWN);
474 screen_names_[SCREEN_OOBE_HID_DETECTION] = kScreenOobeHIDDetection;
475 screen_names_[SCREEN_OOBE_NETWORK] = kScreenOobeNetwork;
476 screen_names_[SCREEN_OOBE_EULA] = kScreenOobeEula;
477 screen_names_[SCREEN_OOBE_UPDATE] = kScreenOobeUpdate;
478 screen_names_[SCREEN_OOBE_ENROLLMENT] = kScreenOobeEnrollment;
479 screen_names_[SCREEN_OOBE_RESET] = kScreenOobeReset;
480 screen_names_[SCREEN_GAIA_SIGNIN] = kScreenGaiaSignin;
481 screen_names_[SCREEN_ACCOUNT_PICKER] = kScreenAccountPicker;
482 screen_names_[SCREEN_KIOSK_AUTOLAUNCH] = kScreenKioskAutolaunch;
483 screen_names_[SCREEN_KIOSK_ENABLE] = kScreenKioskEnable;
484 screen_names_[SCREEN_ERROR_MESSAGE] = kScreenErrorMessage;
485 screen_names_[SCREEN_USER_IMAGE_PICKER] = kScreenUserImagePicker;
486 screen_names_[SCREEN_TPM_ERROR] = kScreenTpmError;
487 screen_names_[SCREEN_PASSWORD_CHANGED] = kScreenPasswordChanged;
488 screen_names_[SCREEN_CREATE_SUPERVISED_USER_FLOW] =
489 kScreenSupervisedUserCreationFlow;
490 screen_names_[SCREEN_TERMS_OF_SERVICE] = kScreenTermsOfService;
491 screen_names_[SCREEN_WRONG_HWID] = kScreenWrongHWID;
492 screen_names_[SCREEN_AUTO_ENROLLMENT_CHECK] = kScreenAutoEnrollmentCheck;
493 screen_names_[SCREEN_APP_LAUNCH_SPLASH] = kScreenAppLaunchSplash;
494 screen_names_[SCREEN_CONFIRM_PASSWORD] = kScreenConfirmPassword;
495 screen_names_[SCREEN_FATAL_ERROR] = kScreenFatalError;
496 screen_names_[SCREEN_OOBE_CONTROLLER_PAIRING] = kScreenControllerPairing;
497 screen_names_[SCREEN_OOBE_HOST_PAIRING] = kScreenHostPairing;
498 screen_names_[SCREEN_DEVICE_DISABLED] = kScreenDeviceDisabled;
501 for (size_t i = 0; i < screen_names_.size(); ++i)
502 screen_ids_[screen_names_[i]] = static_cast<Screen>(i);
505 void OobeUI::AddScreenHandler(BaseScreenHandler* handler) {
506 web_ui()->AddMessageHandler(handler);
507 handlers_.push_back(handler);
510 void OobeUI::InitializeHandlers() {
512 for (size_t i = 0; i < ready_callbacks_.size(); ++i)
513 ready_callbacks_[i].Run();
514 ready_callbacks_.clear();
516 // Notify 'initialize' for synchronously loaded screens.
517 for (size_t i = 0; i < handlers_.size(); ++i) {
518 if (handlers_[i]->async_assets_load_id().empty())
519 handlers_[i]->InitializeBase();
523 void OobeUI::OnScreenAssetsLoaded(const std::string& async_assets_load_id) {
524 DCHECK(!async_assets_load_id.empty());
526 for (size_t i = 0; i < handlers_.size(); ++i) {
527 if (handlers_[i]->async_assets_load_id() == async_assets_load_id)
528 handlers_[i]->InitializeBase();
532 bool OobeUI::IsJSReady(const base::Closure& display_is_ready_callback) {
534 ready_callbacks_.push_back(display_is_ready_callback);
538 void OobeUI::ShowOobeUI(bool show) {
539 core_handler_->ShowOobeUI(show);
542 void OobeUI::ShowRetailModeLoginSpinner() {
543 signin_screen_handler_->ShowRetailModeLoginSpinner();
546 void OobeUI::ShowSigninScreen(const LoginScreenContext& context,
547 SigninScreenHandlerDelegate* delegate,
548 NativeWindowDelegate* native_window_delegate) {
549 signin_screen_handler_->SetDelegate(delegate);
550 signin_screen_handler_->SetNativeWindowDelegate(native_window_delegate);
552 LoginScreenContext actual_context(context);
553 actual_context.set_oobe_ui(core_handler_->show_oobe_ui());
554 signin_screen_handler_->Show(actual_context);
557 void OobeUI::ResetSigninScreenHandlerDelegate() {
558 signin_screen_handler_->SetDelegate(NULL);
559 signin_screen_handler_->SetNativeWindowDelegate(NULL);
563 void OobeUI::AddObserver(Observer* observer) {
564 observer_list_.AddObserver(observer);
567 void OobeUI::RemoveObserver(Observer* observer) {
568 observer_list_.RemoveObserver(observer);
571 const std::string& OobeUI::GetScreenName(Screen screen) const {
572 DCHECK(screen >= 0 && screen < SCREEN_UNKNOWN);
573 return screen_names_[static_cast<size_t>(screen)];
576 void OobeUI::OnCurrentScreenChanged(const std::string& screen) {
577 previous_screen_ = current_screen_;
578 DCHECK(screen_ids_.count(screen))
579 << "Screen should be registered in InitializeScreenMaps()";
580 Screen new_screen = screen_ids_[screen];
581 FOR_EACH_OBSERVER(Observer,
583 OnCurrentScreenChanged(current_screen_, new_screen));
584 current_screen_ = new_screen;
587 } // namespace chromeos