| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_CONTROLLER_H_ |
| #define CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_CONTROLLER_H_ |
| |
| #include <string> |
| |
| #include "base/compiler_specific.h" |
| #include "base/gtest_prod_util.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/observer_list.h" |
| #include "base/time/time.h" |
| #include "base/timer/timer.h" |
| #include "chrome/browser/chromeos/login/screens/screen_observer.h" |
| #include "chrome/browser/chromeos/login/screens/wizard_screen.h" |
| #include "ui/gfx/rect.h" |
| #include "url/gurl.h" |
| |
| class PrefRegistrySimple; |
| class PrefService; |
| |
| namespace base { |
| class DictionaryValue; |
| } |
| |
| namespace chromeos { |
| |
| class EnrollmentScreen; |
| class ErrorScreen; |
| class EulaScreen; |
| class KioskAutolaunchScreen; |
| class KioskEnableScreen; |
| class LocallyManagedUserCreationScreen; |
| class LoginDisplayHost; |
| class LoginScreenContext; |
| class NetworkScreen; |
| class OobeDisplay; |
| class ResetScreen; |
| class TermsOfServiceScreen; |
| class UpdateScreen; |
| class UserImageScreen; |
| class WizardScreen; |
| class WrongHWIDScreen; |
| |
| // Class that manages control flow between wizard screens. Wizard controller |
| // interacts with screen controllers to move the user between screens. |
| class WizardController : public ScreenObserver { |
| public: |
| // Observes screen changes. |
| class Observer { |
| public: |
| // Called before a screen change happens. |
| virtual void OnScreenChanged(WizardScreen* next_screen) = 0; |
| |
| // Called after the browser session has started. |
| virtual void OnSessionStart() = 0; |
| }; |
| |
| WizardController(LoginDisplayHost* host, OobeDisplay* oobe_display); |
| virtual ~WizardController(); |
| |
| // Returns the default wizard controller if it has been created. |
| static WizardController* default_controller() { |
| return default_controller_; |
| } |
| |
| // Whether to skip any screens that may normally be shown after login |
| // (registration, Terms of Service, user image selection). |
| static bool skip_post_login_screens() { |
| return skip_post_login_screens_; |
| } |
| |
| // Sets delays to zero. MUST be used only for tests. |
| static void SetZeroDelays(); |
| |
| // If true zero delays have been enabled (for browser tests). |
| static bool IsZeroDelayEnabled(); |
| |
| // Skips any screens that may normally be shown after login (registration, |
| // Terms of Service, user image selection). |
| static void SkipPostLoginScreensForTesting(); |
| |
| // Checks whether OOBE should start enrollment automatically. |
| static bool ShouldAutoStartEnrollment(); |
| |
| // Shows the first screen defined by |first_screen_name| or by default |
| // if the parameter is empty. Takes ownership of |screen_parameters|. |
| void Init(const std::string& first_screen_name, |
| scoped_ptr<base::DictionaryValue> screen_parameters); |
| |
| // Advances to screen defined by |screen_name| and shows it. |
| void AdvanceToScreen(const std::string& screen_name); |
| |
| // Advances to screen defined by |screen_name| and shows it. |
| // Takes ownership of |screen_parameters|. |
| void AdvanceToScreenWithParams(const std::string& first_screen_name, |
| base::DictionaryValue* screen_parameters); |
| |
| // Advances to login screen. Should be used in for testing only. |
| void SkipToLoginForTesting(const LoginScreenContext& context); |
| |
| // Adds and removes an observer. |
| void AddObserver(Observer* observer); |
| void RemoveObserver(Observer* observer); |
| |
| // Called right after the browser session has started. |
| void OnSessionStart(); |
| |
| // Skip update, go straight to enrollment after EULA is accepted. |
| void SkipUpdateEnrollAfterEula(); |
| |
| // TODO(antrim) : temporary hack. Should be removed once screen system is |
| // reworked at hackaton. |
| void EnableUserImageScreenReturnToPreviousHack(); |
| |
| // Lazy initializers and getters for screens. |
| NetworkScreen* GetNetworkScreen(); |
| UpdateScreen* GetUpdateScreen(); |
| UserImageScreen* GetUserImageScreen(); |
| EulaScreen* GetEulaScreen(); |
| EnrollmentScreen* GetEnrollmentScreen(); |
| ResetScreen* GetResetScreen(); |
| KioskAutolaunchScreen* GetKioskAutolaunchScreen(); |
| KioskEnableScreen* GetKioskEnableScreen(); |
| TermsOfServiceScreen* GetTermsOfServiceScreen(); |
| WrongHWIDScreen* GetWrongHWIDScreen(); |
| LocallyManagedUserCreationScreen* GetLocallyManagedUserCreationScreen(); |
| |
| // Returns a pointer to the current screen or NULL if there's no such |
| // screen. |
| WizardScreen* current_screen() const { return current_screen_; } |
| |
| // Returns true if the current wizard instance has reached the login screen. |
| bool login_screen_started() const { return login_screen_started_; } |
| |
| static const char kNetworkScreenName[]; |
| static const char kLoginScreenName[]; |
| static const char kUpdateScreenName[]; |
| static const char kUserImageScreenName[]; |
| static const char kOutOfBoxScreenName[]; |
| static const char kTestNoScreenName[]; |
| static const char kEulaScreenName[]; |
| static const char kEnrollmentScreenName[]; |
| static const char kResetScreenName[]; |
| static const char kKioskEnableScreenName[]; |
| static const char kKioskAutolaunchScreenName[]; |
| static const char kErrorScreenName[]; |
| static const char kTermsOfServiceScreenName[]; |
| static const char kWrongHWIDScreenName[]; |
| static const char kLocallyManagedUserCreationScreenName[]; |
| static const char kAppLaunchSplashScreenName[]; |
| |
| private: |
| // Show specific screen. |
| void ShowNetworkScreen(); |
| void ShowUpdateScreen(); |
| void ShowUserImageScreen(); |
| void ShowEulaScreen(); |
| void ShowEnrollmentScreen(); |
| void ShowResetScreen(); |
| void ShowKioskAutolaunchScreen(); |
| void ShowKioskEnableScreen(); |
| void ShowTermsOfServiceScreen(); |
| void ShowWrongHWIDScreen(); |
| void ShowLocallyManagedUserCreationScreen(); |
| |
| // Shows images login screen. |
| void ShowLoginScreen(const LoginScreenContext& context); |
| |
| // Resumes a pending login screen. |
| void ResumeLoginScreen(); |
| |
| // Exit handlers: |
| void OnNetworkConnected(); |
| void OnNetworkOffline(); |
| void OnConnectionFailed(); |
| void OnUpdateCompleted(); |
| void OnEulaAccepted(); |
| void OnUpdateErrorCheckingForUpdate(); |
| void OnUpdateErrorUpdating(); |
| void OnUserImageSelected(); |
| void OnUserImageSkipped(); |
| void OnEnrollmentDone(); |
| void OnAutoEnrollmentDone(); |
| void OnResetCanceled(); |
| void OnKioskAutolaunchCanceled(); |
| void OnKioskAutolaunchConfirmed(); |
| void OnKioskEnableCompleted(); |
| void OnWrongHWIDWarningSkipped(); |
| void OnOOBECompleted(); |
| void OnTermsOfServiceDeclined(); |
| void OnTermsOfServiceAccepted(); |
| |
| // Loads brand code on I/O enabled thread and stores to Local State. |
| void LoadBrandCodeFromFile(); |
| |
| // Called after all post-EULA blocking tasks have been completed. |
| void OnEulaBlockingTasksDone(); |
| |
| // Shows update screen and starts update process. |
| void InitiateOOBEUpdate(); |
| |
| // Actions that should be done right after EULA is accepted, |
| // before update check. |
| void PerformPostEulaActions(); |
| |
| // Actions that should be done right after update stage is finished. |
| void PerformPostUpdateActions(); |
| |
| // Overridden from ScreenObserver: |
| virtual void OnExit(ExitCodes exit_code) OVERRIDE; |
| virtual void ShowCurrentScreen() OVERRIDE; |
| virtual void OnSetUserNamePassword(const std::string& username, |
| const std::string& password) OVERRIDE; |
| virtual void SetUsageStatisticsReporting(bool val) OVERRIDE; |
| virtual bool GetUsageStatisticsReporting() const OVERRIDE; |
| virtual ErrorScreen* GetErrorScreen() OVERRIDE; |
| virtual void ShowErrorScreen() OVERRIDE; |
| virtual void HideErrorScreen(WizardScreen* parent_screen) OVERRIDE; |
| |
| // Switches from one screen to another. |
| void SetCurrentScreen(WizardScreen* screen); |
| |
| // Switches from one screen to another with delay before showing. Calling |
| // ShowCurrentScreen directly forces screen to be shown immediately. |
| void SetCurrentScreenSmooth(WizardScreen* screen, bool use_smoothing); |
| |
| // Changes status area visibility. |
| void SetStatusAreaVisible(bool visible); |
| |
| // Logs in the specified user via default login screen. |
| void Login(const std::string& username, const std::string& password); |
| |
| // Launched kiosk app configured for auto-launch. |
| void AutoLaunchKioskApp(); |
| |
| // Checks whether the user is allowed to exit enrollment. |
| bool CanExitEnrollment() const; |
| |
| // Called when LocalState is initialized. |
| void OnLocalStateInitialized(bool /* succeeded */); |
| |
| // Returns local state. |
| PrefService* GetLocalState(); |
| |
| static void set_local_state_for_testing(PrefService* local_state) { |
| local_state_for_testing_ = local_state; |
| } |
| |
| // Whether to skip any screens that may normally be shown after login |
| // (registration, Terms of Service, user image selection). |
| static bool skip_post_login_screens_; |
| |
| static bool zero_delay_enabled_; |
| |
| // Screens. |
| scoped_ptr<NetworkScreen> network_screen_; |
| scoped_ptr<UpdateScreen> update_screen_; |
| scoped_ptr<UserImageScreen> user_image_screen_; |
| scoped_ptr<EulaScreen> eula_screen_; |
| scoped_ptr<ResetScreen> reset_screen_; |
| scoped_ptr<KioskAutolaunchScreen> autolaunch_screen_; |
| scoped_ptr<KioskEnableScreen> kiosk_enable_screen_; |
| scoped_ptr<EnrollmentScreen> enrollment_screen_; |
| scoped_ptr<ErrorScreen> error_screen_; |
| scoped_ptr<TermsOfServiceScreen> terms_of_service_screen_; |
| scoped_ptr<WrongHWIDScreen> wrong_hwid_screen_; |
| scoped_ptr<LocallyManagedUserCreationScreen> |
| locally_managed_user_creation_screen_; |
| |
| // Screen that's currently active. |
| WizardScreen* current_screen_; |
| |
| // Screen that was active before, or NULL for login screen. |
| WizardScreen* previous_screen_; |
| |
| std::string username_; |
| std::string password_; |
| |
| // True if running official BUILD. |
| bool is_official_build_; |
| |
| // True if full OOBE flow should be shown. |
| bool is_out_of_box_; |
| |
| // Value of the screen name that WizardController was started with. |
| std::string first_screen_name_; |
| |
| // OOBE/login display host. |
| LoginDisplayHost* host_; |
| |
| // Default WizardController. |
| static WizardController* default_controller_; |
| |
| // Parameters for the first screen. May be NULL. |
| scoped_ptr<base::DictionaryValue> screen_parameters_; |
| |
| base::OneShotTimer<WizardController> smooth_show_timer_; |
| |
| OobeDisplay* oobe_display_; |
| |
| // State of Usage stat/error reporting checkbox on EULA screen |
| // during wizard lifetime. |
| bool usage_statistics_reporting_; |
| |
| // If true then update check is cancelled and enrollment is started after |
| // EULA is accepted. |
| bool skip_update_enroll_after_eula_; |
| |
| // Time when the EULA was accepted. Used to measure the duration from the EULA |
| // acceptance until the Sign-In screen is displayed. |
| base::Time time_eula_accepted_; |
| |
| ObserverList<Observer> observer_list_; |
| |
| bool login_screen_started_; |
| |
| // Indicates that once image selection screen finishes we should return to |
| // a previous screen instead of proceeding with usual flow. |
| bool user_image_screen_return_to_previous_hack_; |
| |
| // Non-owning pointer to local state used for testing. |
| static PrefService* local_state_for_testing_; |
| |
| FRIEND_TEST_ALL_PREFIXES(EnrollmentScreenTest, TestCancel); |
| FRIEND_TEST_ALL_PREFIXES(WizardControllerFlowTest, Accelerators); |
| friend class WizardControllerFlowTest; |
| friend class WizardInProcessBrowserTest; |
| friend class WizardControllerBrokenLocalStateTest; |
| |
| base::WeakPtrFactory<WizardController> weak_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WizardController); |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_CONTROLLER_H_ |