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