OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/ash/session_controller_client.h" | 5 #include "chrome/browser/ui/ash/session_controller_client.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "ash/public/cpp/session_types.h" | 10 #include "ash/public/cpp/session_types.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 | 29 |
30 using user_manager::UserManager; | 30 using user_manager::UserManager; |
31 using user_manager::User; | 31 using user_manager::User; |
32 using user_manager::UserList; | 32 using user_manager::UserList; |
33 | 33 |
34 namespace { | 34 namespace { |
35 | 35 |
36 // Limits the number of logged in users to 10 due to memory constraints. | 36 // Limits the number of logged in users to 10 due to memory constraints. |
37 constexpr uint32_t kMaxUsers = 10; | 37 constexpr uint32_t kMaxUsers = 10; |
38 | 38 |
| 39 SessionControllerClient* g_instance = nullptr; |
| 40 |
39 uint32_t GetSessionId(const User* user) { | 41 uint32_t GetSessionId(const User* user) { |
40 const UserList logged_in_users = UserManager::Get()->GetLoggedInUsers(); | 42 const UserList logged_in_users = UserManager::Get()->GetLoggedInUsers(); |
41 // TODO(xiyuan): Update with real session id when user session tracking | 43 // TODO(xiyuan): Update with real session id when user session tracking |
42 // code is moved from UserManager to SessionManager. | 44 // code is moved from UserManager to SessionManager. |
43 for (size_t i = 0; i < logged_in_users.size(); ++i) { | 45 for (size_t i = 0; i < logged_in_users.size(); ++i) { |
44 if (logged_in_users[i] == user) | 46 if (logged_in_users[i] == user) |
45 return i + 1; | 47 return i + 1; |
46 } | 48 } |
47 | 49 |
48 NOTREACHED(); | 50 NOTREACHED(); |
(...skipping 29 matching lines...) Expand all Loading... |
78 } // namespace | 80 } // namespace |
79 | 81 |
80 SessionControllerClient::SessionControllerClient() : binding_(this) { | 82 SessionControllerClient::SessionControllerClient() : binding_(this) { |
81 session_manager::SessionManager::Get()->AddObserver(this); | 83 session_manager::SessionManager::Get()->AddObserver(this); |
82 UserManager::Get()->AddSessionStateObserver(this); | 84 UserManager::Get()->AddSessionStateObserver(this); |
83 | 85 |
84 ConnectToSessionControllerAndSetClient(); | 86 ConnectToSessionControllerAndSetClient(); |
85 SendSessionInfoIfChanged(); | 87 SendSessionInfoIfChanged(); |
86 // User sessions and their order will be sent via UserSessionStateObserver | 88 // User sessions and their order will be sent via UserSessionStateObserver |
87 // even for crash-n-restart. | 89 // even for crash-n-restart. |
| 90 |
| 91 DCHECK(!g_instance); |
| 92 g_instance = this; |
88 } | 93 } |
89 | 94 |
90 SessionControllerClient::~SessionControllerClient() { | 95 SessionControllerClient::~SessionControllerClient() { |
| 96 DCHECK_EQ(this, g_instance); |
| 97 g_instance = nullptr; |
| 98 |
91 session_manager::SessionManager::Get()->RemoveObserver(this); | 99 session_manager::SessionManager::Get()->RemoveObserver(this); |
92 UserManager::Get()->RemoveSessionStateObserver(this); | 100 UserManager::Get()->RemoveSessionStateObserver(this); |
93 } | 101 } |
94 | 102 |
95 void SessionControllerClient::RequestLockScreen() { | 103 void SessionControllerClient::RequestLockScreen() { |
96 DoLockScreen(); | 104 DoLockScreen(); |
97 } | 105 } |
98 | 106 |
99 void SessionControllerClient::SwitchActiveUser( | 107 void SessionControllerClient::SwitchActiveUser( |
100 const std::string& serialized_account_id) { | 108 const std::string& serialized_account_id) { |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 account_id = (*it)->GetAccountId(); | 227 account_id = (*it)->GetAccountId(); |
220 } else { | 228 } else { |
221 if (it == logged_in_users.begin()) | 229 if (it == logged_in_users.begin()) |
222 it = logged_in_users.end(); | 230 it = logged_in_users.end(); |
223 account_id = (*(--it))->GetAccountId(); | 231 account_id = (*(--it))->GetAccountId(); |
224 } | 232 } |
225 | 233 |
226 DoSwitchActiveUser(account_id); | 234 DoSwitchActiveUser(account_id); |
227 } | 235 } |
228 | 236 |
| 237 // static |
| 238 void SessionControllerClient::FlushForTesting() { |
| 239 g_instance->session_controller_.FlushForTesting(); |
| 240 } |
| 241 |
229 void SessionControllerClient::OnSessionStateChanged() { | 242 void SessionControllerClient::OnSessionStateChanged() { |
230 SendSessionInfoIfChanged(); | 243 SendSessionInfoIfChanged(); |
231 } | 244 } |
232 | 245 |
233 void SessionControllerClient::ConnectToSessionControllerAndSetClient() { | 246 void SessionControllerClient::ConnectToSessionControllerAndSetClient() { |
234 content::ServiceManagerConnection::GetForProcess() | 247 content::ServiceManagerConnection::GetForProcess() |
235 ->GetConnector() | 248 ->GetConnector() |
236 ->ConnectToInterface(ash_util::GetAshServiceName(), &session_controller_); | 249 ->ConnectToInterface(ash_util::GetAshServiceName(), &session_controller_); |
237 | 250 |
238 // Set as |session_controller_|'s client. | 251 // Set as |session_controller_|'s client. |
(...skipping 21 matching lines...) Expand all Loading... |
260 void SessionControllerClient::SendUserSessionOrder() { | 273 void SessionControllerClient::SendUserSessionOrder() { |
261 UserManager* const user_manager = UserManager::Get(); | 274 UserManager* const user_manager = UserManager::Get(); |
262 | 275 |
263 const UserList logged_in_users = user_manager->GetLoggedInUsers(); | 276 const UserList logged_in_users = user_manager->GetLoggedInUsers(); |
264 std::vector<uint32_t> user_session_ids; | 277 std::vector<uint32_t> user_session_ids; |
265 for (auto* user : user_manager->GetLRULoggedInUsers()) | 278 for (auto* user : user_manager->GetLRULoggedInUsers()) |
266 user_session_ids.push_back(GetSessionId(user)); | 279 user_session_ids.push_back(GetSessionId(user)); |
267 | 280 |
268 session_controller_->SetUserSessionOrder(user_session_ids); | 281 session_controller_->SetUserSessionOrder(user_session_ids); |
269 } | 282 } |
OLD | NEW |