172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREEN_LOCK_VIEW_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREEN_LOCK_VIEW_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/chromeos/login/helper.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/user_view.h"
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_observer.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_registrar.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/controls/textfield/textfield_controller.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/view.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace views {
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ImageView;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace views
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos {
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ScreenLocker;
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass UserView;
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace test {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ScreenLockerTester;
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace test
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ScreenLockView creates view components necessary to authenticate
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// a user to unlock the screen.
3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass ScreenLockView : public ThrobberHostView,
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                       public views::TextfieldController,
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       public NotificationObserver,
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       public UserView::Delegate {
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  explicit ScreenLockView(ScreenLocker* screen_locker);
3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual ~ScreenLockView();
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Init();
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Clears and sets the focus to the password field.
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ClearAndSetFocusToPassword();
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Enable/Disable signout button.
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetSignoutEnabled(bool enabled);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the bounds of the password field in ScreenLocker's coordinate.
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gfx::Rect GetPasswordBoundsRelativeTo(const views::View* view);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // views::View:
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetEnabled(bool enabled);
52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void Layout();
53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual gfx::Size GetPreferredSize();
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // NotificationObserver:
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Observe(NotificationType type,
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationSource& source,
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationDetails& details);
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // views::TextfieldController:
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ContentsChanged(views::Textfield* sender,
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               const string16& new_contents);
633f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual bool HandleKeyEvent(views::Textfield* sender,
643f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen                              const views::KeyEvent& keystroke);
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // UserView::Delegate:
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnSignout();
6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool IsUserSelected() const { return true; }
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class test::ScreenLockerTester;
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  UserView* user_view_;
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // For editing the password.
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::Textfield* password_field_;
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // ScreenLocker is owned by itself.
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ScreenLocker* screen_locker_;
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NotificationRegistrar registrar_;
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
83731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // User's picture, signout button and password field.
84731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  views::View* main_;
85731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Username that overlays on top of user's picture.
87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  views::View* username_;
88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(ScreenLockView);
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace chromeos
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_SCREEN_LOCK_VIEW_H_
95