Index: chrome/browser/chromeos/login/signin/token_handle_util.cc |
diff --git a/chrome/browser/chromeos/login/signin/token_handle_util.cc b/chrome/browser/chromeos/login/signin/token_handle_util.cc |
index 3d6c4662732f04aa21c7a07bcfd9debaa4d7b7f1..482abf451ad4e7bc608c5f22c2252217fb0e720f 100644 |
--- a/chrome/browser/chromeos/login/signin/token_handle_util.cc |
+++ b/chrome/browser/chromeos/login/signin/token_handle_util.cc |
@@ -15,8 +15,15 @@ |
namespace { |
const char kTokenHandlePref[] = "PasswordTokenHandle"; |
+const char kTokenHandleStatusPref[] = "TokenHandleStatus"; |
+ |
+const char kHandleStatusValid[] = "valid"; |
Nikita (slow)
2015/05/12 17:45:57
Should set valid status when token is stored.
|
+const char kHandleStatusInvalid[] = "invalid"; |
+const char* kDefaultHandleStatus = kHandleStatusValid; |
+ |
static const int kMaxRetries = 3; |
-} |
+ |
+} // namespace |
TokenHandleUtil::TokenHandleUtil(user_manager::UserManager* user_manager) |
: user_manager_(user_manager), weak_factory_(this) { |
@@ -37,17 +44,36 @@ bool TokenHandleUtil::HasToken(const user_manager::UserID& user_id) { |
return !token.empty(); |
} |
-void TokenHandleUtil::DeleteToken(const user_manager::UserID& user_id) { |
+bool TokenHandleUtil::ShouldObtainHandle(const user_manager::UserID& user_id) { |
+ const base::DictionaryValue* dict = nullptr; |
+ std::string token; |
+ if (!user_manager_->FindKnownUserPrefs(user_id, &dict)) |
+ return true; |
+ if (!dict->GetString(kTokenHandlePref, &token)) |
+ return true; |
+ if (token.empty()) |
+ return true; |
+ std::string status(kDefaultHandleStatus); |
+ dict->GetString(kTokenHandleStatusPref, &status); |
+ return kHandleStatusInvalid == status; |
+} |
+ |
+void TokenHandleUtil::DeleteHandle(const user_manager::UserID& user_id) { |
const base::DictionaryValue* dict = nullptr; |
if (!user_manager_->FindKnownUserPrefs(user_id, &dict)) |
return; |
scoped_ptr<base::DictionaryValue> dict_copy(dict->DeepCopy()); |
- if (!dict_copy->Remove(kTokenHandlePref, nullptr)) |
- return; |
+ dict_copy->Remove(kTokenHandlePref, nullptr); |
+ dict_copy->Remove(kTokenHandleStatusPref, nullptr); |
user_manager_->UpdateKnownUserPrefs(user_id, *dict_copy.get(), |
/* replace values */ true); |
} |
+void TokenHandleUtil::MarkHandleInvalid(const user_manager::UserID& user_id) { |
+ user_manager_->SetKnownUserStringPref(user_id, kTokenHandleStatusPref, |
+ kHandleStatusInvalid); |
+} |
+ |
void TokenHandleUtil::CheckToken(const user_manager::UserID& user_id, |
const TokenValidationCallback& callback) { |
const base::DictionaryValue* dict = nullptr; |