Home | History | Annotate | Download | only in login
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
      6 #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
      7 
      8 #include <map>
      9 #include <string>
     10 #include <vector>
     11 
     12 #include "base/compiler_specific.h"
     13 #include "base/memory/ref_counted.h"
     14 #include "chrome/browser/chromeos/login/oobe_display.h"
     15 #include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h"
     16 #include "content/public/browser/web_ui_controller.h"
     17 
     18 namespace base {
     19 class DictionaryValue;
     20 }
     21 
     22 namespace chromeos {
     23 class BaseScreenHandler;
     24 class CoreOobeHandler;
     25 class ErrorScreenHandler;
     26 class KioskAppMenuHandler;
     27 class KioskEnableScreenActor;
     28 class NativeWindowDelegate;
     29 class NetworkDropdownHandler;
     30 class NetworkStateInformer;
     31 class SigninScreenHandler;
     32 class SigninScreenHandlerDelegate;
     33 class UpdateScreenHandler;
     34 
     35 // A custom WebUI that defines datasource for out-of-box-experience (OOBE) UI:
     36 // - welcome screen (setup language/keyboard/network).
     37 // - eula screen (CrOS (+ OEM) EULA content/TPM password/crash reporting).
     38 // - update screen.
     39 class OobeUI : public OobeDisplay,
     40                public content::WebUIController,
     41                public CoreOobeHandler::Delegate {
     42  public:
     43   // JS oobe/login screens names.
     44   static const char kScreenOobeNetwork[];
     45   static const char kScreenOobeEula[];
     46   static const char kScreenOobeUpdate[];
     47   static const char kScreenOobeEnrollment[];
     48   static const char kScreenGaiaSignin[];
     49   static const char kScreenAccountPicker[];
     50   static const char kScreenKioskAutolaunch[];
     51   static const char kScreenKioskEnable[];
     52   static const char kScreenErrorMessage[];
     53   static const char kScreenUserImagePicker[];
     54   static const char kScreenTpmError[];
     55   static const char kScreenPasswordChanged[];
     56   static const char kScreenManagedUserCreationFlow[];
     57   static const char kScreenTermsOfService[];
     58   static const char kScreenWrongHWID[];
     59 
     60   explicit OobeUI(content::WebUI* web_ui);
     61   virtual ~OobeUI();
     62 
     63   // OobeDisplay implementation:
     64   virtual void ShowScreen(WizardScreen* screen) OVERRIDE;
     65   virtual void HideScreen(WizardScreen* screen) OVERRIDE;
     66   virtual UpdateScreenActor* GetUpdateScreenActor() OVERRIDE;
     67   virtual NetworkScreenActor* GetNetworkScreenActor() OVERRIDE;
     68   virtual EulaScreenActor* GetEulaScreenActor() OVERRIDE;
     69   virtual EnrollmentScreenActor* GetEnrollmentScreenActor() OVERRIDE;
     70   virtual ResetScreenActor* GetResetScreenActor() OVERRIDE;
     71   virtual KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() OVERRIDE;
     72   virtual KioskEnableScreenActor* GetKioskEnableScreenActor() OVERRIDE;
     73   virtual TermsOfServiceScreenActor*
     74       GetTermsOfServiceScreenActor() OVERRIDE;
     75   virtual UserImageScreenActor* GetUserImageScreenActor() OVERRIDE;
     76   virtual ErrorScreenActor* GetErrorScreenActor() OVERRIDE;
     77   virtual WrongHWIDScreenActor* GetWrongHWIDScreenActor() OVERRIDE;
     78   virtual LocallyManagedUserCreationScreenHandler*
     79       GetLocallyManagedUserCreationScreenActor() OVERRIDE;
     80   virtual bool IsJSReady(const base::Closure& display_is_ready_callback)
     81       OVERRIDE;
     82 
     83   // Collects localized strings from the owned handlers.
     84   void GetLocalizedStrings(base::DictionaryValue* localized_strings);
     85 
     86   // Initializes the handlers.
     87   void InitializeHandlers();
     88 
     89   // Shows or hides OOBE UI elements.
     90   void ShowOobeUI(bool show);
     91 
     92   // TODO(rkc): Create a separate retail mode login UI and move this method
     93   // there - see crbug.com/157671.
     94   // Shows a login spinner for retail mode logins.
     95   void ShowRetailModeLoginSpinner();
     96 
     97   // Shows the signin screen.
     98   void ShowSigninScreen(SigninScreenHandlerDelegate* delegate,
     99                         NativeWindowDelegate* native_window_delegate);
    100 
    101   // Resets the delegate set in ShowSigninScreen.
    102   void ResetSigninScreenHandlerDelegate();
    103 
    104   Screen current_screen() const { return current_screen_; }
    105 
    106   const std::string& GetScreenName(Screen screen) const;
    107 
    108  private:
    109   // Initializes |screen_ids_| and |screen_names_| structures.
    110   void InitializeScreenMaps();
    111 
    112   void AddScreenHandler(BaseScreenHandler* handler);
    113 
    114   // CoreOobeHandler::Delegate implementation:
    115   virtual void OnCurrentScreenChanged(const std::string& screen) OVERRIDE;
    116 
    117   // Reference to NetworkStateInformer that handles changes in network
    118   // state.
    119   scoped_refptr<NetworkStateInformer> network_state_informer_;
    120 
    121   // Reference to CoreOobeHandler that handles common requests of Oobe page.
    122   CoreOobeHandler* core_handler_;
    123 
    124   // Reference to NetworkDropdownHandler that handles interaction with
    125   // network dropdown.
    126   NetworkDropdownHandler* network_dropdown_handler_;
    127 
    128   // Screens actors. Note, OobeUI owns them via |handlers_|, not directly here.
    129   UpdateScreenHandler* update_screen_handler_;
    130   NetworkScreenActor* network_screen_actor_;
    131   EulaScreenActor* eula_screen_actor_;
    132   EnrollmentScreenActor* enrollment_screen_actor_;
    133   ResetScreenActor* reset_screen_actor_;
    134   KioskAutolaunchScreenActor* autolaunch_screen_actor_;
    135   KioskEnableScreenActor* kiosk_enable_screen_actor_;
    136   WrongHWIDScreenActor* wrong_hwid_screen_actor_;
    137   LocallyManagedUserCreationScreenHandler*
    138       locally_managed_user_creation_screen_actor_;
    139 
    140   // Reference to ErrorScreenHandler that handles error screen
    141   // requests and forward calls from native code to JS side.
    142   ErrorScreenHandler* error_screen_handler_;
    143 
    144   // Reference to SigninScreenHandler that handles sign-in screen requests and
    145   // forward calls from native code to JS side.
    146   SigninScreenHandler* signin_screen_handler_;
    147 
    148   TermsOfServiceScreenActor* terms_of_service_screen_actor_;
    149   UserImageScreenActor* user_image_screen_actor_;
    150 
    151   std::vector<BaseScreenHandler*> handlers_;  // Non-owning pointers.
    152 
    153   KioskAppMenuHandler* kiosk_app_menu_handler_;  // Non-owning pointers.
    154 
    155   // Id of the current oobe/login screen.
    156   Screen current_screen_;
    157 
    158   // Maps JS screen names to screen ids.
    159   std::map<std::string, Screen> screen_ids_;
    160 
    161   // Maps screen ids to JS screen names.
    162   std::vector<std::string> screen_names_;
    163 
    164   // Flag that indicates whether JS part is fully loaded and ready to accept
    165   // calls.
    166   bool ready_;
    167 
    168   // Callbacks to notify when JS part is fully loaded and ready to accept calls.
    169   std::vector<base::Closure> ready_callbacks_;
    170 
    171   DISALLOW_COPY_AND_ASSIGN(OobeUI);
    172 };
    173 
    174 }  // namespace chromeos
    175 
    176 #endif  // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
    177