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

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

Issue 2734933004: ash: Use SessionController instead of SessionStateDelegate (Closed)
Patch Set: rebase to get WorkspaceLayoutManagerSoloTest change 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 // Get the default session state. Default session state is ACTIVE when the
23 // process starts with a user session, i.e. the process has kLoginUser command
24 // line switch. This is needed because ash focus rules depends on whether
25 // session is blocked to pick an activatable window and chrome needs to create a
26 // focused browser window when starting with a user session (both in production
27 // and in tests). Using ACTIVE as default in this situation allows chrome to run
28 // without having to wait for session state to reach to ash. For other cases
29 // (oobe/login), there is only one login window. The login window always gets
30 // focus so default session state does not matter. Use UNKNOWN and wait for
31 // chrome to update ash for such cases.
32 session_manager::SessionState GetDefaultSessionState() {
33 const bool start_with_user =
34 base::CommandLine::ForCurrentProcess()->HasSwitch(
35 chromeos::switches::kLoginUser);
36 return start_with_user ? session_manager::SessionState::ACTIVE
37 : session_manager::SessionState::UNKNOWN;
38 }
39
40 } // namespace
41
42 SessionController::SessionController() : state_(GetDefaultSessionState()) {}
19 43
20 SessionController::~SessionController() {} 44 SessionController::~SessionController() {}
21 45
22 void SessionController::BindRequest(mojom::SessionControllerRequest request) { 46 void SessionController::BindRequest(mojom::SessionControllerRequest request) {
23 bindings_.AddBinding(this, std::move(request)); 47 bindings_.AddBinding(this, std::move(request));
24 } 48 }
25 49
26 int SessionController::GetMaximumNumberOfLoggedInUsers() const { 50 int SessionController::GetMaximumNumberOfLoggedInUsers() const {
27 return session_manager::kMaxmiumNumberOfUserSessions; 51 return session_manager::kMaxmiumNumberOfUserSessions;
28 } 52 }
29 53
30 int SessionController::NumberOfLoggedInUsers() const { 54 int SessionController::NumberOfLoggedInUsers() const {
31 return static_cast<int>(user_sessions_.size()); 55 return static_cast<int>(user_sessions_.size());
32 } 56 }
33 57
34 AddUserSessionPolicy SessionController::GetAddUserPolicy() const { 58 AddUserSessionPolicy SessionController::GetAddUserPolicy() const {
35 return add_user_session_policy_; 59 return add_user_session_policy_;
36 } 60 }
37 61
38 bool SessionController::IsActiveUserSessionStarted() const { 62 bool SessionController::IsActiveUserSessionStarted() const {
39 return !user_sessions_.empty(); 63 return !user_sessions_.empty();
40 } 64 }
41 65
42 bool SessionController::CanLockScreen() const { 66 bool SessionController::CanLockScreen() const {
43 return can_lock_; 67 return IsActiveUserSessionStarted() && can_lock_;
44 } 68 }
45 69
46 bool SessionController::IsScreenLocked() const { 70 bool SessionController::IsScreenLocked() const {
47 return state_ == session_manager::SessionState::LOCKED; 71 return state_ == session_manager::SessionState::LOCKED;
48 } 72 }
49 73
50 bool SessionController::ShouldLockScreenAutomatically() const { 74 bool SessionController::ShouldLockScreenAutomatically() const {
51 return should_lock_screen_automatically_; 75 return should_lock_screen_automatically_;
52 } 76 }
53 77
54 bool SessionController::IsUserSessionBlocked() const { 78 bool SessionController::IsUserSessionBlocked() const {
55 return state_ != session_manager::SessionState::ACTIVE; 79 return state_ != session_manager::SessionState::ACTIVE;
56 } 80 }
57 81
82 bool SessionController::IsInSecondaryLoginScreen() const {
83 return state_ == session_manager::SessionState::LOGIN_SECONDARY;
84 }
85
58 session_manager::SessionState SessionController::GetSessionState() const { 86 session_manager::SessionState SessionController::GetSessionState() const {
59 return state_; 87 return state_;
60 } 88 }
61 89
62 const std::vector<mojom::UserSessionPtr>& SessionController::GetUserSessions() 90 const std::vector<mojom::UserSessionPtr>& SessionController::GetUserSessions()
63 const { 91 const {
64 return user_sessions_; 92 return user_sessions_;
65 } 93 }
66 94
95 const mojom::UserSession* SessionController::GetUserSession(
96 UserIndex index) const {
97 if (index < 0 || index >= static_cast<UserIndex>(user_sessions_.size()))
98 return nullptr;
99
100 return user_sessions_[index].get();
101 }
102
67 void SessionController::LockScreen() { 103 void SessionController::LockScreen() {
68 if (client_) 104 if (client_)
69 client_->RequestLockScreen(); 105 client_->RequestLockScreen();
70 } 106 }
71 107
72 void SessionController::SwitchActiveUser(const AccountId& account_id) { 108 void SessionController::SwitchActiveUser(const AccountId& account_id) {
73 if (client_) 109 if (client_)
74 client_->SwitchActiveUser(account_id); 110 client_->SwitchActiveUser(account_id);
75 } 111 }
76 112
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 201
166 // Check active user change and notifies observers. 202 // Check active user change and notifies observers.
167 if (user_sessions_[0]->session_id != active_session_id_) { 203 if (user_sessions_[0]->session_id != active_session_id_) {
168 active_session_id_ = user_sessions_[0]->session_id; 204 active_session_id_ = user_sessions_[0]->session_id;
169 205
170 for (auto& observer : observers_) 206 for (auto& observer : observers_)
171 observer.ActiveUserChanged(user_sessions_[0]->account_id); 207 observer.ActiveUserChanged(user_sessions_[0]->account_id);
172 } 208 }
173 } 209 }
174 210
211 void SessionController::ClearUserSessionsForTest() {
212 user_sessions_.clear();
213 }
214
215 void SessionController::FlushMojoForTest() {
216 client_.FlushForTesting();
217 }
218
219 void SessionController::LockScreenAndFlushForTest() {
220 LockScreen();
221 FlushMojoForTest();
222 }
223
175 void SessionController::SetSessionState(session_manager::SessionState state) { 224 void SessionController::SetSessionState(session_manager::SessionState state) {
176 if (state_ == state) 225 if (state_ == state)
177 return; 226 return;
178 227
179 state_ = state; 228 state_ = state;
180 for (auto& observer : observers_) 229 for (auto& observer : observers_)
181 observer.SessionStateChanged(state_); 230 observer.SessionStateChanged(state_);
182 } 231 }
183 232
184 void SessionController::AddUserSession(mojom::UserSessionPtr user_session) { 233 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: 267 case user_manager::NUM_USER_TYPES:
219 // Avoid having a "default" case so the compiler catches new enum values. 268 // Avoid having a "default" case so the compiler catches new enum values.
220 NOTREACHED(); 269 NOTREACHED();
221 return LoginStatus::USER; 270 return LoginStatus::USER;
222 } 271 }
223 NOTREACHED(); 272 NOTREACHED();
224 return LoginStatus::USER; 273 return LoginStatus::USER;
225 } 274 }
226 275
227 } // namespace ash 276 } // namespace ash
OLDNEW
« no previous file with comments | « ash/common/session/session_controller.h ('k') | ash/common/session/session_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698