Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / lock / webui_screen_locker.h
1 // Copyright 2014 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_LOCK_WEBUI_SCREEN_LOCKER_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_LOCK_WEBUI_SCREEN_LOCKER_H_
7
8 #include <string>
9
10 #include "ash/shell_delegate.h"
11 #include "ash/wm/lock_state_observer.h"
12 #include "base/compiler_specific.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "base/time/time.h"
16 #include "chrome/browser/chromeos/login/lock/screen_locker_delegate.h"
17 #include "chrome/browser/chromeos/login/signin_specifics.h"
18 #include "chrome/browser/chromeos/login/ui/lock_window.h"
19 #include "chrome/browser/chromeos/login/ui/login_display.h"
20 #include "chrome/browser/chromeos/login/ui/webui_login_view.h"
21 #include "chromeos/dbus/power_manager_client.h"
22 #include "content/public/browser/notification_observer.h"
23 #include "content/public/browser/notification_registrar.h"
24 #include "ui/keyboard/keyboard_controller_observer.h"
25 #include "ui/views/widget/widget.h"
26 #include "ui/views/widget/widget_observer.h"
27
28 namespace content {
29 class WebUI;
30 }
31
32 namespace chromeos {
33
34 class OobeUI;
35 class ScreenLocker;
36 class WebUILoginDisplay;
37
38 namespace login {
39 class NetworkStateHelper;
40 }
41
42 namespace test {
43 class WebUIScreenLockerTester;
44 }
45
46 // This version of ScreenLockerDelegate displays a WebUI lock screen based on
47 // the Oobe account picker screen.
48 class WebUIScreenLocker : public WebUILoginView,
49                           public LoginDisplay::Delegate,
50                           public ScreenLockerDelegate,
51                           public LockWindow::Observer,
52 #if !defined(USE_ATHENA)
53                           public ash::LockStateObserver,
54 #endif
55                           public views::WidgetObserver,
56                           public PowerManagerClient::Observer,
57 #if !defined(USE_ATHENA)
58                           public ash::VirtualKeyboardStateObserver,
59 #endif
60                           public keyboard::KeyboardControllerObserver {
61  public:
62   explicit WebUIScreenLocker(ScreenLocker* screen_locker);
63
64   // ScreenLockerDelegate implementation.
65   virtual void LockScreen() override;
66   virtual void ScreenLockReady() override;
67   virtual void OnAuthenticate() override;
68   virtual void SetInputEnabled(bool enabled) override;
69   virtual void ShowErrorMessage(
70       int error_msg_id,
71       HelpAppLauncher::HelpTopic help_topic_id) override;
72   virtual void ClearErrors() override;
73   virtual void AnimateAuthenticationSuccess() override;
74   virtual gfx::NativeWindow GetNativeWindow() const override;
75   virtual content::WebUI* GetAssociatedWebUI() override;
76   virtual void OnLockWebUIReady() override;
77   virtual void OnLockBackgroundDisplayed() override;
78
79   // LoginDisplay::Delegate: implementation
80   virtual void CancelPasswordChangedFlow() override;
81   virtual void CreateAccount() override;
82   virtual void CompleteLogin(const UserContext& user_context) override;
83   virtual base::string16 GetConnectedNetworkName() override;
84   virtual bool IsSigninInProgress() const override;
85   virtual void Login(const UserContext& user_context,
86                      const SigninSpecifics& specifics) override;
87   virtual void MigrateUserData(const std::string& old_password) override;
88   virtual void OnSigninScreenReady() override;
89   virtual void OnStartEnterpriseEnrollment() override;
90   virtual void OnStartKioskEnableScreen() override;
91   virtual void OnStartKioskAutolaunchScreen() override;
92   virtual void ShowWrongHWIDScreen() override;
93   virtual void ResetPublicSessionAutoLoginTimer() override;
94   virtual void ResyncUserData() override;
95   virtual void SetDisplayEmail(const std::string& email) override;
96   virtual void Signout() override;
97
98   // content::NotificationObserver (via WebUILoginView) implementation.
99   virtual void Observe(int type,
100                        const content::NotificationSource& source,
101                        const content::NotificationDetails& details) override;
102
103   // LockWindow::Observer implementation.
104   virtual void OnLockWindowReady() override;
105
106 #if !defined(USE_ATHENA)
107   // LockStateObserver override.
108   virtual void OnLockStateEvent(
109       ash::LockStateObserver::EventType event) override;
110 #endif
111
112   // WidgetObserver override.
113   virtual void OnWidgetDestroying(views::Widget* widget) override;
114
115   // PowerManagerClient::Observer overrides:
116   virtual void SuspendDone(const base::TimeDelta& sleep_duration) override;
117   virtual void LidEventReceived(bool open,
118                                 const base::TimeTicks& time) override;
119
120   // Overridden from content::WebContentsObserver:
121   virtual void RenderProcessGone(base::TerminationStatus status) override;
122
123 #if !defined(USE_ATHENA)
124   // Overridden from ash::KeyboardStateObserver:
125   virtual void OnVirtualKeyboardStateChanged(bool activated) override;
126 #endif
127
128   // Overridden from keyboard::KeyboardControllerObserver:
129   virtual void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override;
130
131   // Returns instance of the OOBE WebUI.
132   OobeUI* GetOobeUI();
133
134  private:
135   friend class test::WebUIScreenLockerTester;
136
137   virtual ~WebUIScreenLocker();
138
139   // Ensures that user pod is focused.
140   void FocusUserPod();
141
142   // The screen locker window.
143   views::Widget* lock_window_;
144
145   // Login UI implementation instance.
146   scoped_ptr<WebUILoginDisplay> login_display_;
147
148   // Used for user image changed notifications.
149   content::NotificationRegistrar registrar_;
150
151   // Tracks when the lock window is displayed and ready.
152   bool lock_ready_;
153
154   // Tracks when the WebUI finishes loading.
155   bool webui_ready_;
156
157   // Time when lock was initiated, required for metrics.
158   base::TimeTicks lock_time_;
159
160   scoped_ptr<login::NetworkStateHelper> network_state_helper_;
161
162   // True is subscribed as keyboard controller observer.
163   bool is_observing_keyboard_;
164
165   // The bounds of the virtual keyboard.
166   gfx::Rect keyboard_bounds_;
167
168   base::WeakPtrFactory<WebUIScreenLocker> weak_factory_;
169
170   DISALLOW_COPY_AND_ASSIGN(WebUIScreenLocker);
171 };
172
173 }  // namespace chromeos
174
175 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_LOCK_WEBUI_SCREEN_LOCKER_H_