error_screen.h revision effb81e5f8246d0db0270817048dc992db66e9fb
1// Copyright (c) 2012 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_CHROMEOS_LOGIN_SCREENS_ERROR_SCREEN_H_ 6#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_ERROR_SCREEN_H_ 7 8#include "base/basictypes.h" 9#include "base/compiler_specific.h" 10#include "base/memory/scoped_ptr.h" 11#include "base/memory/weak_ptr.h" 12#include "base/observer_list.h" 13#include "chrome/browser/chromeos/login/login_performer.h" 14#include "chrome/browser/chromeos/login/oobe_display.h" 15#include "chrome/browser/chromeos/login/screens/error_screen_actor_delegate.h" 16#include "chrome/browser/chromeos/login/screens/wizard_screen.h" 17#include "chrome/browser/chromeos/settings/device_settings_service.h" 18 19namespace chromeos { 20 21class ScreenObserver; 22 23// Controller for the error screen. 24class ErrorScreen : public WizardScreen, 25 public ErrorScreenActorDelegate, 26 public LoginPerformer::Delegate { 27 public: 28 class Observer { 29 public: 30 virtual ~Observer() {} 31 virtual void OnErrorScreenShow() = 0; 32 virtual void OnErrorScreenHide() = 0; 33 }; 34 35 enum UIState { 36 UI_STATE_UNKNOWN = 0, 37 UI_STATE_UPDATE, 38 UI_STATE_SIGNIN, 39 UI_STATE_LOCALLY_MANAGED, 40 UI_STATE_KIOSK_MODE, 41 UI_STATE_LOCAL_STATE_ERROR, 42 UI_STATE_AUTO_ENROLLMENT_ERROR, 43 }; 44 45 enum ErrorState { 46 ERROR_STATE_UNKNOWN = 0, 47 ERROR_STATE_PORTAL, 48 ERROR_STATE_OFFLINE, 49 ERROR_STATE_PROXY, 50 ERROR_STATE_AUTH_EXT_TIMEOUT, 51 ERROR_STATE_KIOSK_ONLINE 52 }; 53 54 ErrorScreen(ScreenObserver* screen_observer, ErrorScreenActor* actor); 55 virtual ~ErrorScreen(); 56 57 void AddObserver(Observer* observer); 58 void RemoveObserver(Observer* observer); 59 60 // WizardScreen implementation. 61 virtual void PrepareToShow() OVERRIDE; 62 virtual void Show() OVERRIDE; 63 virtual void Hide() OVERRIDE; 64 virtual std::string GetName() const OVERRIDE; 65 66 // ErrorScreenActorDelegate implementation: 67 virtual void OnErrorShow() OVERRIDE; 68 virtual void OnErrorHide() OVERRIDE; 69 virtual void OnLaunchOobeGuestSession() OVERRIDE; 70 71 // LoginPerformer::Delegate implementation: 72 virtual void OnLoginFailure(const LoginFailure& error) OVERRIDE; 73 virtual void OnLoginSuccess(const UserContext& user_context) OVERRIDE; 74 virtual void OnOffTheRecordLoginSuccess() OVERRIDE; 75 virtual void OnPasswordChangeDetected() OVERRIDE; 76 virtual void WhiteListCheckFailed(const std::string& email) OVERRIDE; 77 virtual void PolicyLoadFailed() OVERRIDE; 78 virtual void OnOnlineChecked(const std::string& username, 79 bool success) OVERRIDE; 80 81 // Initializes captive portal dialog and shows that if needed. 82 void FixCaptivePortal(); 83 84 // Shows captive portal dialog. 85 void ShowCaptivePortal(); 86 87 // Hides captive portal dialog. 88 void HideCaptivePortal(); 89 90 // Sets current UI state. 91 void SetUIState(UIState ui_state); 92 93 UIState GetUIState() const; 94 95 // Sets current error screen content according to current UI state, 96 // |error_state|, and |network|. 97 void SetErrorState(ErrorState error_state, const std::string& network); 98 99 // Toggles the guest sign-in prompt. 100 void AllowGuestSignin(bool allow); 101 102 // Toggles the connection pending indicator. 103 void ShowConnectingIndicator(bool show); 104 105 void set_parent_screen(OobeDisplay::Screen parent_screen) { 106 parent_screen_ = parent_screen; 107 } 108 OobeDisplay::Screen parent_screen() const { return parent_screen_; } 109 110 private: 111 // Handles the response of an ownership check and starts the guest session if 112 // applicable. 113 void StartGuestSessionAfterOwnershipCheck( 114 DeviceSettingsService::OwnershipStatus ownership_status); 115 116 ErrorScreenActor* actor_; 117 118 OobeDisplay::Screen parent_screen_; 119 120 base::WeakPtrFactory<ErrorScreen> weak_factory_; 121 122 ObserverList<Observer> observers_; 123 124 scoped_ptr<LoginPerformer> guest_login_performer_; 125 126 DISALLOW_COPY_AND_ASSIGN(ErrorScreen); 127}; 128 129} // namespace chromeos 130 131#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_ERROR_SCREEN_H_ 132