Index: chrome/browser/chromeos/login/lock/screen_locker.cc |
diff --git a/chrome/browser/chromeos/login/lock/screen_locker.cc b/chrome/browser/chromeos/login/lock/screen_locker.cc |
index 7e1a29aa46ee77b9d397d6552773a70e69d1a8c7..50091b243aba329aed993b1a6bf6b1a5b77a6c06 100644 |
--- a/chrome/browser/chromeos/login/lock/screen_locker.cc |
+++ b/chrome/browser/chromeos/login/lock/screen_locker.cc |
@@ -30,6 +30,8 @@ |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" |
#include "chrome/browser/chromeos/login/lock/webui_screen_locker.h" |
+#include "chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.h" |
+#include "chrome/browser/chromeos/login/quick_unlock/pin_backend.h" |
#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_factory.h" |
#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_storage.h" |
#include "chrome/browser/chromeos/login/session/user_session_manager.h" |
@@ -326,10 +328,10 @@ void ScreenLocker::OnAuthSuccess(const UserContext& user_context) { |
// 2. If the user signed in with cryptohome keys, then the PIN timeout is |
// going to be reset as well, so it is safe to reset the unlock attempt |
// count. |
+ quick_unlock::PinBackend::NotifyAuthentication(user_context.GetAccountId()); |
quick_unlock::QuickUnlockStorage* quick_unlock_storage = |
quick_unlock::QuickUnlockFactory::GetForUser(user); |
if (quick_unlock_storage) { |
- quick_unlock_storage->pin_storage()->ResetUnlockAttemptCount(); |
quick_unlock_storage->fingerprint_storage()->ResetUnlockAttemptCount(); |
} |
@@ -397,15 +399,29 @@ void ScreenLocker::Authenticate(const UserContext& user_context) { |
int dummy_value; |
if (unlock_attempt_type_ == AUTH_PIN && |
base::StringToInt(pin, &dummy_value)) { |
- quick_unlock::QuickUnlockStorage* quick_unlock_storage = |
- quick_unlock::QuickUnlockFactory::GetForUser(user); |
- if (quick_unlock_storage && |
- quick_unlock_storage->TryAuthenticatePin(pin)) { |
- OnAuthSuccess(user_context); |
- return; |
- } |
+ quick_unlock::PinBackend::TryAuthenticate( |
+ user_context.GetAccountId(), pin, |
+ base::Bind(&ScreenLocker::OnPinAttemptDone, |
+ weak_factory_.GetWeakPtr(), user_context)); |
+ return; |
} |
+ } |
+ |
+ ContinueAuthenticate(user_context); |
+} |
+ |
+void ScreenLocker::OnPinAttemptDone(const UserContext& user_context, |
+ bool success) { |
+ if (success) |
+ OnAuthSuccess(user_context); |
+ else |
+ ContinueAuthenticate(user_context); |
+} |
+void ScreenLocker::ContinueAuthenticate( |
+ const chromeos::UserContext& user_context) { |
+ const user_manager::User* user = FindUnlockUser(user_context.GetAccountId()); |
+ if (user) { |
// Special case: supervised users. Use special authenticator. |
if (user->GetType() == user_manager::USER_TYPE_SUPERVISED) { |
UserContext updated_context = ChromeUserManager::Get() |