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