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

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

Issue 2741403004: mash: Update LoginStatus with session state updates (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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/common/session/session_controller.cc
diff --git a/ash/common/session/session_controller.cc b/ash/common/session/session_controller.cc
index cafed50edd36116302adf2756c53cc40af0bdafb..75b82d66ac62b091e20f23ef94ef1712d9e2dc0a 100644
--- a/ash/common/session/session_controller.cc
+++ b/ash/common/session/session_controller.cc
@@ -6,6 +6,7 @@
#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"
@@ -88,6 +89,34 @@ void SessionController::RemoveSessionStateObserver(
observers_.RemoveObserver(observer);
}
+LoginStatus SessionController::GetLoginStatus() const {
+ using session_manager::SessionState;
+
+ // TODO(jamescook|xiyuan): This is a temporary hack until we decide if we want
+ // to convert code using LoginStatus to use SessionState instead. There isn't
+ // a 1:1 mapping of SessionState to LoginStatus. See also
+ // WmShell::SessionStateChanged().
+ 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;
+}
+
void SessionController::SetClient(mojom::SessionControllerClientPtr client) {
client_ = std::move(client);
}
@@ -163,4 +192,38 @@ void SessionController::AddUserSession(mojom::UserSessionPtr user_session) {
observer.UserAddedToSession(account_id);
}
+LoginStatus SessionController::GetLoginStatusForActiveSession() const {
+ DCHECK(state_ == session_manager::SessionState::ACTIVE);
+
+ if (user_sessions_.empty()) // Can be empty in tests.
+ return LoginStatus::USER;
+
+ switch (user_sessions_[0]->type) {
+ case user_manager::USER_TYPE_REGULAR:
+ // TODO: This needs to distinguish between owner and non-owner.
+ return LoginStatus::USER;
+ case user_manager::USER_TYPE_GUEST:
+ return LoginStatus::GUEST;
+ case user_manager::USER_TYPE_PUBLIC_ACCOUNT:
+ return LoginStatus::PUBLIC;
+ case user_manager::USER_TYPE_SUPERVISED:
+ return LoginStatus::SUPERVISED;
+ case user_manager::USER_TYPE_KIOSK_APP:
+ return LoginStatus::KIOSK_APP;
+ case user_manager::USER_TYPE_CHILD:
+ return LoginStatus::SUPERVISED;
+ case user_manager::USER_TYPE_ARC_KIOSK_APP:
+ return LoginStatus::ARC_KIOSK_APP;
+ case user_manager::USER_TYPE_ACTIVE_DIRECTORY:
+ // TODO: There is no LoginStatus for this.
+ return LoginStatus::USER;
+ case user_manager::NUM_USER_TYPES:
+ // Avoid having a "default" case so the compiler catches new enum values.
+ NOTREACHED();
+ return LoginStatus::USER;
+ }
+ NOTREACHED();
+ return LoginStatus::USER;
+}
+
} // namespace ash
« 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