| Index: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
|
| diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
|
| index 902da5a07a7c574a3b4fed9dfbd680c0f7247e66..4f280de1fd671496a250aae702814c449c81bbad 100644
|
| --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
|
| +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
|
| @@ -40,6 +40,7 @@
|
| #include "chrome/browser/chromeos/login/hwid_checker.h"
|
| #include "chrome/browser/chromeos/login/lock/screen_locker.h"
|
| #include "chrome/browser/chromeos/login/lock/webui_screen_locker.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/reauth_stats.h"
|
| @@ -734,14 +735,6 @@ void SigninScreenHandler::ShowImpl() {
|
| params.SetBoolean("disableAddUser", AllWhitelistedUsersPresent());
|
| UpdateUIState(UI_STATE_ACCOUNT_PICKER, ¶ms);
|
| }
|
| -
|
| - // Enable pin for any users who can use it.
|
| - if (user_manager::UserManager::IsInitialized()) {
|
| - for (user_manager::User* user :
|
| - user_manager::UserManager::Get()->GetLoggedInUsers()) {
|
| - UpdatePinKeyboardState(user->GetAccountId());
|
| - }
|
| - }
|
| }
|
|
|
| void SigninScreenHandler::UpdateUIState(UIState ui_state,
|
| @@ -977,17 +970,14 @@ void SigninScreenHandler::ReloadGaia(bool force_reload) {
|
| }
|
|
|
| void SigninScreenHandler::Initialize() {
|
| - // Preload PIN keyboard if any of the users can authenticate via PIN.
|
| + // Preload pin keyboard if any of the users can authenticate via pin.
|
| if (user_manager::UserManager::IsInitialized()) {
|
| for (user_manager::User* user :
|
| user_manager::UserManager::Get()->GetUnlockUsers()) {
|
| - chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage =
|
| - chromeos::quick_unlock::QuickUnlockFactory::GetForUser(user);
|
| - if (quick_unlock_storage &&
|
| - quick_unlock_storage->IsPinAuthenticationAvailable()) {
|
| - CallJS("cr.ui.Oobe.preloadPinKeyboard");
|
| - break;
|
| - }
|
| + chromeos::quick_unlock::PinBackend::CanAuthenticate(
|
| + user->GetAccountId(),
|
| + base::Bind(&SigninScreenHandler::PreloadPinKeyboardCallback,
|
| + weak_factory_.GetWeakPtr()));
|
| }
|
| }
|
|
|
| @@ -1029,16 +1019,24 @@ void SigninScreenHandler::RefocusCurrentPod() {
|
| }
|
|
|
| void SigninScreenHandler::UpdatePinKeyboardState(const AccountId& account_id) {
|
| - chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage =
|
| - chromeos::quick_unlock::QuickUnlockFactory::GetForAccountId(account_id);
|
| - if (!quick_unlock_storage)
|
| - return;
|
| + chromeos::quick_unlock::PinBackend::CanAuthenticate(
|
| + account_id,
|
| + base::Bind(&SigninScreenHandler::UpdatePinKeyboardStateCallback,
|
| + weak_factory_.GetWeakPtr(), account_id));
|
| +}
|
|
|
| - bool is_enabled = quick_unlock_storage->IsPinAuthenticationAvailable();
|
| +void SigninScreenHandler::UpdatePinKeyboardStateCallback(
|
| + const AccountId& account_id,
|
| + bool is_enabled) {
|
| CallJS("login.AccountPickerScreen.setPinEnabledForUser", account_id,
|
| is_enabled);
|
| }
|
|
|
| +void SigninScreenHandler::PreloadPinKeyboardCallback(bool should_enabled) {
|
| + if (should_enabled)
|
| + CallJS("cr.ui.Oobe.preloadPinKeyboard");
|
| +}
|
| +
|
| void SigninScreenHandler::OnUserRemoved(const AccountId& account_id,
|
| bool last_user_removed) {
|
| CallJS("login.AccountPickerScreen.removeUser", account_id);
|
| @@ -1211,12 +1209,6 @@ void SigninScreenHandler::HandleAuthenticateUser(const AccountId& account_id,
|
| return;
|
| DCHECK_EQ(account_id.GetUserEmail(),
|
| gaia::SanitizeEmail(account_id.GetUserEmail()));
|
| - chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage =
|
| - chromeos::quick_unlock::QuickUnlockFactory::GetForAccountId(account_id);
|
| - // If pin storage is unavailable, authenticated by PIN must be false.
|
| - DCHECK(!quick_unlock_storage ||
|
| - quick_unlock_storage->IsPinAuthenticationAvailable() ||
|
| - !authenticated_by_pin);
|
|
|
| UserContext user_context(account_id);
|
| user_context.SetKey(Key(password));
|
| @@ -1343,6 +1335,13 @@ void SigninScreenHandler::LoadUsers(const user_manager::UserList& users,
|
| const base::ListValue& users_list) {
|
| CallJSOrDefer("login.AccountPickerScreen.loadUsers", users_list,
|
| delegate_->IsShowGuest());
|
| +
|
| + // Enable pin for any users who can use it.
|
| + // TODO(jdufault): Cache pin state (in storage accessible in login) so we
|
| + // don't need to requery cryptohome every time we show login. See
|
| + // crbug.com/721938.
|
| + for (user_manager::User* user : users)
|
| + UpdatePinKeyboardState(user->GetAccountId());
|
| }
|
|
|
| void SigninScreenHandler::HandleAccountPickerReady() {
|
|
|