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