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_SCREENS_USER_SELECTION_SCREEN_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_USER_SELECTION_SCREEN_H_ 7 8 #include <map> 9 #include <string> 10 11 #include "base/bind.h" 12 #include "base/compiler_specific.h" 13 #include "base/timer/timer.h" 14 #include "base/values.h" 15 #include "chrome/browser/chromeos/login/users/user.h" 16 #include "chrome/browser/signin/screenlock_bridge.h" 17 #include "ui/wm/core/user_activity_observer.h" 18 19 namespace chromeos { 20 21 class LoginDisplayWebUIHandler; 22 23 // This class represents User Selection screen: user pod-based login screen. 24 class UserSelectionScreen : public wm::UserActivityObserver { 25 public: 26 UserSelectionScreen(); 27 virtual ~UserSelectionScreen(); 28 29 static const UserList PrepareUserListForSending( 30 const UserList& users, 31 std::string owner, 32 bool is_signin_to_add); 33 34 void SetHandler(LoginDisplayWebUIHandler* handler); 35 36 void Init(const UserList& users, bool show_guest); 37 const UserList& GetUsers() const; 38 void OnUserImageChanged(const User& user); 39 void OnBeforeUserRemoved(const std::string& username); 40 void OnUserRemoved(const std::string& username); 41 42 void OnPasswordClearTimerExpired(); 43 void SendUserList(bool animated); 44 void HandleGetUsers(); 45 void SetAuthType(const std::string& username, 46 ScreenlockBridge::LockHandler::AuthType auth_type); 47 ScreenlockBridge::LockHandler::AuthType GetAuthType( 48 const std::string& username) const; 49 50 // wm::UserActivityDetector implementation: 51 virtual void OnUserActivity(const ui::Event* event) OVERRIDE; 52 53 // Fills |user_dict| with information about |user|. 54 static void FillUserDictionary( 55 User* user, 56 bool is_owner, 57 bool is_signin_to_add, 58 ScreenlockBridge::LockHandler::AuthType auth_type, 59 base::DictionaryValue* user_dict); 60 61 // Determines if user auth status requires online sign in. 62 static bool ShouldForceOnlineSignIn(const User* user); 63 64 private: 65 LoginDisplayWebUIHandler* handler_; 66 67 // Set of Users that are visible. 68 UserList users_; 69 70 // Whether to show guest login. 71 bool show_guest_; 72 73 // Map of usernames to their current authentication type. If a user is not 74 // contained in the map, it is using the default authentication type. 75 std::map<std::string, ScreenlockBridge::LockHandler::AuthType> 76 user_auth_type_map_; 77 78 // Timer for measuring idle state duration before password clear. 79 base::OneShotTimer<UserSelectionScreen> password_clear_timer_; 80 81 DISALLOW_COPY_AND_ASSIGN(UserSelectionScreen); 82 }; 83 84 } // namespace chromeos 85 86 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_USER_SELECTION_SCREEN_H_ 87