Index: chrome/browser/chromeos/login/user_manager_impl.cc |
diff --git a/chrome/browser/chromeos/login/user_manager_impl.cc b/chrome/browser/chromeos/login/user_manager_impl.cc |
index afa66d86249f97bf394b0483a761d5f2c71481de..086d8e38af787b38b1cba18ff6c29b2024186714 100644 |
--- a/chrome/browser/chromeos/login/user_manager_impl.cc |
+++ b/chrome/browser/chromeos/login/user_manager_impl.cc |
@@ -43,6 +43,7 @@ |
#include "chrome/common/pref_names.h" |
#include "chromeos/chromeos_switches.h" |
#include "chromeos/cryptohome/async_method_caller.h" |
+#include "chromeos/login/login_state.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/notification_service.h" |
#include "google_apis/gaia/gaia_auth_util.h" |
@@ -206,6 +207,7 @@ UserManagerImpl::UserManagerImpl() |
registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED, |
content::NotificationService::AllSources()); |
RetrieveTrustedDevicePolicies(); |
+ UpdateLoginState(); |
} |
UserManagerImpl::~UserManagerImpl() { |
@@ -413,6 +415,7 @@ void UserManagerImpl::RegularUserLoggedInAsEphemeral(const std::string& email) { |
void UserManagerImpl::SessionStarted() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
session_started_ = true; |
+ UpdateLoginState(); |
content::NotificationService::current()->Notify( |
chrome::NOTIFICATION_SESSION_STARTED, |
content::NotificationService::AllSources(), |
@@ -714,6 +717,7 @@ void UserManagerImpl::SetCurrentUserIsOwner(bool is_current_user_owner) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
base::AutoLock lk(is_current_user_owner_lock_); |
is_current_user_owner_ = is_current_user_owner; |
+ UpdateLoginState(); |
} |
bool UserManagerImpl::IsCurrentUserNew() const { |
@@ -987,6 +991,7 @@ const User* UserManagerImpl::FindUserInList(const std::string& email) const { |
void UserManagerImpl::NotifyOnLogin() { |
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ UpdateLoginState(); |
content::NotificationService::current()->Notify( |
chrome::NOTIFICATION_LOGIN_USER_CHANGED, |
content::Source<UserManager>(this), |
@@ -1300,4 +1305,26 @@ void UserManagerImpl::NotifyMergeSessionStateChanged() { |
MergeSessionStateChanged(merge_session_state_)); |
} |
+void UserManagerImpl::UpdateLoginState() { |
+ if (!LoginState::IsInitialized()) |
+ return; // may not be intialized in tests |
bartfab (slow)
2013/04/05 13:16:33
Nit: Format comment as a sentence.
stevenjb
2013/04/05 18:17:15
Sure. Done.
|
+ LoginState::State login_state; |
+ if (!logged_in_user_ || !session_started_) |
+ login_state = LoginState::LOGGED_IN_NONE; |
+ else if (is_current_user_owner_) |
+ login_state = LoginState::LOGGED_IN_OWNER; |
+ else if (logged_in_user_->GetType() == User::USER_TYPE_GUEST) |
+ login_state = LoginState::LOGGED_IN_GUEST; |
+ else if (logged_in_user_->GetType() == User::USER_TYPE_RETAIL_MODE) |
+ login_state = LoginState::LOGGED_IN_RETAIL_MODE; |
+ else if (logged_in_user_->GetType() == User::USER_TYPE_KIOSK_APP) |
+ login_state = LoginState::LOGGED_IN_KIOSK_APP; |
+ else if (logged_in_user_->GetType() == User::USER_TYPE_PUBLIC_ACCOUNT) |
+ login_state = LoginState::LOGGED_IN_PUBLIC; |
+ else |
+ login_state = LoginState::LOGGED_IN_USER; |
+ LoginState::Get()->SetLoginState(login_state); |
+ LoginState::Get()->SetSessionStarted(session_started_); |
+} |
+ |
} // namespace chromeos |