wizard_controller.h revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/weak_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/screen_observer.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/wizard_screen.h" 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/chromeos/policy/auto_enrollment_client.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySimple; 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PrefService; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass AutoEnrollmentCheckStep; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class EnrollmentScreen; 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ErrorScreen; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EulaScreen; 37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass HIDDetectionScreen; 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct Geoposition; 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class KioskAutolaunchScreen; 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class KioskEnableScreen; 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class LocallyManagedUserCreationScreen; 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass LoginDisplayHost; 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class LoginScreenContext; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkScreen; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OobeDisplay; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ResetScreen; 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass SimpleGeolocationProvider; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TermsOfServiceScreen; 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TimeZoneProvider; 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstruct TimeZoneResponseData; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UpdateScreen; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserImageScreen; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WizardScreen; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WrongHWIDScreen; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class that manages control flow between wizard screens. Wizard controller 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interacts with screen controllers to move the user between screens. 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WizardController : public ScreenObserver { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Observes screen changes. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Observer { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called before a screen change happens. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnScreenChanged(WizardScreen* next_screen) = 0; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called after the browser session has started. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnSessionStart() = 0; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardController(LoginDisplayHost* host, OobeDisplay* oobe_display); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WizardController(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the default wizard controller if it has been created. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static WizardController* default_controller() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_controller_; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether to skip any screens that may normally be shown after login 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (registration, Terms of Service, user image selection). 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool skip_post_login_screens() { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return skip_post_login_screens_; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets delays to zero. MUST be used only for tests. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void SetZeroDelays(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If true zero delays have been enabled (for browser tests). 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool IsZeroDelayEnabled(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Skips any screens that may normally be shown after login (registration, 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Terms of Service, user image selection). 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void SkipPostLoginScreensForTesting(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Checks whether OOBE should start enrollment automatically. 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static bool ShouldAutoStartEnrollment(); 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shows the first screen defined by |first_screen_name| or by default 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if the parameter is empty. Takes ownership of |screen_parameters|. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init(const std::string& first_screen_name, 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::DictionaryValue> screen_parameters); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Advances to screen defined by |screen_name| and shows it. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AdvanceToScreen(const std::string& screen_name); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Advances to login screen. Should be used in for testing only. 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SkipToLoginForTesting(const LoginScreenContext& context); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds and removes an observer. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddObserver(Observer* observer); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveObserver(Observer* observer); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called right after the browser session has started. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSessionStart(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Skip update, go straight to enrollment after EULA is accepted. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SkipUpdateEnrollAfterEula(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(antrim) : temporary hack. Should be removed once screen system is 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // reworked at hackaton. 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void EnableUserImageScreenReturnToPreviousHack(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Lazy initializers and getters for screens. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkScreen* GetNetworkScreen(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateScreen* GetUpdateScreen(); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserImageScreen* GetUserImageScreen(); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EulaScreen* GetEulaScreen(); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnrollmentScreen* GetEnrollmentScreen(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetScreen* GetResetScreen(); 129868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) KioskAutolaunchScreen* GetKioskAutolaunchScreen(); 1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) KioskEnableScreen* GetKioskEnableScreen(); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TermsOfServiceScreen* GetTermsOfServiceScreen(); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WrongHWIDScreen* GetWrongHWIDScreen(); 133a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch HIDDetectionScreen* GetHIDDetectionScreen(); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LocallyManagedUserCreationScreen* GetLocallyManagedUserCreationScreen(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a pointer to the current screen or NULL if there's no such 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // screen. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardScreen* current_screen() const { return current_screen_; } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the current wizard instance has reached the login screen. 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool login_screen_started() const { return login_screen_started_; } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kNetworkScreenName[]; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kLoginScreenName[]; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kUpdateScreenName[]; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kUserImageScreenName[]; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kOutOfBoxScreenName[]; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kTestNoScreenName[]; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kEulaScreenName[]; 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kEnrollmentScreenName[]; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kResetScreenName[]; 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static const char kKioskEnableScreenName[]; 153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static const char kKioskAutolaunchScreenName[]; 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kErrorScreenName[]; 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const char kTermsOfServiceScreenName[]; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const char kWrongHWIDScreenName[]; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const char kLocallyManagedUserCreationScreenName[]; 1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) static const char kAppLaunchSplashScreenName[]; 159a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch static const char kHIDDetectionScreenName []; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Volume percent at which spoken feedback is still audible. 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const int kMinAudibleOutputVolumePercent; 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Show specific screen. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowNetworkScreen(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowUpdateScreen(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowUserImageScreen(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowEulaScreen(); 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ShowEnrollmentScreen(); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowResetScreen(); 172868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void ShowKioskAutolaunchScreen(); 1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void ShowKioskEnableScreen(); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ShowTermsOfServiceScreen(); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ShowWrongHWIDScreen(); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ShowLocallyManagedUserCreationScreen(); 177a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void ShowHIDDetectionScreen(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shows images login screen. 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void ShowLoginScreen(const LoginScreenContext& context); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resumes a pending login screen. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResumeLoginScreen(); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exit handlers: 186a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void OnHIDDetectionCompleted(); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnNetworkConnected(); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnNetworkOffline(); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnConnectionFailed(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUpdateCompleted(); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnEulaAccepted(); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUpdateErrorCheckingForUpdate(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUpdateErrorUpdating(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUserImageSelected(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUserImageSkipped(); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnEnrollmentDone(); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnAutoEnrollmentDone(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnResetCanceled(); 199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void OnKioskAutolaunchCanceled(); 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void OnKioskAutolaunchConfirmed(); 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnKioskEnableCompleted(); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnWrongHWIDWarningSkipped(); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnOOBECompleted(); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnTermsOfServiceDeclined(); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnTermsOfServiceAccepted(); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Loads brand code on I/O enabled thread and stores to Local State. 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void LoadBrandCodeFromFile(); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called after all post-EULA blocking tasks have been completed. 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnEulaBlockingTasksDone(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shows update screen and starts update process. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitiateOOBEUpdate(); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Actions that should be done right after EULA is accepted, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before update check. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PerformPostEulaActions(); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Actions that should be done right after update stage is finished. 221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void PerformOOBECompletedActions(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ScreenObserver: 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnExit(ExitCodes exit_code) OVERRIDE; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ShowCurrentScreen() OVERRIDE; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnSetUserNamePassword(const std::string& username, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& password) OVERRIDE; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUsageStatisticsReporting(bool val) OVERRIDE; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetUsageStatisticsReporting() const OVERRIDE; 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ErrorScreen* GetErrorScreen() OVERRIDE; 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ShowErrorScreen() OVERRIDE; 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void HideErrorScreen(WizardScreen* parent_screen) OVERRIDE; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Notification of a change in the state of an accessibility setting. 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnAccessibilityStatusChanged( 236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const AccessibilityStatusEventDetails& details); 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Switches from one screen to another. 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCurrentScreen(WizardScreen* screen); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Switches from one screen to another with delay before showing. Calling 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ShowCurrentScreen directly forces screen to be shown immediately. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCurrentScreenSmooth(WizardScreen* screen, bool use_smoothing); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Changes status area visibility. 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetStatusAreaVisible(bool visible); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Logs in the specified user via default login screen. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Login(const std::string& username, const std::string& password); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 251868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Launched kiosk app configured for auto-launch. 252868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void AutoLaunchKioskApp(); 253868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 254868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Checks whether the user is allowed to exit enrollment. 255effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static bool CanExitEnrollment(); 256effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 257effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Gets the management domain. 258effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static std::string GetForcedEnrollmentDomain(); 259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 26058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Called when LocalState is initialized. 26158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void OnLocalStateInitialized(bool /* succeeded */); 26258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 263effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Kicks off the auto-enrollment check step. Once it finishes, it'll call 264effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // back via ScreenObserver::OnExit(). 265effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void StartAutoEnrollmentCheck(); 266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Returns local state. 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PrefService* GetLocalState(); 26958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 27058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static void set_local_state_for_testing(PrefService* local_state) { 27158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) local_state_for_testing_ = local_state; 27258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 27358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 274effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Called when network is UP. 2750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void StartTimezoneResolve(); 276effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 277effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Creates provider on demand. 278effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TimeZoneProvider* GetTimezoneProvider(); 279effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 280effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // TimeZoneRequest::TimeZoneResponseCallback implementation. 281effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnTimezoneResolved(scoped_ptr<TimeZoneResponseData> timezone, 282effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool server_error); 283effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Called from SimpleGeolocationProvider when location is resolved. 2850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void OnLocationResolved(const Geoposition& position, 2860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool server_error, 2870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::TimeDelta elapsed); 2880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether to skip any screens that may normally be shown after login 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (registration, Terms of Service, user image selection). 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool skip_post_login_screens_; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool zero_delay_enabled_; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Screens. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<NetworkScreen> network_screen_; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<UpdateScreen> update_screen_; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<UserImageScreen> user_image_screen_; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<EulaScreen> eula_screen_; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ResetScreen> reset_screen_; 301868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<KioskAutolaunchScreen> autolaunch_screen_; 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<KioskEnableScreen> kiosk_enable_screen_; 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<EnrollmentScreen> enrollment_screen_; 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ErrorScreen> error_screen_; 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TermsOfServiceScreen> terms_of_service_screen_; 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<WrongHWIDScreen> wrong_hwid_screen_; 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LocallyManagedUserCreationScreen> 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) locally_managed_user_creation_screen_; 309a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<HIDDetectionScreen> hid_detection_screen_; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Screen that's currently active. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardScreen* current_screen_; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Screen that was active before, or NULL for login screen. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardScreen* previous_screen_; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string username_; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string password_; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if running official BUILD. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_official_build_; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if full OOBE flow should be shown. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_out_of_box_; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Value of the screen name that WizardController was started with. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string first_screen_name_; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OOBE/login display host. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoginDisplayHost* host_; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Default WizardController. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static WizardController* default_controller_; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The auto-enrollment check step, currently active. 336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<AutoEnrollmentCheckStep> auto_enrollment_check_step_; 337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parameters for the first screen. May be NULL. 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::DictionaryValue> screen_parameters_; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::OneShotTimer<WizardController> smooth_show_timer_; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OobeDisplay* oobe_display_; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // State of Usage stat/error reporting checkbox on EULA screen 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // during wizard lifetime. 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool usage_statistics_reporting_; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If true then update check is cancelled and enrollment is started after 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // EULA is accepted. 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool skip_update_enroll_after_eula_; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Time when the EULA was accepted. Used to measure the duration from the EULA 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // acceptance until the Sign-In screen is displayed. 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time_eula_accepted_; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<Observer> observer_list_; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool login_screen_started_; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Indicates that once image selection screen finishes we should return to 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // a previous screen instead of proceeding with usual flow. 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool user_image_screen_return_to_previous_hack_; 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Non-owning pointer to local state used for testing. 36658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static PrefService* local_state_for_testing_; 36758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(EnrollmentScreenTest, TestCancel); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(WizardControllerFlowTest, Accelerators); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class WizardControllerFlowTest; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class WizardInProcessBrowserTest; 37258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) friend class WizardControllerBrokenLocalStateTest; 37358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 374a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<AccessibilityStatusSubscription> accessibility_subscription_; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 376a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::WeakPtrFactory<WizardController> weak_factory_; 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<SimpleGeolocationProvider> geolocation_provider_; 379effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<TimeZoneProvider> timezone_provider_; 380effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WizardController); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_CONTROLLER_H_ 387