Home | History | Annotate | Download | only in screens
      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 #include <vector>
     11 
     12 #include "base/compiler_specific.h"
     13 #include "base/timer/timer.h"
     14 #include "base/values.h"
     15 #include "chrome/browser/signin/screenlock_bridge.h"
     16 #include "components/user_manager/user.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 user_manager::UserList PrepareUserListForSending(
     30       const user_manager::UserList& users,
     31       std::string owner,
     32       bool is_signin_to_add);
     33 
     34   void SetHandler(LoginDisplayWebUIHandler* handler);
     35 
     36   virtual void Init(const user_manager::UserList& users, bool show_guest);
     37   const user_manager::UserList& GetUsers() const;
     38   void OnUserImageChanged(const user_manager::User& user);
     39   void OnBeforeUserRemoved(const std::string& username);
     40   void OnUserRemoved(const std::string& username);
     41 
     42   void OnPasswordClearTimerExpired();
     43   virtual void SendUserList();
     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_manager::User* user,
     56       bool is_owner,
     57       bool is_signin_to_add,
     58       ScreenlockBridge::LockHandler::AuthType auth_type,
     59       const std::vector<std::string>* public_session_recommended_locales,
     60       base::DictionaryValue* user_dict);
     61 
     62   // Determines if user auth status requires online sign in.
     63   static bool ShouldForceOnlineSignIn(const user_manager::User* user);
     64 
     65  protected:
     66   LoginDisplayWebUIHandler* handler_;
     67 
     68   // Map from public session user IDs to recommended locales set by policy.
     69   typedef std::map<std::string, std::vector<std::string> >
     70       PublicSessionRecommendedLocaleMap;
     71   PublicSessionRecommendedLocaleMap public_session_recommended_locales_;
     72 
     73  private:
     74   // Whether to show guest login.
     75   bool show_guest_;
     76 
     77   // Set of Users that are visible.
     78   user_manager::UserList users_;
     79 
     80   // Map of usernames to their current authentication type. If a user is not
     81   // contained in the map, it is using the default authentication type.
     82   std::map<std::string, ScreenlockBridge::LockHandler::AuthType>
     83       user_auth_type_map_;
     84 
     85   // Timer for measuring idle state duration before password clear.
     86   base::OneShotTimer<UserSelectionScreen> password_clear_timer_;
     87 
     88   DISALLOW_COPY_AND_ASSIGN(UserSelectionScreen);
     89 };
     90 
     91 }  // namespace chromeos
     92 
     93 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_USER_SELECTION_SCREEN_H_
     94