Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: ash/common/session/session_controller.cc

Issue 2734933004: ash: Use SessionController instead of SessionStateDelegate (Closed)
Patch Set: rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "ash/common/session/session_controller.h" 5 #include "ash/common/session/session_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/common/login_status.h" 9 #include "ash/common/login_status.h"
10 #include "ash/common/session/session_state_observer.h" 10 #include "ash/common/session/session_state_observer.h"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/command_line.h"
14 #include "chromeos/chromeos_switches.h"
13 #include "components/signin/core/account_id/account_id.h" 15 #include "components/signin/core/account_id/account_id.h"
14 #include "services/service_manager/public/cpp/connector.h" 16 #include "services/service_manager/public/cpp/connector.h"
15 17
16 namespace ash { 18 namespace ash {
17 19
18 SessionController::SessionController() {} 20 namespace {
21
22 session_manager::SessionState GetDefaultSessionState() {
James Cook 2017/03/19 19:02:51 This function needs comments explaining why the de
xiyuan 2017/03/20 17:12:56 Done.
23 const bool start_with_user =
24 base::CommandLine::ForCurrentProcess()->HasSwitch(
25 chromeos::switches::kLoginUser);
26 return start_with_user ? session_manager::SessionState::ACTIVE
27 : session_manager::SessionState::UNKNOWN;
28 }
29
30 } // namespace
31
32 SessionController::SessionController() : state_(GetDefaultSessionState()) {}
19 33
20 SessionController::~SessionController() {} 34 SessionController::~SessionController() {}
21 35
22 void SessionController::BindRequest(mojom::SessionControllerRequest request) { 36 void SessionController::BindRequest(mojom::SessionControllerRequest request) {
23 bindings_.AddBinding(this, std::move(request)); 37 bindings_.AddBinding(this, std::move(request));
24 } 38 }
25 39
26 int SessionController::GetMaximumNumberOfLoggedInUsers() const { 40 int SessionController::GetMaximumNumberOfLoggedInUsers() const {
27 return session_manager::kMaxmiumNumberOfUserSessions; 41 return session_manager::kMaxmiumNumberOfUserSessions;
28 } 42 }
29 43
30 int SessionController::NumberOfLoggedInUsers() const { 44 int SessionController::NumberOfLoggedInUsers() const {
31 return static_cast<int>(user_sessions_.size()); 45 return static_cast<int>(user_sessions_.size());
32 } 46 }
33 47
34 AddUserSessionPolicy SessionController::GetAddUserPolicy() const { 48 AddUserSessionPolicy SessionController::GetAddUserPolicy() const {
35 return add_user_session_policy_; 49 return add_user_session_policy_;
36 } 50 }
37 51
38 bool SessionController::IsActiveUserSessionStarted() const { 52 bool SessionController::IsActiveUserSessionStarted() const {
39 return !user_sessions_.empty(); 53 return !user_sessions_.empty();
40 } 54 }
41 55
42 bool SessionController::CanLockScreen() const { 56 bool SessionController::CanLockScreen() const {
43 return can_lock_; 57 return IsActiveUserSessionStarted() && can_lock_;
44 } 58 }
45 59
46 bool SessionController::IsScreenLocked() const { 60 bool SessionController::IsScreenLocked() const {
47 return state_ == session_manager::SessionState::LOCKED; 61 return state_ == session_manager::SessionState::LOCKED;
48 } 62 }
49 63
50 bool SessionController::ShouldLockScreenAutomatically() const { 64 bool SessionController::ShouldLockScreenAutomatically() const {
51 return should_lock_screen_automatically_; 65 return should_lock_screen_automatically_;
52 } 66 }
53 67
54 bool SessionController::IsUserSessionBlocked() const { 68 bool SessionController::IsUserSessionBlocked() const {
55 return state_ != session_manager::SessionState::ACTIVE; 69 return state_ != session_manager::SessionState::ACTIVE;
56 } 70 }
57 71
72 bool SessionController::IsInSecondaryLoginScreen() const {
73 return state_ == session_manager::SessionState::LOGIN_SECONDARY;
74 }
75
58 session_manager::SessionState SessionController::GetSessionState() const { 76 session_manager::SessionState SessionController::GetSessionState() const {
59 return state_; 77 return state_;
60 } 78 }
61 79
62 const std::vector<mojom::UserSessionPtr>& SessionController::GetUserSessions() 80 const std::vector<mojom::UserSessionPtr>& SessionController::GetUserSessions()
63 const { 81 const {
64 return user_sessions_; 82 return user_sessions_;
65 } 83 }
66 84
85 const mojom::UserSession* SessionController::GetUserSession(
86 UserIndex index) const {
87 if (index < 0 || index >= static_cast<UserIndex>(user_sessions_.size()))
88 return nullptr;
89
90 return user_sessions_[index].get();
91 }
92
67 void SessionController::LockScreen() { 93 void SessionController::LockScreen() {
68 if (client_) 94 if (client_)
69 client_->RequestLockScreen(); 95 client_->RequestLockScreen();
70 } 96 }
71 97
72 void SessionController::SwitchActiveUser(const AccountId& account_id) { 98 void SessionController::SwitchActiveUser(const AccountId& account_id) {
73 if (client_) 99 if (client_)
74 client_->SwitchActiveUser(account_id); 100 client_->SwitchActiveUser(account_id);
75 } 101 }
76 102
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 191
166 // Check active user change and notifies observers. 192 // Check active user change and notifies observers.
167 if (user_sessions_[0]->session_id != active_session_id_) { 193 if (user_sessions_[0]->session_id != active_session_id_) {
168 active_session_id_ = user_sessions_[0]->session_id; 194 active_session_id_ = user_sessions_[0]->session_id;
169 195
170 for (auto& observer : observers_) 196 for (auto& observer : observers_)
171 observer.ActiveUserChanged(user_sessions_[0]->account_id); 197 observer.ActiveUserChanged(user_sessions_[0]->account_id);
172 } 198 }
173 } 199 }
174 200
201 void SessionController::ClearUserSessionsForTest() {
202 user_sessions_.clear();
203 }
204
205 void SessionController::FlushMojoForTest() {
206 client_.FlushForTesting();
207 }
208
209 void SessionController::LockScreenAndFlushForTest() {
210 LockScreen();
211 FlushMojoForTest();
212 }
213
175 void SessionController::SetSessionState(session_manager::SessionState state) { 214 void SessionController::SetSessionState(session_manager::SessionState state) {
176 if (state_ == state) 215 if (state_ == state)
177 return; 216 return;
178 217
179 state_ = state; 218 state_ = state;
180 for (auto& observer : observers_) 219 for (auto& observer : observers_)
181 observer.SessionStateChanged(state_); 220 observer.SessionStateChanged(state_);
182 } 221 }
183 222
184 void SessionController::AddUserSession(mojom::UserSessionPtr user_session) { 223 void SessionController::AddUserSession(mojom::UserSessionPtr user_session) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 case user_manager::NUM_USER_TYPES: 257 case user_manager::NUM_USER_TYPES:
219 // Avoid having a "default" case so the compiler catches new enum values. 258 // Avoid having a "default" case so the compiler catches new enum values.
220 NOTREACHED(); 259 NOTREACHED();
221 return LoginStatus::USER; 260 return LoginStatus::USER;
222 } 261 }
223 NOTREACHED(); 262 NOTREACHED();
224 return LoginStatus::USER; 263 return LoginStatus::USER;
225 } 264 }
226 265
227 } // namespace ash 266 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698