1// Copyright (c) 2011 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_SCREEN_LOCK_VIEW_H_ 6#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREEN_LOCK_VIEW_H_ 7#pragma once 8 9#include "chrome/browser/chromeos/login/helper.h" 10#include "chrome/browser/chromeos/login/user_view.h" 11#include "content/common/notification_observer.h" 12#include "content/common/notification_registrar.h" 13#include "views/controls/textfield/textfield_controller.h" 14#include "views/view.h" 15 16namespace views { 17class ImageView; 18} // namespace views 19 20namespace chromeos { 21 22class ScreenLocker; 23class UserView; 24 25namespace test { 26class ScreenLockerTester; 27} // namespace test 28 29// ScreenLockView creates view components necessary to authenticate 30// a user to unlock the screen. 31class ScreenLockView : public ThrobberHostView, 32 public views::TextfieldController, 33 public NotificationObserver, 34 public UserView::Delegate { 35 public: 36 explicit ScreenLockView(ScreenLocker* screen_locker); 37 virtual ~ScreenLockView(); 38 39 void Init(); 40 41 // Clears and sets the focus to the password field. 42 void ClearAndSetFocusToPassword(); 43 44 // Enable/Disable signout button. 45 void SetSignoutEnabled(bool enabled); 46 47 // Returns the bounds of the password field in ScreenLocker's coordinate. 48 gfx::Rect GetPasswordBoundsRelativeTo(const views::View* view); 49 50 // views::View: 51 virtual void SetEnabled(bool enabled); 52 virtual void Layout(); 53 virtual gfx::Size GetPreferredSize(); 54 55 // NotificationObserver: 56 virtual void Observe(NotificationType type, 57 const NotificationSource& source, 58 const NotificationDetails& details); 59 60 // views::TextfieldController: 61 virtual void ContentsChanged(views::Textfield* sender, 62 const string16& new_contents); 63 virtual bool HandleKeyEvent(views::Textfield* sender, 64 const views::KeyEvent& keystroke); 65 66 // UserView::Delegate: 67 virtual void OnSignout(); 68 virtual bool IsUserSelected() const { return true; } 69 70 private: 71 friend class test::ScreenLockerTester; 72 73 UserView* user_view_; 74 75 // For editing the password. 76 views::Textfield* password_field_; 77 78 // ScreenLocker is owned by itself. 79 ScreenLocker* screen_locker_; 80 81 NotificationRegistrar registrar_; 82 83 // User's picture, signout button and password field. 84 views::View* main_; 85 86 // Username that overlays on top of user's picture. 87 views::View* username_; 88 89 DISALLOW_COPY_AND_ASSIGN(ScreenLockView); 90}; 91 92} // namespace chromeos 93 94#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREEN_LOCK_VIEW_H_ 95