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

Unified Diff: ash/common/session/session_controller.cc

Issue 2797743002: ash: Merge LoginStatus update code path (Closed)
Patch Set: fix post unlock animation not run, and tests Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: ash/common/session/session_controller.cc
diff --git a/ash/common/session/session_controller.cc b/ash/common/session/session_controller.cc
index 96af2665cb11e3307ce4742cc64567aab8a5093c..e82f8987828439e97d4127ea7b442aa2096edca0 100644
--- a/ash/common/session/session_controller.cc
+++ b/ash/common/session/session_controller.cc
@@ -6,7 +6,6 @@
#include <algorithm>
-#include "ash/common/login_status.h"
#include "ash/common/session/session_state_observer.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
@@ -126,29 +125,7 @@ void SessionController::RemoveSessionStateObserver(
}
LoginStatus SessionController::GetLoginStatus() const {
- using session_manager::SessionState;
-
- // TODO(jamescook|xiyuan): There is not a 1:1 mapping of SessionState to
- // LoginStatus. Fix the cases that don't match. http://crbug.com/701193
- switch (state_) {
- case SessionState::UNKNOWN:
- case SessionState::OOBE:
- case SessionState::LOGIN_PRIMARY:
- case SessionState::LOGGED_IN_NOT_ACTIVE:
- return LoginStatus::NOT_LOGGED_IN;
-
- case SessionState::ACTIVE:
- return GetLoginStatusForActiveSession();
-
- case SessionState::LOCKED:
- return LoginStatus::LOCKED;
-
- case SessionState::LOGIN_SECONDARY:
- // TODO: There is no LoginStatus for this.
- return LoginStatus::USER;
- }
- NOTREACHED();
- return LoginStatus::NOT_LOGGED_IN;
+ return login_status_;
}
void SessionController::SetClient(mojom::SessionControllerClientPtr client) {
@@ -176,6 +153,8 @@ void SessionController::UpdateUserSession(mojom::UserSessionPtr user_session) {
*it = std::move(user_session);
for (auto& observer : observers_)
observer.UserSessionUpdated((*it)->account_id);
+
+ UpdateLoginStatus();
}
void SessionController::SetUserSessionOrder(
@@ -205,6 +184,8 @@ void SessionController::SetUserSessionOrder(
for (auto& observer : observers_)
observer.ActiveUserChanged(user_sessions_[0]->account_id);
+
+ UpdateLoginStatus();
}
}
@@ -228,6 +209,8 @@ void SessionController::SetSessionState(session_manager::SessionState state) {
state_ = state;
for (auto& observer : observers_)
observer.SessionStateChanged(state_);
+
+ UpdateLoginStatus();
}
void SessionController::AddUserSession(mojom::UserSessionPtr user_session) {
@@ -239,7 +222,33 @@ void SessionController::AddUserSession(mojom::UserSessionPtr user_session) {
observer.UserAddedToSession(account_id);
}
-LoginStatus SessionController::GetLoginStatusForActiveSession() const {
+LoginStatus SessionController::CalculateLoginStatus() const {
+ using session_manager::SessionState;
+
+ // TODO(jamescook|xiyuan): There is not a 1:1 mapping of SessionState to
+ // LoginStatus. Fix the cases that don't match. http://crbug.com/701193
+ switch (state_) {
+ case SessionState::UNKNOWN:
+ case SessionState::OOBE:
+ case SessionState::LOGIN_PRIMARY:
+ case SessionState::LOGGED_IN_NOT_ACTIVE:
+ return LoginStatus::NOT_LOGGED_IN;
+
+ case SessionState::ACTIVE:
+ return CalculateLoginStatusForActiveSession();
+
+ case SessionState::LOCKED:
+ return LoginStatus::LOCKED;
+
+ case SessionState::LOGIN_SECONDARY:
+ // TODO: There is no LoginStatus for this.
+ return LoginStatus::USER;
+ }
+ NOTREACHED();
+ return LoginStatus::NOT_LOGGED_IN;
+}
+
+LoginStatus SessionController::CalculateLoginStatusForActiveSession() const {
DCHECK(state_ == session_manager::SessionState::ACTIVE);
if (user_sessions_.empty()) // Can be empty in tests.
@@ -273,4 +282,14 @@ LoginStatus SessionController::GetLoginStatusForActiveSession() const {
return LoginStatus::USER;
}
+void SessionController::UpdateLoginStatus() {
+ const LoginStatus new_login_status = CalculateLoginStatus();
+ if (new_login_status == login_status_)
+ return;
+
+ login_status_ = new_login_status;
+ for (auto& observer : observers_)
+ observer.LoginStatusChanged(login_status_);
+}
+
} // namespace ash

Powered by Google App Engine
This is Rietveld 408576698