15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/wizard_controller.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <signal.h> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/types.h> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/callback_helpers.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/strings/utf_string_conversions.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread_restrictions.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/customization_document.h" 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/geolocation/simple_geolocation_provider.h" 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen.h" 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/existing_user_controller.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/helper.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/hwid_checker.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/login_utils.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/managed/locally_managed_user_creation_screen.h" 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/error_screen.h" 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/eula_screen.h" 38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/chromeos/login/screens/hid_detection_screen.h" 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen.h" 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/chromeos/login/screens/kiosk_enable_screen.h" 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/network_screen.h" 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/reset_screen.h" 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/terms_of_service_screen.h" 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/update_screen.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/user_image_screen.h" 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/wrong_hwid_screen.h" 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/startup_utils.h" 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host.h" 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/oobe_display.h" 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/user_manager.h" 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/net/delay_network_call.h" 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/net/network_portal_detector.h" 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/timezone/timezone_provider.h" 578f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu#include "chrome/browser/lifetime/application_lifetime.h" 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/options/options_util.h" 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/chrome_constants.h" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/audio/cras_audio_handler.h" 65a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/chromeos_constants.h" 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/session_manager_client.h" 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chromeos/network/network_state.h" 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state_handler.h" 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/settings/cros_settings_names.h" 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chromeos/settings/timezone_settings.h" 738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/app/breakpad_linux.h" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/notification_types.h" 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/accelerators/accelerator.h" 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If reboot didn't happen, ask user to reboot device manually. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kWaitForRebootTimeSec = 3; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Interval in ms which is used for smooth screen showing. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int kShowDelayMs = 400; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Total timezone resolving process timeout. 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst unsigned int kResolveTimeZoneTimeoutSeconds = 60; 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Stores the list of all screens that should be shown when resuming OOBE. 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char *kResumableScreens[] = { 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chromeos::WizardController::kNetworkScreenName, 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chromeos::WizardController::kUpdateScreenName, 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chromeos::WizardController::kEulaScreenName, 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chromeos::WizardController::kEnrollmentScreenName, 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chromeos::WizardController::kTermsOfServiceScreenName, 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chromeos::WizardController::kAutoEnrollmentCheckScreenName 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Checks flag for HID-detection screen show. 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool CanShowHIDDetectionScreen() { 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return !CommandLine::ForCurrentProcess()->HasSwitch( 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chromeos::switches::kDisableHIDDetectionOnOOBE); 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool IsResumableScreen(const std::string& screen) { 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kResumableScreens); ++i) { 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (screen == kResumableScreens[i]) 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace 116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char WizardController::kNetworkScreenName[] = "network"; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char WizardController::kLoginScreenName[] = "login"; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char WizardController::kUpdateScreenName[] = "update"; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char WizardController::kUserImageScreenName[] = "image"; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char WizardController::kEulaScreenName[] = "eula"; 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char WizardController::kEnrollmentScreenName[] = "enroll"; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char WizardController::kResetScreenName[] = "reset"; 1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char WizardController::kKioskEnableScreenName[] = "kiosk-enable"; 127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)const char WizardController::kKioskAutolaunchScreenName[] = "autolaunch"; 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char WizardController::kErrorScreenName[] = "error-message"; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char WizardController::kTermsOfServiceScreenName[] = "tos"; 13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char WizardController::kAutoEnrollmentCheckScreenName[] = 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "auto-enrollment-check"; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char WizardController::kWrongHWIDScreenName[] = "wrong-hwid"; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char WizardController::kLocallyManagedUserCreationScreenName[] = 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "locally-managed-user-creation-flow"; 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const char WizardController::kAppLaunchSplashScreenName[] = 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "app-launch-splash"; 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char WizardController::kHIDDetectionScreenName[] = "hid-detection"; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const int WizardController::kMinAudibleOutputVolumePercent = 10; 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Passing this parameter as a "first screen" initiates full OOBE flow. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char WizardController::kOutOfBoxScreenName[] = "oobe"; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Special test value that commands not to create any window yet. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char WizardController::kTestNoScreenName[] = "test:nowindow"; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Initialize default controller. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WizardController* WizardController::default_controller_ = NULL; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WizardController::skip_post_login_screens_ = false; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WizardController::zero_delay_enabled_ = false; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WizardController, public: 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)PrefService* WizardController::local_state_for_testing_ = NULL; 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WizardController::WizardController(chromeos::LoginDisplayHost* host, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::OobeDisplay* oobe_display) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : current_screen_(NULL), 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_screen_(NULL), 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_official_build_(true), 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_official_build_(false), 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_out_of_box_(false), 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_(host), 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oobe_display_(oobe_display), 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_statistics_reporting_(true), 17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) skip_update_enroll_after_eula_(false), 1778f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu enrollment_recovery_(ShouldRecoverEnrollment()), 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) login_screen_started_(false), 17958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) user_image_screen_return_to_previous_hack_(false), 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timezone_resolved_(false), 18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) weak_factory_(this) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(default_controller_ == NULL); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_controller_ = this; 184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AccessibilityManager* accessibility_manager = AccessibilityManager::Get(); 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHECK(accessibility_manager); 186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) accessibility_subscription_ = accessibility_manager->RegisterCallback( 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind(&WizardController::OnAccessibilityStatusChanged, 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Unretained(this))); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WizardController::~WizardController() { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (default_controller_ == this) { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_controller_ = NULL; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "More than one controller are alive."; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WizardController::Init( 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& first_screen_name, 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::DictionaryValue> screen_parameters) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Starting OOBE wizard with screen: " << first_screen_name; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_screen_name_ = first_screen_name; 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) screen_parameters_ = screen_parameters.Pass(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool oobe_complete = StartupUtils::IsOobeCompleted(); 207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!oobe_complete || first_screen_name == kOutOfBoxScreenName) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_out_of_box_ = true; 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 21058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // This is a hacky way to check for local state corruption, because 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // it depends on the fact that the local state is loaded 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // synchroniously and at the first demand. IsEnterpriseManaged() 21358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // check is required because currently powerwash is disabled for 21458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // enterprise-entrolled devices. 21558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // 21658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // TODO (ygorshenin@): implement handling of the local state 21758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // corruption in the case of asynchronious loading. 21858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // 21958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // TODO (ygorshenin@): remove IsEnterpriseManaged() check once 22058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // crbug.com/241313 will be fixed. 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy::BrowserPolicyConnectorChromeOS* connector = 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos(); 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!connector->IsEnterpriseManaged()) { 22458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const PrefService::PrefInitializationStatus status = 22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetLocalState()->GetInitializationStatus(); 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (status == PrefService::INITIALIZATION_STATUS_ERROR) { 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) OnLocalStateInitialized(false); 22858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 22958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } else if (status == PrefService::INITIALIZATION_STATUS_WAITING) { 23058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetLocalState()->AddPrefInitObserver( 23158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&WizardController::OnLocalStateInitialized, 23258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) weak_factory_.GetWeakPtr())); 23358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 23458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 23558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string screen_pref = 237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetLocalState()->GetString(prefs::kOobeScreenPending); 238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (is_out_of_box_ && !screen_pref.empty() && (first_screen_name.empty() || 239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) first_screen_name == WizardController::kTestNoScreenName)) { 240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) first_screen_name_ = screen_pref; 241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AdvanceToScreen(first_screen_name_); 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!IsMachineHWIDCorrect() && !StartupUtils::IsDeviceRegistered() && 245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) first_screen_name_.empty()) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowWrongHWIDScreen(); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chromeos::NetworkScreen* WizardController::GetNetworkScreen() { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!network_screen_.get()) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_screen_.reset(new chromeos::NetworkScreen( 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, oobe_display_->GetNetworkScreenActor())); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return network_screen_.get(); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chromeos::UpdateScreen* WizardController::GetUpdateScreen() { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!update_screen_.get()) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_screen_.reset(new chromeos::UpdateScreen( 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, oobe_display_->GetUpdateScreenActor())); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_screen_->SetRebootCheckDelay(kWaitForRebootTimeSec); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return update_screen_.get(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chromeos::UserImageScreen* WizardController::GetUserImageScreen() { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!user_image_screen_.get()) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_image_screen_.reset( 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new chromeos::UserImageScreen( 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, oobe_display_->GetUserImageScreenActor())); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return user_image_screen_.get(); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chromeos::EulaScreen* WizardController::GetEulaScreen() { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!eula_screen_.get()) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eula_screen_.reset(new chromeos::EulaScreen( 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, oobe_display_->GetEulaScreenActor())); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return eula_screen_.get(); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)chromeos::EnrollmentScreen* 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WizardController::GetEnrollmentScreen() { 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!enrollment_screen_.get()) { 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enrollment_screen_.reset( 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new chromeos::EnrollmentScreen( 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this, oobe_display_->GetEnrollmentScreenActor())); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return enrollment_screen_.get(); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chromeos::ResetScreen* WizardController::GetResetScreen() { 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!reset_screen_.get()) { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reset_screen_.reset( 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new chromeos::ResetScreen(this, oobe_display_->GetResetScreenActor())); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reset_screen_.get(); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)chromeos::KioskEnableScreen* WizardController::GetKioskEnableScreen() { 2997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!kiosk_enable_screen_.get()) { 3007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kiosk_enable_screen_.reset( 3017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new chromeos::KioskEnableScreen( 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) this, 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) oobe_display_->GetKioskEnableScreenActor())); 3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return kiosk_enable_screen_.get(); 3067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 308868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)chromeos::KioskAutolaunchScreen* WizardController::GetKioskAutolaunchScreen() { 309868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!autolaunch_screen_.get()) { 310868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) autolaunch_screen_.reset( 311868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new chromeos::KioskAutolaunchScreen( 312868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this, oobe_display_->GetKioskAutolaunchScreenActor())); 313868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 314868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return autolaunch_screen_.get(); 315868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 316868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)chromeos::TermsOfServiceScreen* WizardController::GetTermsOfServiceScreen() { 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!terms_of_service_screen_.get()) { 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) terms_of_service_screen_.reset( 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new chromeos::TermsOfServiceScreen( 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, oobe_display_->GetTermsOfServiceScreenActor())); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return terms_of_service_screen_.get(); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)chromeos::WrongHWIDScreen* WizardController::GetWrongHWIDScreen() { 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!wrong_hwid_screen_.get()) { 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wrong_hwid_screen_.reset( 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new chromeos::WrongHWIDScreen( 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, oobe_display_->GetWrongHWIDScreenActor())); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return wrong_hwid_screen_.get(); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 33546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)chromeos::AutoEnrollmentCheckScreen* 33646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WizardController::GetAutoEnrollmentCheckScreen() { 33746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!auto_enrollment_check_screen_.get()) { 33846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) auto_enrollment_check_screen_.reset( 33946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) new chromeos::AutoEnrollmentCheckScreen( 34046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this, 34146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) oobe_display_->GetAutoEnrollmentCheckScreenActor())); 34246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 34346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return auto_enrollment_check_screen_.get(); 34446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 34546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)chromeos::LocallyManagedUserCreationScreen* 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WizardController::GetLocallyManagedUserCreationScreen() { 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!locally_managed_user_creation_screen_.get()) { 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) locally_managed_user_creation_screen_.reset( 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new chromeos::LocallyManagedUserCreationScreen( 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, oobe_display_->GetLocallyManagedUserCreationScreenActor())); 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return locally_managed_user_creation_screen_.get(); 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 356a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochchromeos::HIDDetectionScreen* WizardController::GetHIDDetectionScreen() { 357a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (!hid_detection_screen_.get()) { 358a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch hid_detection_screen_.reset( 359a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new chromeos::HIDDetectionScreen( 360a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch this, oobe_display_->GetHIDDetectionScreenActor())); 361a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 362a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return hid_detection_screen_.get(); 363a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 364a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::ShowNetworkScreen() { 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Showing network screen."; 3670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Hide the status area initially; it only appears after OOBE first animates 3680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // in. Keep it visible if the user goes back to the existing network screen. 3690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetStatusAreaVisible(network_screen_.get()); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCurrentScreen(GetNetworkScreen()); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void WizardController::ShowLoginScreen(const LoginScreenContext& context) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!time_eula_accepted_.is_null()) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta delta = base::Time::Now() - time_eula_accepted_; 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UMA_HISTOGRAM_MEDIUM_TIMES("OOBE.EULAToSignInTime", delta); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Showing login screen."; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetStatusAreaVisible(true); 380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) host_->StartSignInScreen(context); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) smooth_show_timer_.Stop(); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oobe_display_ = NULL; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) login_screen_started_ = true; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::ResumeLoginScreen() { 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Resuming login screen."; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetStatusAreaVisible(true); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->ResumeSignInScreen(); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) smooth_show_timer_.Stop(); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oobe_display_ = NULL; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::ShowUpdateScreen() { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Showing update screen."; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetStatusAreaVisible(true); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCurrentScreen(GetUpdateScreen()); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::ShowUserImageScreen() { 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const chromeos::UserManager* user_manager = chromeos::UserManager::Get(); 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Skip user image selection for public sessions and ephemeral logins. 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (user_manager->IsLoggedInAsPublicAccount() || 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_manager->IsCurrentUserNonCryptohomeDataEphemeral()) { 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnUserImageSkipped(); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Showing user image screen."; 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool profile_picture_enabled = true; 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string user_id; 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (screen_parameters_.get()) { 413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) screen_parameters_->GetBoolean("profile_picture_enabled", 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &profile_picture_enabled); 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) screen_parameters_->GetString("user_id", &user_id); 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Status area has been already shown at sign in screen so it 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // doesn't make sense to hide it here and then show again at user session as 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this produces undesired UX transitions. 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetStatusAreaVisible(true); 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserImageScreen* screen = GetUserImageScreen(); 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!user_id.empty()) 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) screen->SetUserID(user_id); 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) screen->SetProfilePictureEnabled(profile_picture_enabled); 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCurrentScreen(screen); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::ShowEulaScreen() { 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Showing EULA screen."; 4330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetStatusAreaVisible(true); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCurrentScreen(GetEulaScreen()); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WizardController::ShowEnrollmentScreen() { 438010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VLOG(1) << "Showing enrollment screen."; 439010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetStatusAreaVisible(true); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_auto_enrollment = false; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string user; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (screen_parameters_.get()) { 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_parameters_->GetBoolean("is_auto_enrollment", &is_auto_enrollment); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_parameters_->GetString("user", &user); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 449effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnrollmentScreenActor::EnrollmentMode mode = 450effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL; 4518f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu EnrollmentScreen* screen = GetEnrollmentScreen(); 4528f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu std::string enrollment_domain = GetForcedEnrollmentDomain(); 4538f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu if (is_auto_enrollment) { 454effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mode = EnrollmentScreenActor::ENROLLMENT_MODE_AUTO; 4558f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu } else if (enrollment_recovery_) { 4568f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu mode = EnrollmentScreenActor::ENROLLMENT_MODE_RECOVERY; 4578f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu enrollment_domain = GetEnrollmentRecoveryDomain(); 4588f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu } else if (ShouldAutoStartEnrollment() && !CanExitEnrollment()) { 459bee9932bab44713b74b422b4b759b49f5a222977Bo Liu mode = EnrollmentScreenActor::ENROLLMENT_MODE_FORCED; 4608f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu } 461effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 4628f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu screen->SetParameters(mode, enrollment_domain, user); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCurrentScreen(screen); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::ShowResetScreen() { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Showing reset screen."; 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetStatusAreaVisible(false); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCurrentScreen(GetResetScreen()); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void WizardController::ShowKioskEnableScreen() { 4737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) VLOG(1) << "Showing kiosk enable screen."; 4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SetStatusAreaVisible(false); 4757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SetCurrentScreen(GetKioskEnableScreen()); 4767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 478868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void WizardController::ShowKioskAutolaunchScreen() { 479868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VLOG(1) << "Showing kiosk autolaunch screen."; 480868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetStatusAreaVisible(false); 481868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCurrentScreen(GetKioskAutolaunchScreen()); 482868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 483868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WizardController::ShowTermsOfServiceScreen() { 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Only show the Terms of Service when logging into a public account and Terms 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // of Service have been specified through policy. In all other cases, advance 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to the user image screen immediately. 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!chromeos::UserManager::Get()->IsLoggedInAsPublicAccount() || 4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !ProfileManager::GetActiveUserProfile()->GetPrefs()-> 4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IsManagedPreference(prefs::kTermsOfServiceURL)) { 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowUserImageScreen(); 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VLOG(1) << "Showing Terms of Service screen."; 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetStatusAreaVisible(true); 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetCurrentScreen(GetTermsOfServiceScreen()); 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WizardController::ShowWrongHWIDScreen() { 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VLOG(1) << "Showing wrong HWID screen."; 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetStatusAreaVisible(false); 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetCurrentScreen(GetWrongHWIDScreen()); 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 50646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void WizardController::ShowAutoEnrollmentCheckScreen() { 50746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) VLOG(1) << "Showing Auto-enrollment check screen."; 50846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetStatusAreaVisible(true); 50946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AutoEnrollmentCheckScreen* screen = GetAutoEnrollmentCheckScreen(); 51046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) screen->set_auto_enrollment_controller(host_->GetAutoEnrollmentController()); 51146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetCurrentScreen(screen); 51246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 51346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WizardController::ShowLocallyManagedUserCreationScreen() { 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VLOG(1) << "Showing Locally managed user creation screen screen."; 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetStatusAreaVisible(true); 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LocallyManagedUserCreationScreen* screen = 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetLocallyManagedUserCreationScreen(); 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetCurrentScreen(screen); 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid WizardController::ShowHIDDetectionScreen() { 523a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch VLOG(1) << "Showing HID discovery screen."; 524010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetStatusAreaVisible(true); 525a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch SetCurrentScreen(GetHIDDetectionScreen()); 526a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 527a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void WizardController::SkipToLoginForTesting( 529f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const LoginScreenContext& context) { 530010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VLOG(1) << "SkipToLoginForTesting."; 531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StartupUtils::MarkEulaAccepted(); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformPostEulaActions(); 533cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnOOBECompleted(); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::AddObserver(Observer* observer) { 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer_list_.AddObserver(observer); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::RemoveObserver(Observer* observer) { 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer_list_.RemoveObserver(observer); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnSessionStart() { 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observer_list_, OnSessionStart()); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void WizardController::SkipUpdateEnrollAfterEula() { 54946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) skip_update_enroll_after_eula_ = true; 55046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 55146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WizardController, ExitHandlers: 554a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid WizardController::OnHIDDetectionCompleted() { 555f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Check for tests configuration. 556f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!StartupUtils::IsOobeCompleted()) 557f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ShowNetworkScreen(); 558a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 559a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnNetworkConnected() { 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_official_build_) { 562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!StartupUtils::IsEulaAccepted()) { 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowEulaScreen(); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Possible cases: 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1. EULA was accepted, forced shutdown/reboot during update. 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2. EULA was accepted, planned reboot after update. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that device is up-to-date. 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitiateOOBEUpdate(); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitiateOOBEUpdate(); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnNetworkOffline() { 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(dpolukhin): if(is_out_of_box_) we cannot work offline and 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should report some error message here and stay on the same screen. 579f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnConnectionFailed() { 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(dpolukhin): show error message after login screen is displayed. 584f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnUpdateCompleted() { 58846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ShowAutoEnrollmentCheckScreen(); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnEulaAccepted() { 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) time_eula_accepted_ = base::Time::Now(); 593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StartupUtils::MarkEulaAccepted(); 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool uma_enabled = 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OptionsUtil::ResolveMetricsReportingEnabled(usage_statistics_reporting_); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CrosSettings::Get()->SetBoolean(kStatsReportingPref, uma_enabled); 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (uma_enabled) { 5997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(GOOGLE_CHROME_BUILD) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The crash reporter initialization needs IO to complete. 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ThreadRestrictions::ScopedAllowIO allow_io; 602a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) breakpad::InitCrashReporter(std::string()); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (skip_update_enroll_after_eula_) { 60746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) PerformPostEulaActions(); 608f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ShowAutoEnrollmentCheckScreen(); 60946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else { 61046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) InitiateOOBEUpdate(); 61146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnUpdateErrorCheckingForUpdate() { 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nkostylev): Update should be required during OOBE. 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We do not want to block users from being able to proceed to the login 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // screen if there is any error checking for an update. 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // They could use "browse without sign-in" feature to set up the network to be 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // able to perform the update later. 620a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnUpdateCompleted(); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnUpdateErrorUpdating() { 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If there was an error while getting or applying the update, 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return to network selection screen. 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nkostylev): Show message to the user explaining update error. 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nkostylev): Update should be required during OOBE. 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Temporary fix, need to migrate to new API. http://crosbug.com/4321 629a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnUpdateCompleted(); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WizardController::EnableUserImageScreenReturnToPreviousHack() { 633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_image_screen_return_to_previous_hack_ = true; 634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnUserImageSelected() { 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (user_image_screen_return_to_previous_hack_) { 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_image_screen_return_to_previous_hack_ = false; 639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(previous_screen_); 640c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (previous_screen_) { 641c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCurrentScreen(previous_screen_); 642c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 643c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Launch browser and delete login host controller. 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&chromeos::LoginUtils::DoBrowserLaunch, 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(chromeos::LoginUtils::Get()), 6515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileManager::GetActiveUserProfile(), host_)); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_ = NULL; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnUserImageSkipped() { 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnUserImageSelected(); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WizardController::OnEnrollmentDone() { 660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Mark OOBE as completed only if enterprise enrollment was part of the 661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // forced flow (i.e. app kiosk). 6628f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu if (ShouldAutoStartEnrollment() || enrollment_recovery_) 663effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PerformOOBECompletedActions(); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(mnissler): Unify the logic for auto-login for Public Sessions and 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Kiosk Apps and make this code cover both cases: http://crbug.com/234694. 667868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (KioskAppManager::Get()->IsAutoLaunchEnabled()) 668868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutoLaunchKioskApp(); 669868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) else 670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnResetCanceled() { 6740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (previous_screen_) { 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCurrentScreen(previous_screen_); 6760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } else { 677f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 6780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 681868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void WizardController::OnKioskAutolaunchCanceled() { 682f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 683868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 684868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 685868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void WizardController::OnKioskAutolaunchConfirmed() { 686868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(KioskAppManager::Get()->IsAutoLaunchEnabled()); 687868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutoLaunchKioskApp(); 688868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 689868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 6907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void WizardController::OnKioskEnableCompleted() { 691f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 6927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 6937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WizardController::OnWrongHWIDWarningSkipped() { 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (previous_screen_) 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetCurrentScreen(previous_screen_); 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 698f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 701c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WizardController::OnAutoEnrollmentDone() { 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Automagic enrollment done, resuming previous signin"; 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResumeLoginScreen(); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnOOBECompleted() { 7078f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu if (ShouldAutoStartEnrollment() || enrollment_recovery_) { 708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShowEnrollmentScreen(); 709c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 710effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PerformOOBECompletedActions(); 711f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 712c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WizardController::OnTermsOfServiceDeclined() { 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the user declines the Terms of Service, end the session and return to 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the login screen. 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DBusThreadManager::Get()->GetSessionManagerClient()->StopSession(); 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WizardController::OnTermsOfServiceAccepted() { 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the user accepts the Terms of Service, advance to the user image screen. 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowUserImageScreen(); 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::InitiateOOBEUpdate() { 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformPostEulaActions(); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCurrentScreenSmooth(GetUpdateScreen(), true); 729c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUpdateScreen()->StartNetworkCheck(); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid WizardController::StartTimezoneResolve() { 7330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch geolocation_provider_.reset(new SimpleGeolocationProvider( 7340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch g_browser_process->system_request_context(), 7350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SimpleGeolocationProvider::DefaultGeolocationProviderURL())); 7360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch geolocation_provider_->RequestGeolocation( 7370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::TimeDelta::FromSeconds(kResolveTimeZoneTimeoutSeconds), 7380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Bind(&WizardController::OnLocationResolved, 7390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch weak_factory_.GetWeakPtr())); 740effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 741effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::PerformPostEulaActions() { 743effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DelayNetworkCall( 744effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(&WizardController::StartTimezoneResolve, 745effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch weak_factory_.GetWeakPtr()), 746effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::TimeDelta::FromMilliseconds(kDefaultNetworkRetryDelayMS)); 7470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DelayNetworkCall( 7480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ServicesCustomizationDocument::GetInstance() 7490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ->EnsureCustomizationAppliedClosure(), 7500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::TimeDelta::FromMilliseconds(kDefaultNetworkRetryDelayMS)); 751effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now that EULA has been accepted (for official builds), enable portal check. 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ChromiumOS builds would go though this code path too. 754868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->SetCheckPortalList( 755868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkStateHandler::kDefaultCheckPortalList); 756effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch host_->GetAutoEnrollmentController()->Start(); 7577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) host_->PrewarmAuthentication(); 7588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) NetworkPortalDetector::Get()->Enable(true); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 761effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid WizardController::PerformOOBECompletedActions() { 762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StartupUtils::MarkOobeCompleted(); 763cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) UMA_HISTOGRAM_COUNTS_100( 764cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "HIDDetection.TimesDialogShownPerOOBECompleted", 765cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetLocalState()->GetInteger(prefs::kTimesHIDDialogShown)); 766cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetLocalState()->ClearPref(prefs::kTimesHIDDialogShown); 7678f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu 7688f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu if (enrollment_recovery_) 7698f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu chrome::AttemptRestart(); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::SetCurrentScreen(WizardScreen* new_current) { 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCurrentScreenSmooth(new_current, false); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::ShowCurrentScreen() { 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ShowCurrentScreen may get called by smooth_show_timer_ even after 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // flow has been switched to sign in screen (ExistingUserController). 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!oobe_display_) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 782cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // First remember how far have we reached so that we can resume if needed. 783cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (is_out_of_box_ && IsResumableScreen(current_screen_->GetName())) 784cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) StartupUtils::SaveOobePendingScreen(current_screen_->GetName()); 785cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) smooth_show_timer_.Stop(); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observer_list_, OnScreenChanged(current_screen_)); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oobe_display_->ShowScreen(current_screen_); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::SetCurrentScreenSmooth(WizardScreen* new_current, 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_smoothing) { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (current_screen_ == new_current || 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_current == NULL || 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oobe_display_ == NULL) { 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) smooth_show_timer_.Stop(); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (current_screen_) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oobe_display_->HideScreen(current_screen_); 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_screen_ = current_screen_; 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_screen_ = new_current; 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (use_smoothing) { 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) smooth_show_timer_.Start( 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(kShowDelayMs), 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &WizardController::ShowCurrentScreen); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowCurrentScreen(); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::SetStatusAreaVisible(bool visible) { 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->SetStatusAreaVisible(visible); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::AdvanceToScreen(const std::string& screen_name) { 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (screen_name == kNetworkScreenName) { 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowNetworkScreen(); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (screen_name == kLoginScreenName) { 828f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (screen_name == kUpdateScreenName) { 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitiateOOBEUpdate(); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (screen_name == kUserImageScreenName) { 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowUserImageScreen(); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (screen_name == kEulaScreenName) { 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowEulaScreen(); 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (screen_name == kResetScreenName) { 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowResetScreen(); 8377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else if (screen_name == kKioskEnableScreenName) { 8387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ShowKioskEnableScreen(); 839868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } else if (screen_name == kKioskAutolaunchScreenName) { 840868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ShowKioskAutolaunchScreen(); 841c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else if (screen_name == kEnrollmentScreenName) { 842c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShowEnrollmentScreen(); 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (screen_name == kTermsOfServiceScreenName) { 8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowTermsOfServiceScreen(); 8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (screen_name == kWrongHWIDScreenName) { 8462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowWrongHWIDScreen(); 84746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else if (screen_name == kAutoEnrollmentCheckScreenName) { 84846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ShowAutoEnrollmentCheckScreen(); 8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (screen_name == kLocallyManagedUserCreationScreenName) { 8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowLocallyManagedUserCreationScreen(); 8513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else if (screen_name == kAppLaunchSplashScreenName) { 8523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) AutoLaunchKioskApp(); 853a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } else if (screen_name == kHIDDetectionScreenName) { 854a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ShowHIDDetectionScreen(); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (screen_name != kTestNoScreenName) { 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_out_of_box_) { 857010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (CanShowHIDDetectionScreen()) 858010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ShowHIDDetectionScreen(); 859010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) else 860010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ShowNetworkScreen(); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 862f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowLoginScreen(LoginScreenContext()); 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WizardController, chromeos::ScreenObserver overrides: 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnExit(ExitCodes exit_code) { 870a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VLOG(1) << "Wizard screen exit code: " << exit_code; 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (exit_code) { 872a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch case HID_DETECTION_COMPLETED: 873a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch OnHIDDetectionCompleted(); 874a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch break; 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case NETWORK_CONNECTED: 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnNetworkConnected(); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONNECTION_FAILED: 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnConnectionFailed(); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case UPDATE_INSTALLED: 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case UPDATE_NOUPDATE: 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnUpdateCompleted(); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case UPDATE_ERROR_CHECKING_FOR_UPDATE: 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnUpdateErrorCheckingForUpdate(); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case UPDATE_ERROR_UPDATING: 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnUpdateErrorUpdating(); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USER_IMAGE_SELECTED: 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnUserImageSelected(); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EULA_ACCEPTED: 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnEulaAccepted(); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EULA_BACK: 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowNetworkScreen(); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 900effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED: 901f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (skip_update_enroll_after_eula_) 902f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ShowEnrollmentScreen(); 903f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) else 904f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OnOOBECompleted(); 905effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch break; 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ENTERPRISE_ENROLLMENT_COMPLETED: 907c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnEnrollmentDone(); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 909f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case ENTERPRISE_ENROLLMENT_BACK: 910f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowNetworkScreen(); 911f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) break; 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RESET_CANCELED: 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnResetCanceled(); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 915868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case KIOSK_AUTOLAUNCH_CANCELED: 916868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OnKioskAutolaunchCanceled(); 917868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 918868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case KIOSK_AUTOLAUNCH_CONFIRMED: 919868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OnKioskAutolaunchConfirmed(); 920868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 9217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case KIOSK_ENABLE_COMPLETED: 9227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnKioskEnableCompleted(); 9237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ENTERPRISE_AUTO_MAGIC_ENROLLMENT_COMPLETED: 925c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnAutoEnrollmentDone(); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case TERMS_OF_SERVICE_DECLINED: 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnTermsOfServiceDeclined(); 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case TERMS_OF_SERVICE_ACCEPTED: 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnTermsOfServiceAccepted(); 932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case WRONG_HWID_WARNING_SKIPPED: 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnWrongHWIDWarningSkipped(); 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::OnSetUserNamePassword(const std::string& username, 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& password) { 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) username_ = username; 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) password_ = password; 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WizardController::SetUsageStatisticsReporting(bool val) { 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_statistics_reporting_ = val; 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WizardController::GetUsageStatisticsReporting() const { 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return usage_statistics_reporting_; 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)chromeos::ErrorScreen* WizardController::GetErrorScreen() { 956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!error_screen_.get()) { 957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_.reset( 958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new chromeos::ErrorScreen(this, oobe_display_->GetErrorScreenActor())); 959c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 960c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return error_screen_.get(); 961c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 963c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WizardController::ShowErrorScreen() { 964c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(1) << "Showing error screen."; 965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCurrentScreen(GetErrorScreen()); 966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WizardController::HideErrorScreen(WizardScreen* parent_screen) { 969c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(parent_screen); 970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(1) << "Hiding error screen."; 971c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCurrentScreen(parent_screen); 972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 974a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void WizardController::OnAccessibilityStatusChanged( 975a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const AccessibilityStatusEventDetails& details) { 976a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) enum AccessibilityNotificationType type = details.notification_type; 977a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (type == ACCESSIBILITY_MANAGER_SHUTDOWN) { 978a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) accessibility_subscription_.reset(); 979a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 980a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (type != ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK || !details.enabled) { 9815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 9825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 983a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 9845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CrasAudioHandler* cras = CrasAudioHandler::Get(); 9855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (cras->IsOutputMuted()) { 9865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cras->SetOutputMute(false); 9875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cras->SetOutputVolumePercent(kMinAudibleOutputVolumePercent); 9885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (cras->GetOutputVolumePercent() < kMinAudibleOutputVolumePercent) { 9895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cras->SetOutputVolumePercent(kMinAudibleOutputVolumePercent); 9905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 9915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 9925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 993868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void WizardController::AutoLaunchKioskApp() { 994868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) KioskAppManager::App app_data; 995868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string app_id = KioskAppManager::Get()->GetAutoLaunchApp(); 996868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CHECK(KioskAppManager::Get()->GetApp(app_id, &app_data)); 997ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 9985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host_->StartAppLaunch(app_id, false /* diagnostic_mode */); 999868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 1000868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1002a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void WizardController::SetZeroDelays() { 1003a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kShowDelayMs = 0; 1004a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) zero_delay_enabled_ = true; 1005a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 1006a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1007a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// static 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WizardController::IsZeroDelayEnabled() { 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return zero_delay_enabled_; 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1013a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void WizardController::SkipPostLoginScreensForTesting() { 1014a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) skip_post_login_screens_ = true; 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1017a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// static 1018a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool WizardController::ShouldAutoStartEnrollment() { 10195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy::BrowserPolicyConnectorChromeOS* connector = 10205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos(); 10215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return connector->GetDeviceCloudPolicyManager()->ShouldAutoStartEnrollment(); 1022868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 1023868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1024effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// static 1025bee9932bab44713b74b422b4b759b49f5a222977Bo Liubool WizardController::ShouldRecoverEnrollment() { 1026bee9932bab44713b74b422b4b759b49f5a222977Bo Liu policy::BrowserPolicyConnectorChromeOS* connector = 1027bee9932bab44713b74b422b4b759b49f5a222977Bo Liu g_browser_process->platform_part()->browser_policy_connector_chromeos(); 1028bee9932bab44713b74b422b4b759b49f5a222977Bo Liu return connector->GetDeviceCloudPolicyManager()->ShouldRecoverEnrollment(); 1029bee9932bab44713b74b422b4b759b49f5a222977Bo Liu} 1030bee9932bab44713b74b422b4b759b49f5a222977Bo Liu 1031bee9932bab44713b74b422b4b759b49f5a222977Bo Liu// static 10328f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liustd::string WizardController::GetEnrollmentRecoveryDomain() { 10338f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu policy::BrowserPolicyConnectorChromeOS* connector = 10348f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu g_browser_process->platform_part()->browser_policy_connector_chromeos(); 10358f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu return 10368f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu connector->GetDeviceCloudPolicyManager()->GetEnrollmentRecoveryDomain(); 10378f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu} 10388f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu 10398f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu// static 1040effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool WizardController::CanExitEnrollment() { 10415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy::BrowserPolicyConnectorChromeOS* connector = 10425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos(); 10435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return connector->GetDeviceCloudPolicyManager()->CanExitEnrollment(); 1044868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 1045868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1046effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// static 1047effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstd::string WizardController::GetForcedEnrollmentDomain() { 1048effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policy::BrowserPolicyConnectorChromeOS* connector = 1049effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch g_browser_process->platform_part()->browser_policy_connector_chromeos(); 1050effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return connector->GetDeviceCloudPolicyManager()->GetForcedEnrollmentDomain(); 1051effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 1052effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 105358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void WizardController::OnLocalStateInitialized(bool /* succeeded */) { 105458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (GetLocalState()->GetInitializationStatus() != 105558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PrefService::INITIALIZATION_STATUS_ERROR) { 105658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 105758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 105858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetErrorScreen()->SetUIState(ErrorScreen::UI_STATE_LOCAL_STATE_ERROR); 105958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetStatusAreaVisible(false); 106058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ShowErrorScreen(); 106158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 106258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1063effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPrefService* WizardController::GetLocalState() { 1064effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (local_state_for_testing_) 1065effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return local_state_for_testing_; 1066effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return g_browser_process->local_state(); 1067effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 1068effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1069effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid WizardController::OnTimezoneResolved( 1070effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<TimeZoneResponseData> timezone, 1071effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool server_error) { 1072effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1073effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK(timezone.get()); 1074effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // To check that "this" is not destroyed try to access some member 1075effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // (timezone_provider_) in this case. Expect crash here. 1076effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK(timezone_provider_.get()); 1077effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1078cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timezone_resolved_ = true; 1079cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ScopedClosureRunner inform_test(on_timezone_resolved_for_testing_); 1080cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) on_timezone_resolved_for_testing_.Reset(); 1081cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1082effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VLOG(1) << "Resolved local timezone={" << timezone->ToStringForDebug() 1083effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << "}."; 1084effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1085effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (timezone->status != TimeZoneResponseData::OK) { 1086effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LOG(WARNING) << "Resolve TimeZone: failed to resolve timezone."; 1087effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return; 1088effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1089effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1090effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policy::BrowserPolicyConnectorChromeOS* connector = 1091effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch g_browser_process->platform_part()->browser_policy_connector_chromeos(); 1092effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (connector->IsEnterpriseManaged()) { 1093effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string policy_timezone; 1094effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (chromeos::CrosSettings::Get()->GetString( 1095effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch chromeos::kSystemTimezonePolicy, &policy_timezone) && 1096effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch !policy_timezone.empty()) { 1097effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VLOG(1) << "Resolve TimeZone: TimeZone settings are overridden" 1098effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << " by DevicePolicy."; 1099a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 1100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 1101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 1102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!timezone->timeZoneId.empty()) { 1104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VLOG(1) << "Resolve TimeZone: setting timezone to '" << timezone->timeZoneId 1105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << "'"; 1106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( 1108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::UTF8ToUTF16(timezone->timeZoneId)); 1109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 1111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1112effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTimeZoneProvider* WizardController::GetTimezoneProvider() { 1113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!timezone_provider_) { 1114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch timezone_provider_.reset( 1115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new TimeZoneProvider(g_browser_process->system_request_context(), 1116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DefaultTimezoneProviderURL())); 1117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return timezone_provider_.get(); 111958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 112058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid WizardController::OnLocationResolved(const Geoposition& position, 11220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool server_error, 11230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::TimeDelta elapsed) { 11240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 11250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 11260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::TimeDelta timeout = 11270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::TimeDelta::FromSeconds(kResolveTimeZoneTimeoutSeconds); 11280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Ignore invalid position. 11290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!position.Valid()) 11300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 11310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 11320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (elapsed >= timeout) { 11330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LOG(WARNING) << "Resolve TimeZone: got location after timeout (" 11340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch << elapsed.InSecondsF() << " seconds elapsed). Ignored."; 11350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 11360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 11370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 11380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // WizardController owns TimezoneProvider, so timezone request is silently 11390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // cancelled on destruction. 11400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetTimezoneProvider()->RequestTimezone( 11410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch position, 11420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch false, // sensor 11430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch timeout - elapsed, 11440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Bind(&WizardController::OnTimezoneResolved, 11450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Unretained(this))); 11460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 11470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool WizardController::SetOnTimeZoneResolvedForTesting( 1149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::Closure& callback) { 1150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (timezone_resolved_) 1151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 1152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) on_timezone_resolved_for_testing_ = callback; 1154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 1155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1158