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)
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/basictypes.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/containers/hash_tables.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/linked_ptr.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/weak_ptr.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h"
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h"
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/login/screen_manager.h"
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/screen_observer.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySimple;
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PrefService;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace pairing_chromeos {
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SharkConnectionListener;
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ControllerPairingController;
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass HostPairingController;
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class AutoEnrollmentCheckScreen;
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class EnrollmentScreen;
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ErrorScreen;
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)struct Geoposition;
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass LoginDisplayHost;
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class LoginScreenContext;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkScreen;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OobeDisplay;
480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass SimpleGeolocationProvider;
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SupervisedUserCreationScreen;
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TimeZoneProvider;
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstruct TimeZoneResponseData;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UpdateScreen;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserImageScreen;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class that manages control flow between wizard screens. Wizard controller
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interacts with screen controllers to move the user between screens.
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass WizardController : public ScreenObserver, public ScreenManager {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Observes screen changes.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class Observer {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called before a screen change happens.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnScreenChanged(WizardScreen* next_screen) = 0;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called after the browser session has started.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnSessionStart() = 0;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WizardController(LoginDisplayHost* host, OobeDisplay* oobe_display);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WizardController();
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the default wizard controller if it has been created.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static WizardController* default_controller() {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return default_controller_;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Whether to skip any screens that may normally be shown after login
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // (registration, Terms of Service, user image selection).
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static bool skip_post_login_screens() {
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return skip_post_login_screens_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets delays to zero. MUST be used only for tests.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void SetZeroDelays();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If true zero delays have been enabled (for browser tests).
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsZeroDelayEnabled();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Checks whether screen show time should be tracked with UMA.
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static bool IsOOBEStepToTrack(const std::string& screen_id);
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Skips any screens that may normally be shown after login (registration,
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Terms of Service, user image selection).
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void SkipPostLoginScreensForTesting();
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Checks whether OOBE should start enrollment automatically.
97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  static bool ShouldAutoStartEnrollment();
98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Checks whether OOBE should recover enrollment.  Note that this flips to
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // false once device policy has been restored as a part of recovery.
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static bool ShouldRecoverEnrollment();
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Obtains domain the device used to be enrolled to from install attributes.
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static std::string GetEnrollmentRecoveryDomain();
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the first screen defined by |first_screen_name| or by default
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if the parameter is empty. Takes ownership of |screen_parameters|.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(const std::string& first_screen_name,
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            scoped_ptr<base::DictionaryValue> screen_parameters);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Advances to screen defined by |screen_name| and shows it.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AdvanceToScreen(const std::string& screen_name);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Advances to login screen. Should be used in for testing only.
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SkipToLoginForTesting(const LoginScreenContext& context);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds and removes an observer.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddObserver(Observer* observer);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RemoveObserver(Observer* observer);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called right after the browser session has started.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnSessionStart();
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Skip update, go straight to enrollment after EULA is accepted.
12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void SkipUpdateEnrollAfterEula();
12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // TODO(antrim) : temporary hack. Should be removed once screen system is
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // reworked at hackaton.
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void EnableUserImageScreenReturnToPreviousHack();
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Callback for enrollment auth token.
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void OnEnrollmentAuthTokenReceived(const std::string& auth_token);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a pointer to the current screen or NULL if there's no such
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // screen.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WizardScreen* current_screen() const { return current_screen_; }
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the current wizard instance has reached the login screen.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool login_screen_started() const { return login_screen_started_; }
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // ScreenManager implementation.
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual WizardScreen* CreateScreen(const std::string& screen_name) OVERRIDE;
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kNetworkScreenName[];
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kLoginScreenName[];
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kUpdateScreenName[];
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kUserImageScreenName[];
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kOutOfBoxScreenName[];
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kTestNoScreenName[];
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kEulaScreenName[];
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static const char kEnrollmentScreenName[];
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kResetScreenName[];
1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  static const char kKioskEnableScreenName[];
154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  static const char kKioskAutolaunchScreenName[];
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static const char kErrorScreenName[];
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kTermsOfServiceScreenName[];
15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  static const char kAutoEnrollmentCheckScreenName[];
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kWrongHWIDScreenName[];
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static const char kSupervisedUserCreationScreenName[];
1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  static const char kAppLaunchSplashScreenName[];
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const char kHIDDetectionScreenName[];
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const char kControllerPairingScreenName[];
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const char kHostPairingScreenName[];
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Volume percent at which spoken feedback is still audible.
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static const int kMinAudibleOutputVolumePercent;
1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Show specific screen.
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowNetworkScreen();
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowUpdateScreen();
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowUserImageScreen();
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowEulaScreen();
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void ShowEnrollmentScreen();
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowResetScreen();
176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void ShowKioskAutolaunchScreen();
1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void ShowKioskEnableScreen();
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ShowTermsOfServiceScreen();
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ShowWrongHWIDScreen();
18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void ShowAutoEnrollmentCheckScreen();
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void ShowSupervisedUserCreationScreen();
182a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  void ShowHIDDetectionScreen();
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void ShowControllerPairingScreen();
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void ShowHostPairingScreen();
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows images login screen.
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void ShowLoginScreen(const LoginScreenContext& context);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resumes a pending login screen.
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ResumeLoginScreen();
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Invokes corresponding first OOBE screen.
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void OnHIDScreenNecessityCheck(bool screen_needed);
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Exit handlers:
196a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  void OnHIDDetectionCompleted();
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnNetworkConnected();
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnNetworkOffline();
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnConnectionFailed();
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUpdateCompleted();
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnEulaAccepted();
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUpdateErrorCheckingForUpdate();
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUpdateErrorUpdating();
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUserImageSelected();
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUserImageSkipped();
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnEnrollmentDone();
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnAutoEnrollmentDone();
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnResetCanceled();
209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void OnKioskAutolaunchCanceled();
210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void OnKioskAutolaunchConfirmed();
2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void OnKioskEnableCompleted();
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnWrongHWIDWarningSkipped();
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void OnAutoEnrollmentCheckCompleted();
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnTermsOfServiceDeclined();
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnTermsOfServiceAccepted();
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnControllerPairingFinished();
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnHostPairingFinished();
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Callback function after setting MetricsReporting.
2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void InitiateMetricsReportingChangeCallback(bool enabled);
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Loads brand code on I/O enabled thread and stores to Local State.
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void LoadBrandCodeFromFile();
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called after all post-EULA blocking tasks have been completed.
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnEulaBlockingTasksDone();
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows update screen and starts update process.
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitiateOOBEUpdate();
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Actions that should be done right after EULA is accepted,
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // before update check.
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PerformPostEulaActions();
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Actions that should be done right after update stage is finished.
236effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void PerformOOBECompletedActions();
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from ScreenObserver:
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnExit(ExitCodes exit_code) OVERRIDE;
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowCurrentScreen() OVERRIDE;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSetUserNamePassword(const std::string& username,
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const std::string& password) OVERRIDE;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUsageStatisticsReporting(bool val) OVERRIDE;
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetUsageStatisticsReporting() const OVERRIDE;
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ErrorScreen* GetErrorScreen() OVERRIDE;
246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void ShowErrorScreen() OVERRIDE;
247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void HideErrorScreen(WizardScreen* parent_screen) OVERRIDE;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Notification of a change in the state of an accessibility setting.
250a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void OnAccessibilityStatusChanged(
251a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const AccessibilityStatusEventDetails& details);
2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Switches from one screen to another.
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCurrentScreen(WizardScreen* screen);
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Switches from one screen to another with delay before showing. Calling
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ShowCurrentScreen directly forces screen to be shown immediately.
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCurrentScreenSmooth(WizardScreen* screen, bool use_smoothing);
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Changes status area visibility.
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetStatusAreaVisible(bool visible);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Logs in the specified user via default login screen.
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Login(const std::string& username, const std::string& password);
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
266868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Launched kiosk app configured for auto-launch.
267868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void AutoLaunchKioskApp();
268868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
269868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Checks whether the user is allowed to exit enrollment.
270effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  static bool CanExitEnrollment();
271effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
272effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Gets the management domain.
273effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  static std::string GetForcedEnrollmentDomain();
274868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
27558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Called when LocalState is initialized.
27658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnLocalStateInitialized(bool /* succeeded */);
27758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
27858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Returns local state.
27958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  PrefService* GetLocalState();
28058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
28158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  static void set_local_state_for_testing(PrefService* local_state) {
28258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    local_state_for_testing_ = local_state;
28358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
28458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::string first_screen_name() { return first_screen_name_; }
286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Called when network is UP.
2880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void StartTimezoneResolve();
289effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
290effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Creates provider on demand.
291effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  TimeZoneProvider* GetTimezoneProvider();
292effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
293effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // TimeZoneRequest::TimeZoneResponseCallback implementation.
294effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnTimezoneResolved(scoped_ptr<TimeZoneResponseData> timezone,
295effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                          bool server_error);
296effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
2970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Called from SimpleGeolocationProvider when location is resolved.
2980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void OnLocationResolved(const Geoposition& position,
2990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                          bool server_error,
3000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                          const base::TimeDelta elapsed);
3010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Returns true if callback has been installed.
303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Returns false if timezone has already been resolved.
304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool SetOnTimeZoneResolvedForTesting(const base::Closure& callback);
305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Returns true for pairing remora OOBE.
3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool IsHostPairingOobe() const;
3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Starts listening for an incoming shark controller connection, if we are
3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // running remora OOBE.
3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void MaybeStartListeningForSharkConnection();
3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Called when a connection to controller has been established. Wizard
3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // controller takes the ownership of |pairing_controller| after that call.
3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void OnSharkConnected(
3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      scoped_ptr<pairing_chromeos::HostPairingController> pairing_controller);
3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Whether to skip any screens that may normally be shown after login
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // (registration, Terms of Service, user image selection).
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static bool skip_post_login_screens_;
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool zero_delay_enabled_;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Screen that's currently active.
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WizardScreen* current_screen_;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Screen that was active before, or NULL for login screen.
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WizardScreen* previous_screen_;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string username_;
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string password_;
3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::string auth_token_;
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if running official BUILD.
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_official_build_;
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if full OOBE flow should be shown.
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_out_of_box_;
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Value of the screen name that WizardController was started with.
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string first_screen_name_;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OOBE/login display host.
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LoginDisplayHost* host_;
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Default WizardController.
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static WizardController* default_controller_;
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Parameters for the first screen. May be NULL.
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> screen_parameters_;
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::OneShotTimer<WizardController> smooth_show_timer_;
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OobeDisplay* oobe_display_;
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // State of Usage stat/error reporting checkbox on EULA screen
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // during wizard lifetime.
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool usage_statistics_reporting_;
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
36046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // If true then update check is cancelled and enrollment is started after
36146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // EULA is accepted.
36246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool skip_update_enroll_after_eula_;
36346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Whether enrollment will be or has been recovered in the current wizard
365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // instance.
366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool enrollment_recovery_;
367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Time when the EULA was accepted. Used to measure the duration from the EULA
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // acceptance until the Sign-In screen is displayed.
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time time_eula_accepted_;
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Time when OOBE was started. Used to measure the total time from boot to
373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // user Sign-In completed.
374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::Time time_oobe_started_;
375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ObserverList<Observer> observer_list_;
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool login_screen_started_;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Indicates that once image selection screen finishes we should return to
381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // a previous screen instead of proceeding with usual flow.
382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool user_image_screen_return_to_previous_hack_;
383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
38458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Non-owning pointer to local state used for testing.
38558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  static PrefService* local_state_for_testing_;
38658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(EnrollmentScreenTest, TestCancel);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(WizardControllerFlowTest, Accelerators);
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class WizardControllerFlowTest;
390cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  friend class WizardControllerOobeResumeTest;
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class WizardInProcessBrowserTest;
39258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  friend class WizardControllerBrokenLocalStateTest;
39358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<AccessibilityStatusSubscription> accessibility_subscription_;
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  scoped_ptr<SimpleGeolocationProvider> geolocation_provider_;
397effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  scoped_ptr<TimeZoneProvider> timezone_provider_;
398effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Pairing controller for shark devices.
4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<pairing_chromeos::ControllerPairingController>
4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      controller_pairing_controller_;
4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Pairing controller for remora devices.
4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<pairing_chromeos::HostPairingController> host_pairing_controller_;
4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Maps screen ids to last time of their shows.
407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::hash_map<std::string, base::Time> screen_show_times_;
408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
409cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Tests check result of timezone resolve.
410cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool timezone_resolved_;
411cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  base::Closure on_timezone_resolved_for_testing_;
412cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // True if shark device initiated connection to this device.
4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool shark_controller_detected_;
4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Listens for incoming connection from a shark controller if a regular (not
4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // pairing) remora OOBE is active. If connection is established, wizard
4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // conroller swithces to a pairing OOBE.
4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<pairing_chromeos::SharkConnectionListener>
4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      shark_connection_listener_;
4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
422cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  base::WeakPtrFactory<WizardController> weak_factory_;
423cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WizardController);
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_CONTROLLER_H_
430