oobe_ui.h revision 58537e28ecd584eab876aee8be7156509866d23a
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/observer_list.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/oobe_display.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui_controller.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue;
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}  // namespace base
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class AppLaunchSplashScreenActor;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BaseScreenHandler;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CoreOobeHandler;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ErrorScreenHandler;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class KioskAppMenuHandler;
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class KioskEnableScreenActor;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NativeWindowDelegate;
312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochclass NetworkDropdownHandler;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkStateInformer;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SigninScreenHandler;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SigninScreenHandlerDelegate;
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class UpdateScreenHandler;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A custom WebUI that defines datasource for out-of-box-experience (OOBE) UI:
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - welcome screen (setup language/keyboard/network).
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - eula screen (CrOS (+ OEM) EULA content/TPM password/crash reporting).
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - update screen.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OobeUI : public OobeDisplay,
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)               public content::WebUIController,
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)               public CoreOobeHandler::Delegate {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  class Observer {
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   public:
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual ~Observer() {}
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void OnCurrentScreenChanged(
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        Screen current_screen, Screen new_screen) = 0;
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  };
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // JS oobe/login screens names.
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenOobeNetwork[];
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenOobeEula[];
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenOobeUpdate[];
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenOobeEnrollment[];
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenGaiaSignin[];
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenAccountPicker[];
59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  static const char kScreenKioskAutolaunch[];
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  static const char kScreenKioskEnable[];
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenErrorMessage[];
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenUserImagePicker[];
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenTpmError[];
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenPasswordChanged[];
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenManagedUserCreationFlow[];
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenTermsOfService[];
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kScreenWrongHWID[];
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  static const char kScreenAppLaunchSplash[];
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  OobeUI(content::WebUI* web_ui, const GURL& url);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~OobeUI();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OobeDisplay implementation:
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowScreen(WizardScreen* screen) OVERRIDE;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HideScreen(WizardScreen* screen) OVERRIDE;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual UpdateScreenActor* GetUpdateScreenActor() OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NetworkScreenActor* GetNetworkScreenActor() OVERRIDE;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual EulaScreenActor* GetEulaScreenActor() OVERRIDE;
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual EnrollmentScreenActor* GetEnrollmentScreenActor() OVERRIDE;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ResetScreenActor* GetResetScreenActor() OVERRIDE;
81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual KioskAutolaunchScreenActor* GetKioskAutolaunchScreenActor() OVERRIDE;
827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual KioskEnableScreenActor* GetKioskEnableScreenActor() OVERRIDE;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual TermsOfServiceScreenActor*
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetTermsOfServiceScreenActor() OVERRIDE;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual UserImageScreenActor* GetUserImageScreenActor() OVERRIDE;
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ErrorScreenActor* GetErrorScreenActor() OVERRIDE;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual WrongHWIDScreenActor* GetWrongHWIDScreenActor() OVERRIDE;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual LocallyManagedUserCreationScreenHandler*
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetLocallyManagedUserCreationScreenActor() OVERRIDE;
903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual AppLaunchSplashScreenActor*
913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetAppLaunchSplashScreenActor() OVERRIDE;
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool IsJSReady(const base::Closure& display_is_ready_callback)
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OVERRIDE;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Collects localized strings from the owned handlers.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetLocalizedStrings(base::DictionaryValue* localized_strings);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes the handlers.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitializeHandlers();
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows or hides OOBE UI elements.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowOobeUI(bool show);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(rkc): Create a separate retail mode login UI and move this method
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // there - see crbug.com/157671.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows a login spinner for retail mode logins.
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowRetailModeLoginSpinner();
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the signin screen.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowSigninScreen(SigninScreenHandlerDelegate* delegate,
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        NativeWindowDelegate* native_window_delegate);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Shows the kiosk splash screen.
1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void ShowAppLaunchSplashScreen();
1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resets the delegate set in ShowSigninScreen.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ResetSigninScreenHandlerDelegate();
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Add and remove observers for screen change events.
12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void AddObserver(Observer* observer);
12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void RemoveObserver(Observer* observer);
12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Screen current_screen() const { return current_screen_; }
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& GetScreenName(Screen screen) const;
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Initializes |screen_ids_| and |screen_names_| structures.
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InitializeScreenMaps();
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddScreenHandler(BaseScreenHandler* handler);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // CoreOobeHandler::Delegate implementation:
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnCurrentScreenChanged(const std::string& screen) OVERRIDE;
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Type of UI.
1373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::string display_type_;
1383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reference to NetworkStateInformer that handles changes in network
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // state.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<NetworkStateInformer> network_state_informer_;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reference to CoreOobeHandler that handles common requests of Oobe page.
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CoreOobeHandler* core_handler_;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // Reference to NetworkDropdownHandler that handles interaction with
1472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // network dropdown.
1482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  NetworkDropdownHandler* network_dropdown_handler_;
1492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Screens actors. Note, OobeUI owns them via |handlers_|, not directly here.
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  UpdateScreenHandler* update_screen_handler_;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkScreenActor* network_screen_actor_;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EulaScreenActor* eula_screen_actor_;
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EnrollmentScreenActor* enrollment_screen_actor_;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResetScreenActor* reset_screen_actor_;
156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  KioskAutolaunchScreenActor* autolaunch_screen_actor_;
1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  KioskEnableScreenActor* kiosk_enable_screen_actor_;
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WrongHWIDScreenActor* wrong_hwid_screen_actor_;
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LocallyManagedUserCreationScreenHandler*
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      locally_managed_user_creation_screen_actor_;
1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  AppLaunchSplashScreenActor* app_launch_splash_screen_actor_;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reference to ErrorScreenHandler that handles error screen
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // requests and forward calls from native code to JS side.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ErrorScreenHandler* error_screen_handler_;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reference to SigninScreenHandler that handles sign-in screen requests and
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // forward calls from native code to JS side.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SigninScreenHandler* signin_screen_handler_;
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TermsOfServiceScreenActor* terms_of_service_screen_actor_;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UserImageScreenActor* user_image_screen_actor_;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<BaseScreenHandler*> handlers_;  // Non-owning pointers.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  KioskAppMenuHandler* kiosk_app_menu_handler_;  // Non-owning pointers.
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Id of the current oobe/login screen.
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Screen current_screen_;
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Maps JS screen names to screen ids.
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::map<std::string, Screen> screen_ids_;
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Maps screen ids to JS screen names.
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<std::string> screen_names_;
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Flag that indicates whether JS part is fully loaded and ready to accept
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // calls.
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool ready_;
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Callbacks to notify when JS part is fully loaded and ready to accept calls.
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::Closure> ready_callbacks_;
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // List of registered observers.
19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ObserverList<Observer> observer_list_;
19658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(OobeUI);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
203