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      &params);
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