Chromium Code Reviews| 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 |