Index: chrome/browser/chromeos/login/screens/user_selection_screen.cc |
diff --git a/chrome/browser/chromeos/login/screens/user_selection_screen.cc b/chrome/browser/chromeos/login/screens/user_selection_screen.cc |
index 814faee0196f4f8509c36bf03975a9ca2b9b8d0e..fee3111bb0abae5443196deaf8ad7a70ed29a3e6 100644 |
--- a/chrome/browser/chromeos/login/screens/user_selection_screen.cc |
+++ b/chrome/browser/chromeos/login/screens/user_selection_screen.cc |
@@ -405,6 +405,8 @@ void UserSelectionScreen::SendUserList() { |
} |
handler_->LoadUsers(users_list, show_guest_); |
+ |
+ CheckNextUserStatus(""); |
dzhioev (left Google)
2015/06/22 23:51:24
std::string()
dzhioev (left Google)
2015/06/22 23:51:24
In my opinion this implementation is too cryptic.
Denis Kuznetsov (DE-MUC)
2015/06/25 18:43:42
Some magic constant that is not explained in metho
dzhioev (left Google)
2015/06/25 22:19:36
Which constants are you talking about?
Alexander Alekseev
2015/06/30 20:43:39
Done.
Alexander Alekseev
2015/06/30 20:43:39
Done.
|
} |
void UserSelectionScreen::HandleGetUsers() { |
@@ -412,9 +414,14 @@ void UserSelectionScreen::HandleGetUsers() { |
} |
void UserSelectionScreen::CheckUserStatus(const std::string& user_id) { |
+ CheckUserStatusImpl(user_id, false /* check_all_users */); |
+} |
+ |
+bool UserSelectionScreen::CheckUserStatusImpl(const std::string& user_id, |
+ bool check_all_users) { |
// No checks on lock screen. |
if (ScreenLocker::default_screen_locker()) |
- return; |
+ return false; |
if (!token_handle_util_.get()) { |
token_handle_util_.reset( |
@@ -422,13 +429,33 @@ void UserSelectionScreen::CheckUserStatus(const std::string& user_id) { |
} |
if (token_handle_util_->HasToken(user_id)) { |
- token_handle_util_->CheckToken( |
+ return token_handle_util_->CheckToken( |
user_id, base::Bind(&UserSelectionScreen::OnUserStatusChecked, |
- weak_factory_.GetWeakPtr())); |
+ weak_factory_.GetWeakPtr(), check_all_users)); |
+ } |
+ return false; |
+} |
+ |
+void UserSelectionScreen::CheckNextUserStatus( |
+ const std::string& current_user_id) { |
+ const user_manager::UserList& users = GetUsers(); |
+ bool found = current_user_id.empty(); |
+ for (const user_manager::User* user : users) { |
+ const std::string& next_user_id = user->email(); |
+ |
+ if (!found) { |
+ if (next_user_id == current_user_id) |
+ found = true; |
+ |
+ continue; |
+ } |
+ if (CheckUserStatusImpl(next_user_id, true /* check_all_users */)) |
+ return; |
} |
} |
void UserSelectionScreen::OnUserStatusChecked( |
+ const bool check_all_users, |
const user_manager::UserID& user_id, |
TokenHandleUtil::TokenHandleStatus status) { |
if (status == TokenHandleUtil::INVALID) { |
@@ -436,6 +463,8 @@ void UserSelectionScreen::OnUserStatusChecked( |
token_handle_util_->MarkHandleInvalid(user_id); |
SetAuthType(user_id, ONLINE_SIGN_IN, base::string16()); |
} |
+ if (check_all_users) |
+ CheckNextUserStatus(user_id); |
} |
// EasyUnlock stuff |