| Index: chrome/browser/chromeos/login/base_login_display_host.cc
|
| diff --git a/chrome/browser/chromeos/login/base_login_display_host.cc b/chrome/browser/chromeos/login/base_login_display_host.cc
|
| deleted file mode 100644
|
| index 9697c6d072323e5ca2476548895f32db8edf6b90..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/login/base_login_display_host.cc
|
| +++ /dev/null
|
| @@ -1,512 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -#include "chrome/browser/chromeos/login/base_login_display_host.h"
|
| -
|
| -#include "ash/desktop_background/desktop_background_controller.h"
|
| -#include "ash/shell.h"
|
| -#include "ash/shell_window_ids.h"
|
| -#include "base/bind.h"
|
| -#include "base/command_line.h"
|
| -#include "base/debug/trace_event.h"
|
| -#include "base/file_util.h"
|
| -#include "base/logging.h"
|
| -#include "base/prefs/pref_service.h"
|
| -#include "base/threading/thread_restrictions.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/browser_shutdown.h"
|
| -#include "chrome/browser/chromeos/cros/cros_library.h"
|
| -#include "chrome/browser/chromeos/customization_document.h"
|
| -#include "chrome/browser/chromeos/input_method/input_method_configuration.h"
|
| -#include "chrome/browser/chromeos/input_method/input_method_manager.h"
|
| -#include "chrome/browser/chromeos/input_method/input_method_util.h"
|
| -#include "chrome/browser/chromeos/language_preferences.h"
|
| -#include "chrome/browser/chromeos/login/existing_user_controller.h"
|
| -#include "chrome/browser/chromeos/login/helper.h"
|
| -#include "chrome/browser/chromeos/login/language_switch_menu.h"
|
| -#include "chrome/browser/chromeos/login/login_utils.h"
|
| -#include "chrome/browser/chromeos/login/login_wizard.h"
|
| -#include "chrome/browser/chromeos/login/user_manager.h"
|
| -#include "chrome/browser/chromeos/login/webui_login_display_host.h"
|
| -#include "chrome/browser/chromeos/login/wizard_controller.h"
|
| -#include "chrome/browser/chromeos/mobile_config.h"
|
| -#include "chrome/browser/chromeos/policy/auto_enrollment_client.h"
|
| -#include "chrome/browser/chromeos/system/input_device_settings.h"
|
| -#include "chrome/browser/chromeos/system/timezone_settings.h"
|
| -#include "chrome/browser/lifetime/application_lifetime.h"
|
| -#include "chrome/browser/managed_mode/managed_mode.h"
|
| -#include "chrome/browser/policy/browser_policy_connector.h"
|
| -#include "chrome/common/chrome_notification_types.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chromeos/dbus/dbus_thread_manager.h"
|
| -#include "chromeos/dbus/session_manager_client.h"
|
| -#include "content/public/browser/notification_service.h"
|
| -#include "content/public/browser/notification_types.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/base/events/event_utils.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/compositor/layer.h"
|
| -#include "ui/compositor/layer_animation_element.h"
|
| -#include "ui/compositor/layer_animation_sequence.h"
|
| -#include "ui/compositor/layer_animator.h"
|
| -#include "ui/compositor/scoped_layer_animation_settings.h"
|
| -#include "ui/gfx/rect.h"
|
| -#include "ui/gfx/transform.h"
|
| -#include "ui/views/widget/widget.h"
|
| -
|
| -namespace {
|
| -
|
| -// The delay of triggering initialization of the device policy subsystem
|
| -// after the login screen is initialized. This makes sure that device policy
|
| -// network requests are made while the system is idle waiting for user input.
|
| -const int64 kPolicyServiceInitializationDelayMilliseconds = 100;
|
| -
|
| -// Determines the hardware keyboard from the given locale code
|
| -// and the OEM layout information, and saves it to "Locale State".
|
| -// The information will be used in InputMethodUtil::GetHardwareInputMethodId().
|
| -void DetermineAndSaveHardwareKeyboard(const std::string& locale,
|
| - const std::string& oem_layout) {
|
| - std::string layout;
|
| - if (!oem_layout.empty()) {
|
| - // If the OEM layout information is provided, use it.
|
| - layout = oem_layout;
|
| - } else {
|
| - chromeos::input_method::InputMethodManager* manager =
|
| - chromeos::input_method::GetInputMethodManager();
|
| - // Otherwise, determine the hardware keyboard from the locale.
|
| - std::vector<std::string> input_method_ids;
|
| - if (manager->GetInputMethodUtil()->GetInputMethodIdsFromLanguageCode(
|
| - locale,
|
| - chromeos::input_method::kKeyboardLayoutsOnly,
|
| - &input_method_ids)) {
|
| - // The output list |input_method_ids| is sorted by popularity, hence
|
| - // input_method_ids[0] now contains the most popular keyboard layout
|
| - // for the given locale.
|
| - layout = input_method_ids[0];
|
| - }
|
| - }
|
| -
|
| - if (!layout.empty()) {
|
| - PrefService* prefs = g_browser_process->local_state();
|
| - prefs->SetString(prefs::kHardwareKeyboardLayout, layout);
|
| - // This asks the file thread to save the prefs (i.e. doesn't block).
|
| - // The latest values of Local State reside in memory so we can safely
|
| - // get the value of kHardwareKeyboardLayout even if the data is not
|
| - // yet saved to disk.
|
| - prefs->CommitPendingWrite();
|
| - }
|
| -}
|
| -
|
| -ui::Layer* GetLayer(views::Widget* widget) {
|
| - return widget->GetNativeView()->layer();
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace chromeos {
|
| -
|
| -// static
|
| -LoginDisplayHost* BaseLoginDisplayHost::default_host_ = NULL;
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// BaseLoginDisplayHost, public
|
| -
|
| -BaseLoginDisplayHost::BaseLoginDisplayHost(const gfx::Rect& background_bounds)
|
| - : background_bounds_(background_bounds),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(pointer_factory_(this)),
|
| - shutting_down_(false),
|
| - oobe_progress_bar_visible_(false),
|
| - session_starting_(false) {
|
| - // We need to listen to CLOSE_ALL_BROWSERS_REQUEST but not APP_TERMINATIN
|
| - // because/ APP_TERMINATING will never be fired as long as this keeps
|
| - // ref-count. CLOSE_ALL_BROWSERS_REQUEST is safe here because there will be no
|
| - // browser instance that will block the shutdown.
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST,
|
| - content::NotificationService::AllSources());
|
| -
|
| - // NOTIFICATION_BROWSER_OPENED is issued after browser is created, but
|
| - // not shown yet. Lock window has to be closed at this point so that
|
| - // a browser window exists and the window can acquire input focus.
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_BROWSER_OPENED,
|
| - content::NotificationService::AllSources());
|
| -
|
| - // Login screen is moved to lock screen container when user logs in.
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_LOGIN_USER_CHANGED,
|
| - content::NotificationService::AllSources());
|
| -
|
| - DCHECK(default_host_ == NULL);
|
| - default_host_ = this;
|
| -
|
| - // Make sure chrome won't exit while we are at login/oobe screen.
|
| - chrome::StartKeepAlive();
|
| -}
|
| -
|
| -BaseLoginDisplayHost::~BaseLoginDisplayHost() {
|
| - // Let chrome process exit after login/oobe screen if needed.
|
| - chrome::EndKeepAlive();
|
| -
|
| - default_host_ = NULL;
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// BaseLoginDisplayHost, LoginDisplayHost implementation:
|
| -
|
| -void BaseLoginDisplayHost::BeforeSessionStart() {
|
| - session_starting_ = true;
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::OnSessionStart() {
|
| - DVLOG(1) << "Session starting";
|
| - ash::Shell::GetInstance()->
|
| - desktop_background_controller()->MoveDesktopToUnlockedContainer();
|
| - if (wizard_controller_.get())
|
| - wizard_controller_->OnSessionStart();
|
| - // Display host is deleted once animation is completed
|
| - // since sign in screen widget has to stay alive.
|
| - StartAnimation();
|
| - ShutdownDisplayHost(false);
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::OnCompleteLogin() {
|
| - // Cancelling the |auto_enrollment_client_| now allows it to determine whether
|
| - // its protocol finished before login was complete.
|
| - if (auto_enrollment_client_.get())
|
| - auto_enrollment_client_.release()->CancelAndDeleteSoon();
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::StartWizard(
|
| - const std::string& first_screen_name,
|
| - DictionaryValue* screen_parameters) {
|
| - DVLOG(1) << "Starting wizard, first_screen_name: " << first_screen_name;
|
| - // Create and show the wizard.
|
| - // Note, dtor of the old WizardController should be called before ctor of the
|
| - // new one, because "default_controller()" is updated there. So pure "reset()"
|
| - // is done before new controller creation.
|
| - wizard_controller_.reset();
|
| - wizard_controller_.reset(CreateWizardController());
|
| -
|
| - oobe_progress_bar_visible_ = !WizardController::IsDeviceRegistered();
|
| - SetOobeProgressBarVisible(oobe_progress_bar_visible_);
|
| - wizard_controller_->Init(first_screen_name, screen_parameters);
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::StartSignInScreen() {
|
| - DVLOG(1) << "Starting sign in screen";
|
| - const chromeos::UserList& users = chromeos::UserManager::Get()->GetUsers();
|
| -
|
| - // Fix for users who updated device and thus never passed register screen.
|
| - // If we already have users, we assume that it is not a second part of
|
| - // OOBE. See http://crosbug.com/6289
|
| - if (!WizardController::IsDeviceRegistered() && !users.empty()) {
|
| - VLOG(1) << "Mark device registered because there are remembered users: "
|
| - << users.size();
|
| - WizardController::MarkDeviceRegistered();
|
| - }
|
| -
|
| - sign_in_controller_.reset(); // Only one controller in a time.
|
| - sign_in_controller_.reset(new chromeos::ExistingUserController(this));
|
| - oobe_progress_bar_visible_ = !WizardController::IsDeviceRegistered();
|
| - SetOobeProgressBarVisible(oobe_progress_bar_visible_);
|
| - SetStatusAreaVisible(true);
|
| - SetShutdownButtonEnabled(true);
|
| - sign_in_controller_->Init(users);
|
| -
|
| - // We might be here after a reboot that was triggered after OOBE was complete,
|
| - // so check for auto-enrollment again. This might catch a cached decision from
|
| - // a previous oobe flow, or might start a new check with the server.
|
| - CheckForAutoEnrollment();
|
| -
|
| - // Initiate services customization manifest fetching.
|
| - ServicesCustomizationDocument::GetInstance()->StartFetching();
|
| -
|
| - // Initiate mobile config load.
|
| - MobileConfig::GetInstance();
|
| -
|
| - // Initiate device policy fetching.
|
| - g_browser_process->browser_policy_connector()->ScheduleServiceInitialization(
|
| - kPolicyServiceInitializationDelayMilliseconds);
|
| -}
|
| -
|
| -WizardController* BaseLoginDisplayHost::GetWizardController() {
|
| - return wizard_controller_.get();
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::ResumeSignInScreen() {
|
| - // We only get here after a previous call the StartSignInScreen. That sign-in
|
| - // was successful but was interrupted by an auto-enrollment execution; once
|
| - // auto-enrollment is complete we resume the normal login flow from here.
|
| - DVLOG(1) << "Resuming sign in screen";
|
| - CHECK(sign_in_controller_.get());
|
| - SetOobeProgressBarVisible(oobe_progress_bar_visible_);
|
| - SetStatusAreaVisible(true);
|
| - SetShutdownButtonEnabled(true);
|
| - sign_in_controller_->ResumeLogin();
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::CheckForAutoEnrollment() {
|
| - // This method is called when the controller determines that the
|
| - // auto-enrollment check can start. This happens either after the EULA is
|
| - // accepted, or right after a reboot if the EULA has already been accepted.
|
| -
|
| - if (policy::AutoEnrollmentClient::IsDisabled()) {
|
| - VLOG(1) << "CheckForAutoEnrollment: auto-enrollment disabled";
|
| - return;
|
| - }
|
| -
|
| - // Start by checking if the device has already been owned.
|
| - pointer_factory_.InvalidateWeakPtrs();
|
| - DeviceSettingsService::Get()->GetOwnershipStatusAsync(
|
| - base::Bind(&BaseLoginDisplayHost::OnOwnershipStatusCheckDone,
|
| - pointer_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// BaseLoginDisplayHost, content:NotificationObserver implementation:
|
| -
|
| -void BaseLoginDisplayHost::Observe(
|
| - int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) {
|
| - if (type == chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST) {
|
| - ShutdownDisplayHost(true);
|
| - } else if (type == chrome::NOTIFICATION_BROWSER_OPENED && session_starting_) {
|
| - // Browsers created before session start (windows opened by extensions, for
|
| - // example) are ignored.
|
| - OnBrowserCreated();
|
| - registrar_.Remove(this,
|
| - chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST,
|
| - content::NotificationService::AllSources());
|
| - registrar_.Remove(this,
|
| - chrome::NOTIFICATION_BROWSER_OPENED,
|
| - content::NotificationService::AllSources());
|
| - } else if (type == chrome::NOTIFICATION_LOGIN_USER_CHANGED &&
|
| - chromeos::UserManager::Get()->IsCurrentUserNew()) {
|
| - // For new user, move desktop to locker container so that windows created
|
| - // during the user image picker step are below it.
|
| - ash::Shell::GetInstance()->
|
| - desktop_background_controller()->MoveDesktopToLockedContainer();
|
| - registrar_.Remove(this,
|
| - chrome::NOTIFICATION_LOGIN_USER_CHANGED,
|
| - content::NotificationService::AllSources());
|
| - }
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::ShutdownDisplayHost(bool post_quit_task) {
|
| - if (shutting_down_)
|
| - return;
|
| -
|
| - shutting_down_ = true;
|
| - registrar_.RemoveAll();
|
| - MessageLoop::current()->DeleteSoon(FROM_HERE, this);
|
| - if (post_quit_task)
|
| - MessageLoop::current()->Quit();
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::StartAnimation() {
|
| - if (ash::Shell::GetContainer(
|
| - ash::Shell::GetPrimaryRootWindow(),
|
| - ash::internal::kShellWindowId_DesktopBackgroundContainer)->
|
| - children().empty()) {
|
| - // If there is no background window, don't perform any animation on the
|
| - // default and background layer because there is nothing behind it.
|
| - return;
|
| - }
|
| -
|
| - if (!CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kDisableLoginAnimations))
|
| - ash::Shell::GetInstance()->DoInitialWorkspaceAnimation();
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::OnOwnershipStatusCheckDone(
|
| - DeviceSettingsService::OwnershipStatus status,
|
| - bool current_user_is_owner) {
|
| - if (status != DeviceSettingsService::OWNERSHIP_NONE) {
|
| - // The device is already owned. No need for auto-enrollment checks.
|
| - VLOG(1) << "CheckForAutoEnrollment: device already owned";
|
| - return;
|
| - }
|
| -
|
| - // Kick off the auto-enrollment client.
|
| - if (auto_enrollment_client_.get()) {
|
| - // They client might have been started after the EULA screen, but we made
|
| - // it to the login screen before it finished. In that case let the current
|
| - // client proceed.
|
| - //
|
| - // CheckForAutoEnrollment() is also called when we reach the sign-in screen,
|
| - // because that's what happens after an auto-update.
|
| - VLOG(1) << "CheckForAutoEnrollment: client already started";
|
| -
|
| - // If the client already started and already finished too, pass the decision
|
| - // to the |sign_in_controller_| now.
|
| - if (auto_enrollment_client_->should_auto_enroll())
|
| - ForceAutoEnrollment();
|
| - } else {
|
| - VLOG(1) << "CheckForAutoEnrollment: starting auto-enrollment client";
|
| - auto_enrollment_client_.reset(policy::AutoEnrollmentClient::Create(
|
| - base::Bind(&BaseLoginDisplayHost::OnAutoEnrollmentClientDone,
|
| - base::Unretained(this))));
|
| - auto_enrollment_client_->Start();
|
| - }
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::OnAutoEnrollmentClientDone() {
|
| - bool auto_enroll = auto_enrollment_client_->should_auto_enroll();
|
| - VLOG(1) << "OnAutoEnrollmentClientDone, decision is " << auto_enroll;
|
| -
|
| - if (auto_enroll)
|
| - ForceAutoEnrollment();
|
| -}
|
| -
|
| -void BaseLoginDisplayHost::ForceAutoEnrollment() {
|
| - if (sign_in_controller_.get())
|
| - sign_in_controller_->DoAutoEnrollment();
|
| -}
|
| -
|
| -// Declared in login_wizard.h so that others don't need to depend on our .h.
|
| -// TODO(nkostylev): Split this into a smaller functions.
|
| -void ShowLoginWizard(const std::string& first_screen_name,
|
| - const gfx::Size& size) {
|
| - if (browser_shutdown::IsTryingToQuit())
|
| - return;
|
| -
|
| - // Managed mode is defined as a machine-level setting so we have to reset it
|
| - // each time login screen is shown. See also http://crbug.com/167642
|
| - // TODO(nkostylev): Remove this call when managed mode scope is
|
| - // limited to user session.
|
| - if (ManagedMode::IsInManagedMode())
|
| - ManagedMode::LeaveManagedMode();
|
| -
|
| - VLOG(1) << "Showing OOBE screen: " << first_screen_name;
|
| -
|
| - chromeos::input_method::InputMethodManager* manager =
|
| - chromeos::input_method::GetInputMethodManager();
|
| -
|
| - // Set up keyboards. For example, when |locale| is "en-US", enable US qwerty
|
| - // and US dvorak keyboard layouts.
|
| - if (g_browser_process && g_browser_process->local_state()) {
|
| - const std::string locale = g_browser_process->GetApplicationLocale();
|
| - // If the preferred keyboard for the login screen has been saved, use it.
|
| - PrefService* prefs = g_browser_process->local_state();
|
| - std::string initial_input_method_id =
|
| - prefs->GetString(chromeos::language_prefs::kPreferredKeyboardLayout);
|
| - if (initial_input_method_id.empty()) {
|
| - // If kPreferredKeyboardLayout is not specified, use the hardware layout.
|
| - initial_input_method_id =
|
| - manager->GetInputMethodUtil()->GetHardwareInputMethodId();
|
| - }
|
| - manager->EnableLayouts(locale, initial_input_method_id);
|
| -
|
| - // Apply owner preferences for tap-to-click and mouse buttons swap for
|
| - // login screen.
|
| - system::mouse_settings::SetPrimaryButtonRight(
|
| - prefs->GetBoolean(prefs::kOwnerPrimaryMouseButtonRight));
|
| - system::touchpad_settings::SetTapToClick(
|
| - prefs->GetBoolean(prefs::kOwnerTapToClickEnabled));
|
| - }
|
| -
|
| - ui::SetNaturalScroll(CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kNaturalScrollDefault));
|
| -
|
| - gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(size));
|
| -
|
| - // Check whether we need to execute OOBE process.
|
| - bool oobe_complete = chromeos::WizardController::IsOobeCompleted();
|
| - bool show_login_screen =
|
| - (first_screen_name.empty() && oobe_complete) ||
|
| - first_screen_name == chromeos::WizardController::kLoginScreenName;
|
| -
|
| - chromeos::LoginDisplayHost* display_host;
|
| - display_host = new chromeos::WebUILoginDisplayHost(screen_bounds);
|
| -
|
| - if (show_login_screen) {
|
| - // R11 > R12 migration fix. See http://crosbug.com/p/4898.
|
| - // If user has manually changed locale during R11 OOBE, locale will be set.
|
| - // On R12 > R12|R13 etc. this fix won't get activated since
|
| - // OOBE process has set kApplicationLocale to non-default value.
|
| - PrefService* prefs = g_browser_process->local_state();
|
| - if (!prefs->HasPrefPath(prefs::kApplicationLocale)) {
|
| - std::string locale = chromeos::WizardController::GetInitialLocale();
|
| - prefs->SetString(prefs::kApplicationLocale, locale);
|
| - manager->EnableLayouts(
|
| - locale,
|
| - manager->GetInputMethodUtil()->GetHardwareInputMethodId());
|
| - base::ThreadRestrictions::ScopedAllowIO allow_io;
|
| - const std::string loaded_locale =
|
| - ResourceBundle::GetSharedInstance().ReloadLocaleResources(locale);
|
| - g_browser_process->SetApplicationLocale(loaded_locale);
|
| - }
|
| - display_host->StartSignInScreen();
|
| - return;
|
| - }
|
| -
|
| - // Load startup manifest.
|
| - const chromeos::StartupCustomizationDocument* startup_manifest =
|
| - chromeos::StartupCustomizationDocument::GetInstance();
|
| -
|
| - // Switch to initial locale if specified by customization
|
| - // and has not been set yet. We cannot call
|
| - // chromeos::LanguageSwitchMenu::SwitchLanguage here before
|
| - // EmitLoginPromptReady.
|
| - PrefService* prefs = g_browser_process->local_state();
|
| - const std::string current_locale =
|
| - prefs->GetString(prefs::kApplicationLocale);
|
| - VLOG(1) << "Current locale: " << current_locale;
|
| - std::string locale;
|
| - if (current_locale.empty()) {
|
| - locale = startup_manifest->initial_locale();
|
| - std::string layout = startup_manifest->keyboard_layout();
|
| - VLOG(1) << "Initial locale: " << locale
|
| - << "keyboard layout " << layout;
|
| - if (!locale.empty()) {
|
| - // Save initial locale from VPD/customization manifest as current
|
| - // Chrome locale. Otherwise it will be lost if Chrome restarts.
|
| - // Don't need to schedule pref save because setting initial local
|
| - // will enforce preference saving.
|
| - prefs->SetString(prefs::kApplicationLocale, locale);
|
| - chromeos::WizardController::SetInitialLocale(locale);
|
| - // Determine keyboard layout from OEM customization (if provided) or
|
| - // initial locale and save it in preferences.
|
| - DetermineAndSaveHardwareKeyboard(locale, layout);
|
| - // Then, enable the hardware keyboard.
|
| - manager->EnableLayouts(
|
| - locale,
|
| - manager->GetInputMethodUtil()->GetHardwareInputMethodId());
|
| - // Reloading resource bundle causes us to do blocking IO on UI thread.
|
| - // Temporarily allow it until we fix http://crosbug.com/11102
|
| - base::ThreadRestrictions::ScopedAllowIO allow_io;
|
| - const std::string loaded_locale =
|
| - ResourceBundle::GetSharedInstance().ReloadLocaleResources(locale);
|
| - CHECK(!loaded_locale.empty()) << "Locale could not be found for "
|
| - << locale;
|
| - // Set the application locale here so that the language switch
|
| - // menu works properly with the newly loaded locale.
|
| - g_browser_process->SetApplicationLocale(loaded_locale);
|
| - }
|
| - }
|
| -
|
| - display_host->StartWizard(first_screen_name, NULL);
|
| -
|
| - chromeos::LoginUtils::Get()->PrewarmAuthentication();
|
| - chromeos::DBusThreadManager::Get()->GetSessionManagerClient()
|
| - ->EmitLoginPromptReady();
|
| - TRACE_EVENT0("chromeos", "ShowLoginWizard::EmitLoginPromptReady");
|
| -
|
| - // Set initial timezone if specified by customization.
|
| - const std::string timezone_name = startup_manifest->initial_timezone();
|
| - VLOG(1) << "Initial time zone: " << timezone_name;
|
| - // Apply locale customizations only once to preserve whatever locale
|
| - // user has changed to during OOBE.
|
| - if (!timezone_name.empty()) {
|
| - chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(
|
| - UTF8ToUTF16(timezone_name));
|
| - }
|
| -}
|
| -
|
| -} // namespace chromeos
|
|
|