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

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

Issue 2736573002: chromeos: Move files in //ash/common to //ash, part 2 (Closed)
Patch Set: 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
(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 #include "ash/common/session/session_controller.h"
6
7 #include <algorithm>
8
9 #include "ash/common/session/session_state_observer.h"
10 #include "base/bind.h"
11 #include "base/bind_helpers.h"
12 #include "components/signin/core/account_id/account_id.h"
13 #include "services/service_manager/public/cpp/connector.h"
14
15 namespace ash {
16
17 SessionController::SessionController() {}
18
19 SessionController::~SessionController() {}
20
21 void SessionController::BindRequest(mojom::SessionControllerRequest request) {
22 bindings_.AddBinding(this, std::move(request));
23 }
24
25 int SessionController::GetMaximumNumberOfLoggedInUsers() const {
26 return session_manager::kMaxmiumNumberOfUserSessions;
27 }
28
29 int SessionController::NumberOfLoggedInUsers() const {
30 return static_cast<int>(user_sessions_.size());
31 }
32
33 AddUserSessionPolicy SessionController::GetAddUserPolicy() const {
34 return add_user_session_policy_;
35 }
36
37 bool SessionController::IsActiveUserSessionStarted() const {
38 return !user_sessions_.empty();
39 }
40
41 bool SessionController::CanLockScreen() const {
42 return can_lock_;
43 }
44
45 bool SessionController::IsScreenLocked() const {
46 return state_ == session_manager::SessionState::LOCKED;
47 }
48
49 bool SessionController::ShouldLockScreenAutomatically() const {
50 return should_lock_screen_automatically_;
51 }
52
53 bool SessionController::IsUserSessionBlocked() const {
54 return state_ != session_manager::SessionState::ACTIVE;
55 }
56
57 session_manager::SessionState SessionController::GetSessionState() const {
58 return state_;
59 }
60
61 const std::vector<mojom::UserSessionPtr>& SessionController::GetUserSessions()
62 const {
63 return user_sessions_;
64 }
65
66 void SessionController::LockScreen() {
67 if (client_)
68 client_->RequestLockScreen();
69 }
70
71 void SessionController::SwitchActiveUser(const AccountId& account_id) {
72 if (client_)
73 client_->SwitchActiveUser(account_id);
74 }
75
76 void SessionController::CycleActiveUser(CycleUserDirection direction) {
77 if (client_)
78 client_->CycleActiveUser(direction);
79 }
80
81 void SessionController::AddSessionStateObserver(
82 SessionStateObserver* observer) {
83 observers_.AddObserver(observer);
84 }
85
86 void SessionController::RemoveSessionStateObserver(
87 SessionStateObserver* observer) {
88 observers_.RemoveObserver(observer);
89 }
90
91 void SessionController::SetClient(mojom::SessionControllerClientPtr client) {
92 client_ = std::move(client);
93 }
94
95 void SessionController::SetSessionInfo(mojom::SessionInfoPtr info) {
96 can_lock_ = info->can_lock_screen;
97 should_lock_screen_automatically_ = info->should_lock_screen_automatically;
98 add_user_session_policy_ = info->add_user_session_policy;
99 SetSessionState(info->state);
100 }
101
102 void SessionController::UpdateUserSession(mojom::UserSessionPtr user_session) {
103 auto it =
104 std::find_if(user_sessions_.begin(), user_sessions_.end(),
105 [&user_session](const mojom::UserSessionPtr& session) {
106 return session->session_id == user_session->session_id;
107 });
108 if (it == user_sessions_.end()) {
109 AddUserSession(std::move(user_session));
110 return;
111 }
112
113 *it = std::move(user_session);
114 // TODO(xiyuan): Notify observers about meta change to replace things such as
115 // NOTIFICATION_LOGIN_USER_IMAGE_CHANGED. http://crbug.com/670422
116 }
117
118 void SessionController::SetUserSessionOrder(
119 const std::vector<uint32_t>& user_session_order) {
120 DCHECK_EQ(user_sessions_.size(), user_session_order.size());
121
122 // Adjusts |user_sessions_| to match the given order.
123 std::vector<mojom::UserSessionPtr> sessions;
124 for (const auto& session_id : user_session_order) {
125 auto it =
126 std::find_if(user_sessions_.begin(), user_sessions_.end(),
127 [session_id](const mojom::UserSessionPtr& session) {
128 return session && session->session_id == session_id;
129 });
130 if (it == user_sessions_.end()) {
131 LOG(ERROR) << "Unknown session id =" << session_id;
132 continue;
133 }
134
135 sessions.push_back(std::move(*it));
136 }
137 user_sessions_.swap(sessions);
138
139 // Check active user change and notifies observers.
140 if (user_sessions_[0]->session_id != active_session_id_) {
141 active_session_id_ = user_sessions_[0]->session_id;
142
143 for (auto& observer : observers_)
144 observer.ActiveUserChanged(user_sessions_[0]->account_id);
145 }
146 }
147
148 void SessionController::SetSessionState(session_manager::SessionState state) {
149 if (state_ == state)
150 return;
151
152 state_ = state;
153 for (auto& observer : observers_)
154 observer.SessionStateChanged(state_);
155 }
156
157 void SessionController::AddUserSession(mojom::UserSessionPtr user_session) {
158 const AccountId account_id(user_session->account_id);
159
160 user_sessions_.push_back(std::move(user_session));
161
162 for (auto& observer : observers_)
163 observer.UserAddedToSession(account_id);
164 }
165
166 } // 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