1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/wizard_controller.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gdk/gdk.h> 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <signal.h> 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <sys/types.h> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/command_line.h" 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/file_util.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h" 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/threading/thread_restrictions.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browser_process.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/cros/cros_library.h" 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/chromeos/cros/cryptohome_library.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/customization_document.h" 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/language_preferences.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/account_screen.h" 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/login/enterprise_enrollment_screen.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/eula_view.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/existing_user_controller.h" 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/helper.h" 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/html_page_screen.h" 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/login/login_display_host.h" 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/login_utils.h" 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/network_screen.h" 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/registration_screen.h" 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/update_screen.h" 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/user_image_screen.h" 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/user_manager.h" 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/metrics_cros_settings_provider.h" 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_service.h" 3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile_manager.h" 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/common/pref_names.h" 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_service.h" 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_type.h" 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/l10n/l10n_util.h" 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/accelerator.h" 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/view.h" 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/widget_gtk.h" 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// A boolean pref of the EULA accepted flag. 51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst char kEulaAccepted[] = "EulaAccepted"; 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// A string pref with initial locale set in VPD or manifest. 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char kInitialLocale[] = "intl.initial_locale"; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// A boolean pref of the OOBE complete flag (first OOBE part before login). 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char kOobeComplete[] = "OobeComplete"; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// A boolean pref of the device registered flag (second part after first login). 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst char kDeviceRegistered[] = "DeviceRegistered"; 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Path to flag file indicating that both parts of OOBE were completed. 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst char kOobeCompleteFlagFilePath[] = "/home/chronos/.oobe_completed"; 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Time in seconds that we wait for the device to reboot. 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// If reboot didn't happen, ask user to reboot device manually. 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kWaitForRebootTimeSec = 3; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Interval in ms which is used for smooth screen showing. 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstatic int kShowDelayMs = 400; 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RootView of the Widget WizardController creates. Contains the contents of the 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// WizardController. 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ContentView : public views::View { 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ContentView() 7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen : accel_toggle_accessibility_( 78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick chromeos::WizardAccessibilityHelper::GetAccelerator()) { 79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#if defined(OFFICIAL_BUILD) 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accel_cancel_update_ = views::Accelerator(ui::VKEY_ESCAPE, 81201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch true, true, true); 82201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#else 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accel_cancel_update_ = views::Accelerator(ui::VKEY_ESCAPE, 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, false, false); 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accel_account_screen_ = views::Accelerator(ui::VKEY_A, 863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick false, true, true); 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accel_login_screen_ = views::Accelerator(ui::VKEY_L, 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick false, true, true); 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accel_network_screen_ = views::Accelerator(ui::VKEY_N, 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick false, true, true); 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accel_update_screen_ = views::Accelerator(ui::VKEY_U, 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick false, true, true); 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accel_image_screen_ = views::Accelerator(ui::VKEY_I, 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick false, true, true); 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accel_eula_screen_ = views::Accelerator(ui::VKEY_E, 963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick false, true, true); 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accel_register_screen_ = views::Accelerator(ui::VKEY_R, 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick false, true, true); 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen accel_enterprise_enrollment_screen_ = 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::Accelerator(ui::VKEY_P, false, true, true); 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddAccelerator(accel_account_screen_); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddAccelerator(accel_login_screen_); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddAccelerator(accel_network_screen_); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddAccelerator(accel_update_screen_); 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddAccelerator(accel_image_screen_); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddAccelerator(accel_eula_screen_); 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddAccelerator(accel_register_screen_); 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddAccelerator(accel_enterprise_enrollment_screen_); 1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 11021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AddAccelerator(accel_toggle_accessibility_); 111201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AddAccelerator(accel_cancel_update_); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~ContentView() { 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::current()->Notify( 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType::WIZARD_CONTENT_VIEW_DESTROYED, 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::AllSources(), 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::NoDetails()); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool AcceleratorPressed(const views::Accelerator& accel) { 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WizardController* controller = WizardController::default_controller(); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!controller) 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (accel == accel_toggle_accessibility_) { 12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen chromeos::WizardAccessibilityHelper::GetInstance()->ToggleAccessibility(); 12872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else if (accel == accel_cancel_update_) { 129201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch controller->CancelOOBEUpdate(); 1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if !defined(OFFICIAL_BUILD) 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else if (accel == accel_account_screen_) { 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch controller->ShowAccountScreen(); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (accel == accel_login_screen_) { 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch controller->ShowLoginScreen(); 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (accel == accel_network_screen_) { 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch controller->ShowNetworkScreen(); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (accel == accel_update_screen_) { 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch controller->ShowUpdateScreen(); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (accel == accel_image_screen_) { 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch controller->ShowUserImageScreen(); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (accel == accel_eula_screen_) { 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch controller->ShowEulaScreen(); 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else if (accel == accel_register_screen_) { 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick controller->ShowRegistrationScreen(); 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (accel == accel_enterprise_enrollment_screen_) { 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen controller->ShowEnterpriseEnrollmentScreen(); 1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Layout() { 15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (int i = 0; i < child_count(); ++i) { 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::View* cur = GetChildViewAt(i); 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (cur->IsVisible()) 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch cur->SetBounds(0, 0, width(), height()); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 1643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if !defined(OFFICIAL_BUILD) 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Accelerator accel_account_screen_; 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Accelerator accel_login_screen_; 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Accelerator accel_network_screen_; 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Accelerator accel_update_screen_; 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Accelerator accel_image_screen_; 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Accelerator accel_eula_screen_; 1713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick views::Accelerator accel_register_screen_; 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::Accelerator accel_enterprise_enrollment_screen_; 1733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 17421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen views::Accelerator accel_toggle_accessibility_; 175201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch views::Accelerator accel_cancel_update_; 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ContentView); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Saves boolean "Local State" preference and forces its persistence to disk. 181731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid SaveBoolPreferenceForced(const char* pref_name, bool value) { 182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick PrefService* prefs = g_browser_process->local_state(); 183731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick prefs->SetBoolean(pref_name, value); 184731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick prefs->SavePersistentPrefs(); 185731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 186731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Saves integer "Local State" preference and forces its persistence to disk. 18872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid SaveIntegerPreferenceForced(const char* pref_name, int value) { 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen PrefService* prefs = g_browser_process->local_state(); 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen prefs->SetInteger(pref_name, value); 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen prefs->SavePersistentPrefs(); 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Saves string "Local State" preference and forces its persistence to disk. 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SaveStringPreferenceForced(const char* pref_name, 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& value) { 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PrefService* prefs = g_browser_process->local_state(); 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prefs->SetString(pref_name, value); 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prefs->SavePersistentPrefs(); 20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char WizardController::kNetworkScreenName[] = "network"; 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char WizardController::kLoginScreenName[] = "login"; 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char WizardController::kAccountScreenName[] = "account"; 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char WizardController::kUpdateScreenName[] = "update"; 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char WizardController::kUserImageScreenName[] = "image"; 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char WizardController::kEulaScreenName[] = "eula"; 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char WizardController::kRegistrationScreenName[] = "register"; 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char WizardController::kHTMLPageScreenName[] = "html"; 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char WizardController::kEnterpriseEnrollmentScreenName[] = "enroll"; 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Passing this parameter as a "first screen" initiates full OOBE flow. 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char WizardController::kOutOfBoxScreenName[] = "oobe"; 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Special test value that commands not to create any window yet. 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char WizardController::kTestNoScreenName[] = "test:nowindow"; 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Initialize default controller. 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWizardController* WizardController::default_controller_ = NULL; 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// WizardController, public: 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenWizardController::WizardController(chromeos::LoginDisplayHost* host, 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const gfx::Rect& screen_bounds) 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : widget_(NULL), 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch contents_(NULL), 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen screen_bounds_(screen_bounds), 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch current_screen_(NULL), 23372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen initial_show_(true), 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen is_active_(true), 2353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OFFICIAL_BUILD) 2363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick is_official_build_(true), 2373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#else 2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick is_official_build_(false), 2393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch is_out_of_box_(false), 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_(host), 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen observer_(NULL), 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen usage_statistics_reporting_(true) { 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(default_controller_ == NULL); 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default_controller_ = this; 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWizardController::~WizardController() { 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (widget_) { 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch widget_->Close(); 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen widget_ = NULL; 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (default_controller_ == this) { 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen default_controller_ = NULL; 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED() << "More than one controller are alive."; 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 260731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick chromeos::WizardAccessibilityHelper::GetInstance()-> 261731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick UnregisterNotifications(); 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid WizardController::Init(const std::string& first_screen_name) { 265731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "Starting OOBE wizard with screen: " << first_screen_name; 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(!contents_); 2673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick first_screen_name_ = first_screen_name; 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick contents_ = new ContentView(); 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool oobe_complete = IsOobeCompleted(); 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!oobe_complete || first_screen_name == kOutOfBoxScreenName) { 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch is_out_of_box_ = true; 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowFirstScreen(first_screen_name); 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 279201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid WizardController::CancelOOBEUpdate() { 280201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (update_screen_.get() && 281201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch update_screen_.get() == current_screen_) { 282201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GetUpdateScreen()->CancelUpdate(); 283201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 284201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 285201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchromeos::NetworkScreen* WizardController::GetNetworkScreen() { 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!network_screen_.get()) 2883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick network_screen_.reset(new chromeos::NetworkScreen(this)); 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return network_screen_.get(); 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchromeos::AccountScreen* WizardController::GetAccountScreen() { 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!account_screen_.get()) 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch account_screen_.reset(new chromeos::AccountScreen(this)); 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return account_screen_.get(); 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchromeos::UpdateScreen* WizardController::GetUpdateScreen() { 2993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!update_screen_.get()) { 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update_screen_.reset(new chromeos::UpdateScreen(this)); 3013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick update_screen_->SetRebootCheckDelay(kWaitForRebootTimeSec); 3023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return update_screen_.get(); 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchromeos::UserImageScreen* WizardController::GetUserImageScreen() { 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!user_image_screen_.get()) 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch user_image_screen_.reset(new chromeos::UserImageScreen(this)); 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return user_image_screen_.get(); 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchromeos::EulaScreen* WizardController::GetEulaScreen() { 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!eula_screen_.get()) 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch eula_screen_.reset(new chromeos::EulaScreen(this)); 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return eula_screen_.get(); 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchromeos::RegistrationScreen* WizardController::GetRegistrationScreen() { 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!registration_screen_.get()) 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registration_screen_.reset(new chromeos::RegistrationScreen(this)); 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return registration_screen_.get(); 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickchromeos::HTMLPageScreen* WizardController::GetHTMLPageScreen() { 3253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!html_page_screen_.get()) { 3263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CommandLine* command_line = CommandLine::ForCurrentProcess(); 3273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string url; 3283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // It's strange but args may contains empty strings. 3293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick for (size_t i = 0; i < command_line->args().size(); i++) { 3303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!command_line->args()[i].empty()) { 3313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK(url.empty()) << "More than one URL in command line"; 3323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url = command_line->args()[i]; 3333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 3343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 3353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK(!url.empty()) << "No URL in commane line"; 3363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick html_page_screen_.reset(new chromeos::HTMLPageScreen(this, url)); 3373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 3383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return html_page_screen_.get(); 3393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenchromeos::EnterpriseEnrollmentScreen* 342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WizardController::GetEnterpriseEnrollmentScreen() { 343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!enterprise_enrollment_screen_.get()) { 344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen enterprise_enrollment_screen_.reset( 345ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new chromeos::EnterpriseEnrollmentScreen(this)); 346ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return enterprise_enrollment_screen_.get(); 348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::ShowNetworkScreen() { 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetStatusAreaVisible(false); 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetCurrentScreen(GetNetworkScreen()); 353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetOobeProgress(chromeos::BackgroundView::SELECT_NETWORK); 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid WizardController::ShowLoginScreen() { 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetStatusAreaVisible(true); 358ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetOobeProgress(chromeos::BackgroundView::SIGNIN); 359ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->StartSignInScreen(); 360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen smooth_show_timer_.Stop(); 361ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (widget_) { 362ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen widget_->Close(); 363ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen widget_ = NULL; 364ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen is_active_ = false; 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::ShowAccountScreen() { 369731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "Showing create account screen."; 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetStatusAreaVisible(true); 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetCurrentScreen(GetAccountScreen()); 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::ShowUpdateScreen() { 375731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "Showing update screen."; 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetStatusAreaVisible(true); 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetCurrentScreen(GetUpdateScreen()); 3783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // There is no special step for update. 3793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OFFICIAL_BUILD) 380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetOobeProgress(chromeos::BackgroundView::EULA); 3813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#else 382ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetOobeProgress(chromeos::BackgroundView::SELECT_NETWORK); 3833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::ShowUserImageScreen() { 387731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "Showing user image screen."; 3883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SetStatusAreaVisible(false); 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetCurrentScreen(GetUserImageScreen()); 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetOobeProgress(chromeos::BackgroundView::PICTURE); 391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetShutdownButtonEnabled(false); 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::ShowEulaScreen() { 395731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "Showing EULA screen."; 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetStatusAreaVisible(false); 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetCurrentScreen(GetEulaScreen()); 3983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OFFICIAL_BUILD) 399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetOobeProgress(chromeos::BackgroundView::EULA); 4003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::ShowRegistrationScreen() { 404ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!IsRegisterScreenDefined()) { 405731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "Skipping registration screen: manifest not defined or invalid " 406731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "URL."; 4073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnRegistrationSkipped(); 4083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return; 4093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 410731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "Showing registration screen."; 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetStatusAreaVisible(true); 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetCurrentScreen(GetRegistrationScreen()); 4133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OFFICIAL_BUILD) 414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetOobeProgress(chromeos::BackgroundView::REGISTRATION); 4153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 4183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid WizardController::ShowHTMLPageScreen() { 419731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "Showing HTML page screen."; 4203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SetStatusAreaVisible(true); 421ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetOobeProgressBarVisible(false); 4223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SetCurrentScreen(GetHTMLPageScreen()); 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 425ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid WizardController::ShowEnterpriseEnrollmentScreen() { 426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetStatusAreaVisible(true); 427ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetOobeProgress(chromeos::BackgroundView::SIGNIN); 428ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetCurrentScreen(GetEnterpriseEnrollmentScreen()); 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 4313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid WizardController::SkipRegistration() { 4323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (current_screen_ == GetRegistrationScreen()) 4333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnRegistrationSkipped(); 4343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick else 4353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick LOG(ERROR) << "Registration screen is not active."; 4363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 4373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::RegisterPrefs(PrefService* local_state) { 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch local_state->RegisterBooleanPref(kOobeComplete, false); 44172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen local_state->RegisterIntegerPref(kDeviceRegistered, -1); 442731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick local_state->RegisterBooleanPref(kEulaAccepted, false); 443ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen local_state->RegisterStringPref(kInitialLocale, "en-US"); 4443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Check if the pref is already registered in case 4453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Preferences::RegisterUserPrefs runs before this code in the future. 4463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (local_state->FindPreference(prefs::kAccessibilityEnabled) == NULL) { 4473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick local_state->RegisterBooleanPref(prefs::kAccessibilityEnabled, false); 4483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// WizardController, ExitHandlers: 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnNetworkConnected() { 4543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (is_official_build_) { 455731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!IsEulaAccepted()) { 456731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ShowEulaScreen(); 457731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } else { 458731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Possible cases: 459731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // 1. EULA was accepted, forced shutdown/reboot during update. 460731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // 2. EULA was accepted, planned reboot after update. 461731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Make sure that device is up-to-date. 462731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick InitiateOOBEUpdate(); 463731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 4643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else { 465731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick InitiateOOBEUpdate(); 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnNetworkOffline() { 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(dpolukhin): if(is_out_of_box_) we cannot work offline and 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // should report some error message here and stay on the same screen. 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowLoginScreen(); 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnAccountCreateBack() { 47672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ShowLoginScreen(); 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnAccountCreated() { 480ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ShowLoginScreen(); 4813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(dpolukhin): clear password memory for real. Now it is not 4823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // a problem because we can't extract password from the form. 4833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick password_.clear(); 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnConnectionFailed() { 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(dpolukhin): show error message after login screen is displayed. 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowLoginScreen(); 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnUpdateCompleted() { 4923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnOOBECompleted(); 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnEulaAccepted() { 496731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick MarkEulaAccepted(); 497ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::MetricsCrosSettingsProvider::SetMetricsStatus( 498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen usage_statistics_reporting_); 499731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick InitiateOOBEUpdate(); 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnUpdateErrorCheckingForUpdate() { 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(nkostylev): Update should be required during OOBE. 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We do not want to block users from being able to proceed to the login 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // screen if there is any error checking for an update. 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // They could use "browse without sign-in" feature to set up the network to be 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // able to perform the update later. 5083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnOOBECompleted(); 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnUpdateErrorUpdating() { 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If there was an error while getting or applying the update, 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // return to network selection screen. 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(nkostylev): Show message to the user explaining update error. 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(nkostylev): Update should be required during OOBE. 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Temporary fix, need to migrate to new API. http://crosbug.com/4321 5173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnOOBECompleted(); 518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnUserImageSelected() { 521ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Notify host that we're about to launch browser session. 522ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Host will mark itself (and all controllers/windows) for deletion. 523ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->OnSessionStart(); 524ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Launch browser after controller is deleted and its windows are closed. 525731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 526731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::UI, 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FROM_HERE, 528ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewRunnableFunction(&chromeos::LoginUtils::DoBrowserLaunch, 529ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProfileManager::GetDefaultProfile())); 530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(avayvod): Sync image with Google Sync. 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnUserImageSkipped() { 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnUserImageSelected(); 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnRegistrationSuccess() { 5383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MarkDeviceRegistered(); 53972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (chromeos::UserManager::Get()->IsLoggedInAsGuest()) { 5403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick chromeos::LoginUtils::Get()->CompleteOffTheRecordLogin(start_url_); 5413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else { 5423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ShowUserImageScreen(); 5433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnRegistrationSkipped() { 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(nkostylev): Track in a histogram? 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnRegistrationSuccess(); 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 551ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid WizardController::OnEnterpriseEnrollmentDone() { 552ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ShowLoginScreen(); 553ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 554ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid WizardController::OnOOBECompleted() { 5563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MarkOobeCompleted(); 5573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ShowLoginScreen(); 5583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 5593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 560731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid WizardController::InitiateOOBEUpdate() { 561731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetUpdateScreen()->StartUpdate(); 56272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetCurrentScreenSmooth(GetUpdateScreen(), true); 563731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 564731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// WizardController, private: 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 568ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenviews::Widget* WizardController::CreateScreenWindow( 5693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const gfx::Rect& bounds, bool initial_show) { 570ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::Widget::CreateParams widget_params( 571ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::Widget::CreateParams::TYPE_WINDOW); 572ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen widget_params.transparent = true; 573ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen widget_ = views::Widget::CreateWidget(widget_params); 5743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Window transparency makes background flicker through controls that 5753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // are constantly updating its contents (like image view with video 5763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // stream). Hence enabling double buffer. 577ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static_cast<views::WidgetGtk*>(widget_)->EnableDoubleBuffer(true); 578ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen widget_->Init(NULL, bounds); 5793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::vector<int> params; 5803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // For initial show WM would animate background window. 5813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Otherwise it stays unchaged. 5823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick params.push_back(initial_show); 5833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick chromeos::WmIpc::instance()->SetWindowType( 584ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen widget_->GetNativeView(), 5853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick chromeos::WM_IPC_WINDOW_LOGIN_GUEST, 5863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ¶ms); 587ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen widget_->SetContentsView(contents_); 588ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return widget_; 5893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 5903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickgfx::Rect WizardController::GetWizardScreenBounds(int screen_width, 5923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int screen_height) const { 5933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int offset_x = (screen_bounds_.width() - screen_width) / 2; 5943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int offset_y = (screen_bounds_.height() - screen_height) / 2; 5953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int window_x = screen_bounds_.x() + offset_x; 5963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int window_y = screen_bounds_.y() + offset_y; 5973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return gfx::Rect(window_x, window_y, screen_width, screen_height); 5983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 5993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::SetCurrentScreen(WizardScreen* new_current) { 60272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetCurrentScreenSmooth(new_current, false); 60372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 60572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid WizardController::ShowCurrentScreen() { 606ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // ShowCurrentScreen may get called by smooth_show_timer_ even after 607ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // flow has been switched to sign in screen (ExistingUserController). 608ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!is_active_) 609ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 610ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 61172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen smooth_show_timer_.Stop(); 6123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool force_widget_show = false; 614ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::Widget* window = NULL; 6153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick gfx::Rect current_bounds; 6173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (widget_) 618dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen current_bounds = widget_->GetClientAreaScreenBounds(); 6193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick gfx::Size new_screen_size = current_screen_->GetScreenSize(); 6203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick gfx::Rect new_bounds = GetWizardScreenBounds(new_screen_size.width(), 6213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick new_screen_size.height()); 6223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (new_bounds != current_bounds) { 6233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (widget_) 6243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick widget_->Close(); 6253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick force_widget_show = true; 62672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen window = CreateScreenWindow(new_bounds, initial_show_); 627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 6283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick current_screen_->Show(); 6293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick contents_->Layout(); 630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch contents_->SchedulePaint(); 6313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (force_widget_show) { 6323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // This keeps the window from flashing at startup. 6333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GdkWindow* gdk_window = window->GetNativeView()->window; 6343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick gdk_window_set_back_pixmap(gdk_window, NULL, false); 6353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (widget_) 6363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick widget_->Show(); 6373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid WizardController::SetCurrentScreenSmooth(WizardScreen* new_current, 64172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool use_smoothing) { 64272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (current_screen_ == new_current || new_current == NULL) 64372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 64472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 64572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen smooth_show_timer_.Stop(); 64672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 64772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (current_screen_) { 64872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen initial_show_ = false; 64972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen current_screen_->Hide(); 65072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 65172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 65272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen current_screen_ = new_current; 65372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 65472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (use_smoothing) { 65572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen smooth_show_timer_.Start( 65672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::TimeDelta::FromMilliseconds(kShowDelayMs), 65772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen this, 65872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &WizardController::ShowCurrentScreen); 65972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen contents_->Layout(); 66072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen contents_->SchedulePaint(); 66172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else { 66272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ShowCurrentScreen(); 66372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 66472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 66572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid WizardController::SetStatusAreaVisible(bool visible) { 667ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen host_->SetStatusAreaVisible(visible); 668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::ShowFirstScreen(const std::string& first_screen_name) { 671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (first_screen_name == kNetworkScreenName) { 672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowNetworkScreen(); 673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (first_screen_name == kLoginScreenName) { 674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowLoginScreen(); 675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (first_screen_name == kAccountScreenName) { 676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowAccountScreen(); 677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (first_screen_name == kUpdateScreenName) { 678731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick InitiateOOBEUpdate(); 679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (first_screen_name == kUserImageScreenName) { 680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowUserImageScreen(); 681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (first_screen_name == kEulaScreenName) { 682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowEulaScreen(); 683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (first_screen_name == kRegistrationScreenName) { 6843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (is_official_build_) { 6853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ShowRegistrationScreen(); 6863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else { 6873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Just proceed to image screen. 6883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnRegistrationSuccess(); 6893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 6903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else if (first_screen_name == kHTMLPageScreenName) { 6913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ShowHTMLPageScreen(); 692ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (first_screen_name == kEnterpriseEnrollmentScreenName) { 693ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ShowEnterpriseEnrollmentScreen(); 694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (first_screen_name != kTestNoScreenName) { 695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (is_out_of_box_) { 696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowNetworkScreen(); 697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShowLoginScreen(); 699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// static 704731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickbool WizardController::IsEulaAccepted() { 705731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return g_browser_process->local_state()->GetBoolean(kEulaAccepted); 706731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 707731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 708731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// static 7093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool WizardController::IsOobeCompleted() { 7103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return g_browser_process->local_state()->GetBoolean(kOobeComplete); 7113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 7123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// static 714731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid WizardController::MarkEulaAccepted() { 715731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SaveBoolPreferenceForced(kEulaAccepted, true); 716731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 717731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 718731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// static 719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::MarkOobeCompleted() { 720731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SaveBoolPreferenceForced(kOobeComplete, true); 721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstatic void CreateOobeCompleteFlagFile() { 72472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Create flag file for boot-time init scripts. 72572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FilePath oobe_complete_path(kOobeCompleteFlagFilePath); 72672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!file_util::PathExists(oobe_complete_path)) { 72772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FILE* oobe_flag_file = file_util::OpenFile(oobe_complete_path, "w+b"); 72872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (oobe_flag_file == NULL) 72972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DLOG(WARNING) << kOobeCompleteFlagFilePath << " doesn't exist."; 73072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen else 73172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen file_util::CloseFile(oobe_flag_file); 73272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 73372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 73472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// static 7363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool WizardController::IsDeviceRegistered() { 73772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int value = g_browser_process->local_state()->GetInteger(kDeviceRegistered); 73872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (value > 0) { 73972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Recreate flag file in case it was lost. 74072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen BrowserThread::PostTask( 74172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen BrowserThread::FILE, 74272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FROM_HERE, 74372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewRunnableFunction(&CreateOobeCompleteFlagFile)); 74472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return true; 74572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else if (value == 0) { 74672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return false; 74772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else { 74872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Pref is not set. For compatibility check flag file. It causes blocking 74972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // IO on UI thread. But it's required for update from old versions. 75072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::ThreadRestrictions::ScopedAllowIO allow_io; 75172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FilePath oobe_complete_flag_file_path(kOobeCompleteFlagFilePath); 75272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool file_exists = file_util::PathExists(oobe_complete_flag_file_path); 75372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SaveIntegerPreferenceForced(kDeviceRegistered, file_exists ? 1 : 0); 75472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return file_exists; 75572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 75672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 75772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 75872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// static 75972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid WizardController::MarkDeviceRegistered() { 76072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SaveIntegerPreferenceForced(kDeviceRegistered, 1); 76172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen BrowserThread::PostTask( 76272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen BrowserThread::FILE, 76372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FROM_HERE, 76472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewRunnableFunction(&CreateOobeCompleteFlagFile)); 7653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 7663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// static 768ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstd::string WizardController::GetInitialLocale() { 769ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string locale = 770ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen g_browser_process->local_state()->GetString(kInitialLocale); 771ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!l10n_util::IsValidLocaleSyntax(locale)) 772ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen locale = "en-US"; 773ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return locale; 774ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 775ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 776ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// static 777ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid WizardController::SetInitialLocale(const std::string& locale) { 778ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (l10n_util::IsValidLocaleSyntax(locale)) 779ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SaveStringPreferenceForced(kInitialLocale, locale); 780731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick else 781ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 782ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 783ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 784ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// static 785ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool WizardController::IsRegisterScreenDefined() { 786ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const chromeos::StartupCustomizationDocument* manifest = 787ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::StartupCustomizationDocument::GetInstance(); 788ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return manifest->IsReady() && 789ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GURL(manifest->registration_url()).is_valid(); 790731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 791731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// WizardController, chromeos::ScreenObserver overrides: 794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WizardController::OnExit(ExitCodes exit_code) { 795201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Wizard screen exit code: " << exit_code; 796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (exit_code) { 797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case NETWORK_CONNECTED: 798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnNetworkConnected(); 799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case NETWORK_OFFLINE: 801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnNetworkOffline(); 802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case ACCOUNT_CREATE_BACK: 804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnAccountCreateBack(); 805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case ACCOUNT_CREATED: 807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnAccountCreated(); 808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 809c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case CONNECTION_FAILED: 810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnConnectionFailed(); 811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case UPDATE_INSTALLED: 813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case UPDATE_NOUPDATE: 814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnUpdateCompleted(); 815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case UPDATE_ERROR_CHECKING_FOR_UPDATE: 817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnUpdateErrorCheckingForUpdate(); 818c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case UPDATE_ERROR_UPDATING: 820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnUpdateErrorUpdating(); 821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case USER_IMAGE_SELECTED: 823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnUserImageSelected(); 824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case USER_IMAGE_SKIPPED: 826c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnUserImageSkipped(); 827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case EULA_ACCEPTED: 829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnEulaAccepted(); 830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 8313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick case EULA_BACK: 8323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ShowNetworkScreen(); 8333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick break; 834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case REGISTRATION_SUCCESS: 835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnRegistrationSuccess(); 836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case REGISTRATION_SKIPPED: 838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnRegistrationSkipped(); 839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 840ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case ENTERPRISE_ENROLLMENT_CANCELLED: 841ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case ENTERPRISE_ENROLLMENT_COMPLETED: 842ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnEnterpriseEnrollmentDone(); 843ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid WizardController::OnSetUserNamePassword(const std::string& username, 8503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& password) { 8513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick username_ = username; 8523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick password_ = password; 8533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 8543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// WizardController, WizardScreen overrides: 857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::View* WizardController::GetWizardView() { 858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return contents_; 859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchromeos::ScreenObserver* WizardController::GetObserver(WizardScreen* screen) { 862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return observer_ ? observer_ : this; 863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid WizardController::SetZeroDelays() { 86672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen kShowDelayMs = 0; 86772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 868