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 c86827951204965cf90e5b33c2d6d0670f6f5bee..2156e875ba8628f148baace53f9a2db02cb3f8a4 100644 |
--- a/chrome/browser/chromeos/login/screens/user_selection_screen.cc |
+++ b/chrome/browser/chromeos/login/screens/user_selection_screen.cc |
@@ -113,7 +113,8 @@ UserSelectionScreen::UserSelectionScreen(const std::string& display_type) |
: handler_(nullptr), |
login_display_delegate_(nullptr), |
view_(nullptr), |
- display_type_(display_type) { |
+ display_type_(display_type), |
+ weak_factory_(this) { |
} |
UserSelectionScreen::~UserSelectionScreen() { |
@@ -403,6 +404,34 @@ void UserSelectionScreen::HandleGetUsers() { |
SendUserList(); |
} |
+void UserSelectionScreen::CheckUserStatus(const std::string& user_id) { |
+ // No checks on lock screen. |
+ if (ScreenLocker::default_screen_locker()) |
+ return; |
+ |
+ if (!token_handle_util_.get()) { |
+ token_handle_util_.reset( |
+ new TokenHandleUtil(user_manager::UserManager::Get())); |
+ } |
+ |
+ if (token_handle_util_->HasToken(user_id)) { |
+ token_handle_util_->CheckToken( |
+ user_id, base::Bind(&UserSelectionScreen::OnUserStatusChecked, |
+ weak_factory_.GetWeakPtr())); |
+ } |
+} |
+ |
+void UserSelectionScreen::OnUserStatusChecked( |
+ const user_manager::UserID& user_id, |
+ TokenHandleUtil::TokenHandleStatus status) { |
+ if (status == TokenHandleUtil::INVALID) { |
+ user_manager::UserManager::Get()->SaveUserOAuthStatus( |
+ user_id, user_manager::User::OAUTH2_TOKEN_STATUS_INVALID); |
+ token_handle_util_->DeleteToken(user_id); |
+ SetAuthType(user_id, ONLINE_SIGN_IN, base::string16()); |
+ } |
+} |
+ |
// EasyUnlock stuff |
void UserSelectionScreen::SetAuthType(const std::string& user_id, |