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