| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 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 ASH_SESSION_SESSION_CONTROLLER_H_ | |
| 6 #define ASH_SESSION_SESSION_CONTROLLER_H_ | |
| 7 | |
| 8 #include <stdint.h> | |
| 9 | |
| 10 #include <vector> | |
| 11 | |
| 12 #include "ash/ash_export.h" | |
| 13 #include "ash/public/cpp/session_types.h" | |
| 14 #include "ash/public/interfaces/session_controller.mojom.h" | |
| 15 #include "base/macros.h" | |
| 16 #include "base/observer_list.h" | |
| 17 #include "mojo/public/cpp/bindings/binding_set.h" | |
| 18 | |
| 19 class AccountId; | |
| 20 | |
| 21 namespace ash { | |
| 22 | |
| 23 class SessionStateObserver; | |
| 24 | |
| 25 // Implements mojom::SessionController to cache session related info such as | |
| 26 // session state, meta data about user sessions to support synchronous | |
| 27 // queries for ash. It is targeted as a replacement for SessionStateDelegate. | |
| 28 class ASH_EXPORT SessionController | |
| 29 : NON_EXPORTED_BASE(public mojom::SessionController) { | |
| 30 public: | |
| 31 SessionController(); | |
| 32 ~SessionController() override; | |
| 33 | |
| 34 // Binds the mojom::SessionControllerRequest to this object. | |
| 35 void BindRequest(mojom::SessionControllerRequest request); | |
| 36 | |
| 37 // Returns the maximum possible number of logged in users. | |
| 38 int GetMaximumNumberOfLoggedInUsers() const; | |
| 39 | |
| 40 // Returns the number of signed in users. If 0 is returned, there is either | |
| 41 // no session in progress or no active user. | |
| 42 int NumberOfLoggedInUsers() const; | |
| 43 | |
| 44 // Gets the policy of adding a user session to ash. | |
| 45 AddUserSessionPolicy GetAddUserPolicy() const; | |
| 46 | |
| 47 // Returns |true| if the session has been fully started for the active user. | |
| 48 // When a user becomes active, the profile and browser UI are not immediately | |
| 49 // available. Only once this method starts returning |true| is the browser | |
| 50 // startup complete and both profile and UI are fully available. | |
| 51 bool IsActiveUserSessionStarted() const; | |
| 52 | |
| 53 // Returns true if the screen can be locked. | |
| 54 bool CanLockScreen() const; | |
| 55 | |
| 56 // Returns true if the screen is currently locked. | |
| 57 bool IsScreenLocked() const; | |
| 58 | |
| 59 // Returns true if the screen should be locked automatically when the screen | |
| 60 // is turned off or the system is suspended. | |
| 61 bool ShouldLockScreenAutomatically() const; | |
| 62 | |
| 63 // Returns |true| if user session blocked by some overlying UI. It can be | |
| 64 // login screen, lock screen or screen for adding users into multi-profile | |
| 65 // session. | |
| 66 bool IsUserSessionBlocked() const; | |
| 67 | |
| 68 // Gets the ash session state. | |
| 69 session_manager::SessionState GetSessionState() const; | |
| 70 | |
| 71 // Gets the user sessions in LRU order with the active session being first. | |
| 72 const std::vector<mojom::UserSessionPtr>& GetUserSessions() const; | |
| 73 | |
| 74 // Locks the screen. The locking happens asynchronously. | |
| 75 void LockScreen(); | |
| 76 | |
| 77 // Switches to another active user with |account_id| (if that user has | |
| 78 // already signed in). | |
| 79 void SwitchActiveUser(const AccountId& account_id); | |
| 80 | |
| 81 // Switches the active user to the next or previous user, with the same | |
| 82 // ordering as user sessions are created. | |
| 83 void CycleActiveUser(CycleUserDirection direction); | |
| 84 | |
| 85 void AddSessionStateObserver(SessionStateObserver* observer); | |
| 86 void RemoveSessionStateObserver(SessionStateObserver* observer); | |
| 87 | |
| 88 // mojom::SessionController | |
| 89 void SetClient(mojom::SessionControllerClientPtr client) override; | |
| 90 void SetSessionInfo(mojom::SessionInfoPtr info) override; | |
| 91 void UpdateUserSession(mojom::UserSessionPtr user_session) override; | |
| 92 void SetUserSessionOrder( | |
| 93 const std::vector<uint32_t>& user_session_order) override; | |
| 94 | |
| 95 private: | |
| 96 void SetSessionState(session_manager::SessionState state); | |
| 97 void AddUserSession(mojom::UserSessionPtr user_session); | |
| 98 | |
| 99 // Bindings for mojom::SessionController interface. | |
| 100 mojo::BindingSet<mojom::SessionController> bindings_; | |
| 101 | |
| 102 // Client interface to session manager code (chrome). | |
| 103 mojom::SessionControllerClientPtr client_; | |
| 104 | |
| 105 // Cached session info. | |
| 106 bool can_lock_ = false; | |
| 107 bool should_lock_screen_automatically_ = false; | |
| 108 AddUserSessionPolicy add_user_session_policy_ = AddUserSessionPolicy::ALLOWED; | |
| 109 session_manager::SessionState state_ = session_manager::SessionState::UNKNOWN; | |
| 110 | |
| 111 // Cached user session info sorted by the order from SetUserSessionOrder. | |
| 112 // Currently the session manager code (chrome) sets a LRU order with the | |
| 113 // active session being the first. | |
| 114 std::vector<mojom::UserSessionPtr> user_sessions_; | |
| 115 | |
| 116 // The user session id of the current active user session. User session id | |
| 117 // is managed by session manager code, starting at 1. 0u is an invalid id | |
| 118 // to detect first active user session. | |
| 119 uint32_t active_session_id_ = 0u; | |
| 120 | |
| 121 base::ObserverList<ash::SessionStateObserver> observers_; | |
| 122 | |
| 123 DISALLOW_COPY_AND_ASSIGN(SessionController); | |
| 124 }; | |
| 125 | |
| 126 } // namespace ash | |
| 127 | |
| 128 #endif // ASH_SESSION_SESSION_CONTROLLER_H_ | |
| OLD | NEW |