wizard_controller.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_CONTROLLER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_CONTROLLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/time.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/timer.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/screen_observer.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/wizard_screen.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "googleurl/src/gurl.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EnterpriseEnrollmentScreen;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EulaScreen;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HTMLPageScreen;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LoginDisplayHost;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkScreen;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OobeDisplay;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RegistrationScreen;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ResetScreen;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UpdateScreen;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserImageScreen;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WizardScreen;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class that manages control flow between wizard screens. Wizard controller
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interacts with screen controllers to move the user between screens.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WizardController : public ScreenObserver {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Observes screen changes.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class Observer {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called before a screen change happens.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnScreenChanged(WizardScreen* next_screen) = 0;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called after the browser session has started.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnSessionStart() = 0;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WizardController(LoginDisplayHost* host, OobeDisplay* oobe_display);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WizardController();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the default wizard controller if it has been created.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static WizardController* default_controller() {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return default_controller_;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether the user image selection step should be skipped.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool skip_user_image_selection() {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return skip_user_image_selection_;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if EULA has been accepted.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsEulaAccepted();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns OOBE completion status.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsOobeCompleted();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Marks EULA status as accepted.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void MarkEulaAccepted();
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Marks OOBE process as completed.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void MarkOobeCompleted();
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns device registration completion status, i.e. second part of OOBE.
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsDeviceRegistered();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if valid registration URL is defined.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsRegisterScreenDefined();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Marks device registered. i.e. second part of OOBE is completed.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void MarkDeviceRegistered();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns initial locale from local settings.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string GetInitialLocale();
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets delays to zero. MUST be used only for tests.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void SetZeroDelays();
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If true zero delays have been enabled (for browser tests).
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsZeroDelayEnabled();
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets initial locale in local settings.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void SetInitialLocale(const std::string& locale);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Registers OOBE preferences.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void RegisterPrefs(PrefService* local_state);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Marks user image screen to be always skipped after login.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void SkipImageSelectionForTesting();
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the first screen defined by |first_screen_name| or by default
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if the parameter is empty. Takes ownership of |screen_parameters|.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(const std::string& first_screen_name,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            base::DictionaryValue* screen_parameters);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Advances to screen defined by |screen_name| and shows it.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AdvanceToScreen(const std::string& screen_name);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Advances to login screen. Should be used in for testing only.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SkipToLoginForTesting();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If being at register screen proceeds to the next one.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SkipRegistration();
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds and removes an observer.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddObserver(Observer* observer);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RemoveObserver(Observer* observer);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called right after the browser session has started.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnSessionStart();
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Skip update, go straight to enrollment after EULA is accepted.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SkipUpdateEnrollAfterEula();
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Lazy initializers and getters for screens.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkScreen* GetNetworkScreen();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UpdateScreen* GetUpdateScreen();
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UserImageScreen* GetUserImageScreen();
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EulaScreen* GetEulaScreen();
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegistrationScreen* GetRegistrationScreen();
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HTMLPageScreen* GetHTMLPageScreen();
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterpriseEnrollmentScreen* GetEnterpriseEnrollmentScreen();
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResetScreen* GetResetScreen();
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a pointer to the current screen or NULL if there's no such
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // screen.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WizardScreen* current_screen() const { return current_screen_; }
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the current wizard instance has reached the login screen.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool login_screen_started() const { return login_screen_started_; }
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kNetworkScreenName[];
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kLoginScreenName[];
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kUpdateScreenName[];
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kUserImageScreenName[];
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kRegistrationScreenName[];
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kOutOfBoxScreenName[];
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kTestNoScreenName[];
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kEulaScreenName[];
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kHTMLPageScreenName[];
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kEnterpriseEnrollmentScreenName[];
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kResetScreenName[];
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Show specific screen.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowNetworkScreen();
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowUpdateScreen();
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowUserImageScreen();
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowEulaScreen();
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowRegistrationScreen();
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowHTMLPageScreen();
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowEnterpriseEnrollmentScreen();
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowResetScreen();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows images login screen.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowLoginScreen();
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resumes a pending login screen.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ResumeLoginScreen();
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Exit handlers:
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnNetworkConnected();
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnNetworkOffline();
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnConnectionFailed();
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUpdateCompleted();
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnEulaAccepted();
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUpdateErrorCheckingForUpdate();
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUpdateErrorUpdating();
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUserImageSelected();
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUserImageSkipped();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnRegistrationSuccess();
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnRegistrationSkipped();
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnEnterpriseEnrollmentDone();
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnEnterpriseAutoEnrollmentDone();
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnResetCanceled();
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnOOBECompleted();
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows update screen and starts update process.
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitiateOOBEUpdate();
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Actions that should be done right after EULA is accepted,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // before update check.
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PerformPostEulaActions();
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Actions that should be done right after update stage is finished.
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PerformPostUpdateActions();
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from ScreenObserver:
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnExit(ExitCodes exit_code) OVERRIDE;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowCurrentScreen() OVERRIDE;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSetUserNamePassword(const std::string& username,
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const std::string& password) OVERRIDE;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUsageStatisticsReporting(bool val) OVERRIDE;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetUsageStatisticsReporting() const OVERRIDE;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Switches from one screen to another.
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCurrentScreen(WizardScreen* screen);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Switches from one screen to another with delay before showing. Calling
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ShowCurrentScreen directly forces screen to be shown immediately.
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCurrentScreenSmooth(WizardScreen* screen, bool use_smoothing);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Changes status area visibility.
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetStatusAreaVisible(bool visible);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Logs in the specified user via default login screen.
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Login(const std::string& username, const std::string& password);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool skip_user_image_selection_;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool zero_delay_enabled_;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Screens.
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<NetworkScreen> network_screen_;
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<UpdateScreen> update_screen_;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<UserImageScreen> user_image_screen_;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<EulaScreen> eula_screen_;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<RegistrationScreen> registration_screen_;
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ResetScreen> reset_screen_;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<HTMLPageScreen> html_page_screen_;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<EnterpriseEnrollmentScreen>
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      enterprise_enrollment_screen_;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Screen that's currently active.
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WizardScreen* current_screen_;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Screen that was active before, or NULL for login screen.
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WizardScreen* previous_screen_;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string username_;
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string password_;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if running official BUILD.
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_official_build_;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if full OOBE flow should be shown.
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_out_of_box_;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Value of the screen name that WizardController was started with.
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string first_screen_name_;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OOBE/login display host.
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LoginDisplayHost* host_;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Default WizardController.
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static WizardController* default_controller_;
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Parameters for the first screen. May be NULL.
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> screen_parameters_;
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::OneShotTimer<WizardController> smooth_show_timer_;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OobeDisplay* oobe_display_;
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // State of Usage stat/error reporting checkbox on EULA screen
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // during wizard lifetime.
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool usage_statistics_reporting_;
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If true then update check is cancelled and enrollment is started after
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // EULA is accepted.
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool skip_update_enroll_after_eula_;
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Time when the EULA was accepted. Used to measure the duration from the EULA
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // acceptance until the Sign-In screen is displayed.
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time time_eula_accepted_;
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ObserverList<Observer> observer_list_;
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool login_screen_started_;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(EnterpriseEnrollmentScreenTest, TestCancel);
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(WizardControllerFlowTest, Accelerators);
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class WizardControllerFlowTest;
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class WizardInProcessBrowserTest;
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WizardController);
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_CONTROLLER_H_
298