OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" | 5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <vector> | 10 #include <vector> |
(...skipping 22 matching lines...) Expand all Loading... |
33 #include "chrome/browser/browser_process_platform_part_chromeos.h" | 33 #include "chrome/browser/browser_process_platform_part_chromeos.h" |
34 #include "chrome/browser/browser_shutdown.h" | 34 #include "chrome/browser/browser_shutdown.h" |
35 #include "chrome/browser/chrome_notification_types.h" | 35 #include "chrome/browser/chrome_notification_types.h" |
36 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" | 36 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" |
37 #include "chrome/browser/chromeos/language_preferences.h" | 37 #include "chrome/browser/chromeos/language_preferences.h" |
38 #include "chrome/browser/chromeos/lock_screen_apps/state_controller.h" | 38 #include "chrome/browser/chromeos/lock_screen_apps/state_controller.h" |
39 #include "chrome/browser/chromeos/login/error_screens_histogram_helper.h" | 39 #include "chrome/browser/chromeos/login/error_screens_histogram_helper.h" |
40 #include "chrome/browser/chromeos/login/hwid_checker.h" | 40 #include "chrome/browser/chromeos/login/hwid_checker.h" |
41 #include "chrome/browser/chromeos/login/lock/screen_locker.h" | 41 #include "chrome/browser/chromeos/login/lock/screen_locker.h" |
42 #include "chrome/browser/chromeos/login/lock/webui_screen_locker.h" | 42 #include "chrome/browser/chromeos/login/lock/webui_screen_locker.h" |
| 43 #include "chrome/browser/chromeos/login/quick_unlock/pin_backend.h" |
43 #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_factory.h" | 44 #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_factory.h" |
44 #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_storage.h" | 45 #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_storage.h" |
45 #include "chrome/browser/chromeos/login/reauth_stats.h" | 46 #include "chrome/browser/chromeos/login/reauth_stats.h" |
46 #include "chrome/browser/chromeos/login/screens/core_oobe_view.h" | 47 #include "chrome/browser/chromeos/login/screens/core_oobe_view.h" |
47 #include "chrome/browser/chromeos/login/screens/network_error.h" | 48 #include "chrome/browser/chromeos/login/screens/network_error.h" |
48 #include "chrome/browser/chromeos/login/startup_utils.h" | 49 #include "chrome/browser/chromeos/login/startup_utils.h" |
49 #include "chrome/browser/chromeos/login/ui/login_display_host.h" | 50 #include "chrome/browser/chromeos/login/ui/login_display_host.h" |
50 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" | 51 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
51 #include "chrome/browser/chromeos/login/ui/login_feedback.h" | 52 #include "chrome/browser/chromeos/login/ui/login_feedback.h" |
52 #include "chrome/browser/chromeos/login/ui/webui_login_display.h" | 53 #include "chrome/browser/chromeos/login/ui/webui_login_display.h" |
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
727 | 728 |
728 // Reset Caps Lock state when login screen is shown. | 729 // Reset Caps Lock state when login screen is shown. |
729 input_method::InputMethodManager::Get() | 730 input_method::InputMethodManager::Get() |
730 ->GetImeKeyboard() | 731 ->GetImeKeyboard() |
731 ->SetCapsLockEnabled(false); | 732 ->SetCapsLockEnabled(false); |
732 | 733 |
733 base::DictionaryValue params; | 734 base::DictionaryValue params; |
734 params.SetBoolean("disableAddUser", AllWhitelistedUsersPresent()); | 735 params.SetBoolean("disableAddUser", AllWhitelistedUsersPresent()); |
735 UpdateUIState(UI_STATE_ACCOUNT_PICKER, ¶ms); | 736 UpdateUIState(UI_STATE_ACCOUNT_PICKER, ¶ms); |
736 } | 737 } |
737 | |
738 // Enable pin for any users who can use it. | |
739 if (user_manager::UserManager::IsInitialized()) { | |
740 for (user_manager::User* user : | |
741 user_manager::UserManager::Get()->GetLoggedInUsers()) { | |
742 UpdatePinKeyboardState(user->GetAccountId()); | |
743 } | |
744 } | |
745 } | 738 } |
746 | 739 |
747 void SigninScreenHandler::UpdateUIState(UIState ui_state, | 740 void SigninScreenHandler::UpdateUIState(UIState ui_state, |
748 base::DictionaryValue* params) { | 741 base::DictionaryValue* params) { |
749 switch (ui_state) { | 742 switch (ui_state) { |
750 case UI_STATE_GAIA_SIGNIN: | 743 case UI_STATE_GAIA_SIGNIN: |
751 ui_state_ = UI_STATE_GAIA_SIGNIN; | 744 ui_state_ = UI_STATE_GAIA_SIGNIN; |
752 ShowScreenWithData(OobeScreen::SCREEN_GAIA_SIGNIN, params); | 745 ShowScreenWithData(OobeScreen::SCREEN_GAIA_SIGNIN, params); |
753 break; | 746 break; |
754 case UI_STATE_ACCOUNT_PICKER: | 747 case UI_STATE_ACCOUNT_PICKER: |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
970 // Forces a reload for Gaia screen on hiding error message. | 963 // Forces a reload for Gaia screen on hiding error message. |
971 if (IsGaiaVisible() || IsGaiaHiddenByError()) | 964 if (IsGaiaVisible() || IsGaiaHiddenByError()) |
972 ReloadGaia(reason == NetworkError::ERROR_REASON_NETWORK_STATE_CHANGED); | 965 ReloadGaia(reason == NetworkError::ERROR_REASON_NETWORK_STATE_CHANGED); |
973 } | 966 } |
974 | 967 |
975 void SigninScreenHandler::ReloadGaia(bool force_reload) { | 968 void SigninScreenHandler::ReloadGaia(bool force_reload) { |
976 gaia_screen_handler_->ReloadGaia(force_reload); | 969 gaia_screen_handler_->ReloadGaia(force_reload); |
977 } | 970 } |
978 | 971 |
979 void SigninScreenHandler::Initialize() { | 972 void SigninScreenHandler::Initialize() { |
980 // Preload PIN keyboard if any of the users can authenticate via PIN. | 973 // Preload pin keyboard if any of the users can authenticate via pin. |
981 if (user_manager::UserManager::IsInitialized()) { | 974 if (user_manager::UserManager::IsInitialized()) { |
982 for (user_manager::User* user : | 975 for (user_manager::User* user : |
983 user_manager::UserManager::Get()->GetUnlockUsers()) { | 976 user_manager::UserManager::Get()->GetUnlockUsers()) { |
984 chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage = | 977 chromeos::quick_unlock::PinBackend::CanAuthenticate( |
985 chromeos::quick_unlock::QuickUnlockFactory::GetForUser(user); | 978 user->GetAccountId(), |
986 if (quick_unlock_storage && | 979 base::Bind(&SigninScreenHandler::PreloadPinKeyboardCallback, |
987 quick_unlock_storage->IsPinAuthenticationAvailable()) { | 980 weak_factory_.GetWeakPtr())); |
988 CallJS("cr.ui.Oobe.preloadPinKeyboard"); | |
989 break; | |
990 } | |
991 } | 981 } |
992 } | 982 } |
993 | 983 |
994 // |delegate_| is null when we are preloading the lock screen. | 984 // |delegate_| is null when we are preloading the lock screen. |
995 if (delegate_ && show_on_init_) { | 985 if (delegate_ && show_on_init_) { |
996 show_on_init_ = false; | 986 show_on_init_ = false; |
997 ShowImpl(); | 987 ShowImpl(); |
998 } | 988 } |
999 } | 989 } |
1000 | 990 |
(...skipping 21 matching lines...) Expand all Loading... |
1022 | 1012 |
1023 void SigninScreenHandler::ClearUserPodPassword() { | 1013 void SigninScreenHandler::ClearUserPodPassword() { |
1024 core_oobe_view_->ClearUserPodPassword(); | 1014 core_oobe_view_->ClearUserPodPassword(); |
1025 } | 1015 } |
1026 | 1016 |
1027 void SigninScreenHandler::RefocusCurrentPod() { | 1017 void SigninScreenHandler::RefocusCurrentPod() { |
1028 core_oobe_view_->RefocusCurrentPod(); | 1018 core_oobe_view_->RefocusCurrentPod(); |
1029 } | 1019 } |
1030 | 1020 |
1031 void SigninScreenHandler::UpdatePinKeyboardState(const AccountId& account_id) { | 1021 void SigninScreenHandler::UpdatePinKeyboardState(const AccountId& account_id) { |
1032 chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage = | 1022 chromeos::quick_unlock::PinBackend::CanAuthenticate( |
1033 chromeos::quick_unlock::QuickUnlockFactory::GetForAccountId(account_id); | 1023 account_id, |
1034 if (!quick_unlock_storage) | 1024 base::Bind(&SigninScreenHandler::UpdatePinKeyboardStateCallback, |
1035 return; | 1025 weak_factory_.GetWeakPtr(), account_id)); |
| 1026 } |
1036 | 1027 |
1037 bool is_enabled = quick_unlock_storage->IsPinAuthenticationAvailable(); | 1028 void SigninScreenHandler::UpdatePinKeyboardStateCallback( |
| 1029 const AccountId& account_id, |
| 1030 bool is_enabled) { |
1038 CallJS("login.AccountPickerScreen.setPinEnabledForUser", account_id, | 1031 CallJS("login.AccountPickerScreen.setPinEnabledForUser", account_id, |
1039 is_enabled); | 1032 is_enabled); |
1040 } | 1033 } |
1041 | 1034 |
| 1035 void SigninScreenHandler::PreloadPinKeyboardCallback(bool should_enabled) { |
| 1036 if (should_enabled) |
| 1037 CallJS("cr.ui.Oobe.preloadPinKeyboard"); |
| 1038 } |
| 1039 |
1042 void SigninScreenHandler::OnUserRemoved(const AccountId& account_id, | 1040 void SigninScreenHandler::OnUserRemoved(const AccountId& account_id, |
1043 bool last_user_removed) { | 1041 bool last_user_removed) { |
1044 CallJS("login.AccountPickerScreen.removeUser", account_id); | 1042 CallJS("login.AccountPickerScreen.removeUser", account_id); |
1045 if (last_user_removed) | 1043 if (last_user_removed) |
1046 OnShowAddUser(); | 1044 OnShowAddUser(); |
1047 } | 1045 } |
1048 | 1046 |
1049 void SigninScreenHandler::OnUserImageChanged(const user_manager::User& user) { | 1047 void SigninScreenHandler::OnUserImageChanged(const user_manager::User& user) { |
1050 if (page_is_ready()) { | 1048 if (page_is_ready()) { |
1051 CallJSOrDefer("login.AccountPickerScreen.updateUserImage", | 1049 CallJSOrDefer("login.AccountPickerScreen.updateUserImage", |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1204 AllWhitelistedUsersPresent()); | 1202 AllWhitelistedUsersPresent()); |
1205 } | 1203 } |
1206 | 1204 |
1207 void SigninScreenHandler::HandleAuthenticateUser(const AccountId& account_id, | 1205 void SigninScreenHandler::HandleAuthenticateUser(const AccountId& account_id, |
1208 const std::string& password, | 1206 const std::string& password, |
1209 bool authenticated_by_pin) { | 1207 bool authenticated_by_pin) { |
1210 if (!delegate_) | 1208 if (!delegate_) |
1211 return; | 1209 return; |
1212 DCHECK_EQ(account_id.GetUserEmail(), | 1210 DCHECK_EQ(account_id.GetUserEmail(), |
1213 gaia::SanitizeEmail(account_id.GetUserEmail())); | 1211 gaia::SanitizeEmail(account_id.GetUserEmail())); |
1214 chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage = | |
1215 chromeos::quick_unlock::QuickUnlockFactory::GetForAccountId(account_id); | |
1216 // If pin storage is unavailable, authenticated by PIN must be false. | |
1217 DCHECK(!quick_unlock_storage || | |
1218 quick_unlock_storage->IsPinAuthenticationAvailable() || | |
1219 !authenticated_by_pin); | |
1220 | 1212 |
1221 UserContext user_context(account_id); | 1213 UserContext user_context(account_id); |
1222 user_context.SetKey(Key(password)); | 1214 user_context.SetKey(Key(password)); |
1223 user_context.SetIsUsingPin(authenticated_by_pin); | 1215 user_context.SetIsUsingPin(authenticated_by_pin); |
1224 if (account_id.GetAccountType() == AccountType::ACTIVE_DIRECTORY) | 1216 if (account_id.GetAccountType() == AccountType::ACTIVE_DIRECTORY) |
1225 user_context.SetUserType(user_manager::USER_TYPE_ACTIVE_DIRECTORY); | 1217 user_context.SetUserType(user_manager::USER_TYPE_ACTIVE_DIRECTORY); |
1226 delegate_->Login(user_context, SigninSpecifics()); | 1218 delegate_->Login(user_context, SigninSpecifics()); |
1227 | 1219 |
1228 UpdatePinKeyboardState(account_id); | 1220 UpdatePinKeyboardState(account_id); |
1229 } | 1221 } |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1336 policy::BrowserPolicyConnectorChromeOS* connector = | 1328 policy::BrowserPolicyConnectorChromeOS* connector = |
1337 g_browser_process->platform_part()->browser_policy_connector_chromeos(); | 1329 g_browser_process->platform_part()->browser_policy_connector_chromeos(); |
1338 if (delegate_ && !connector->IsEnterpriseManaged()) | 1330 if (delegate_ && !connector->IsEnterpriseManaged()) |
1339 delegate_->ShowKioskAutolaunchScreen(); | 1331 delegate_->ShowKioskAutolaunchScreen(); |
1340 } | 1332 } |
1341 | 1333 |
1342 void SigninScreenHandler::LoadUsers(const user_manager::UserList& users, | 1334 void SigninScreenHandler::LoadUsers(const user_manager::UserList& users, |
1343 const base::ListValue& users_list) { | 1335 const base::ListValue& users_list) { |
1344 CallJSOrDefer("login.AccountPickerScreen.loadUsers", users_list, | 1336 CallJSOrDefer("login.AccountPickerScreen.loadUsers", users_list, |
1345 delegate_->IsShowGuest()); | 1337 delegate_->IsShowGuest()); |
| 1338 |
| 1339 // Enable pin for any users who can use it. |
| 1340 // TODO(jdufault): Cache pin state (in storage accessible in login) so we |
| 1341 // don't need to requery cryptohome every time we show login. See |
| 1342 // crbug.com/721938. |
| 1343 for (user_manager::User* user : users) |
| 1344 UpdatePinKeyboardState(user->GetAccountId()); |
1346 } | 1345 } |
1347 | 1346 |
1348 void SigninScreenHandler::HandleAccountPickerReady() { | 1347 void SigninScreenHandler::HandleAccountPickerReady() { |
1349 VLOG(0) << "Login WebUI >> AccountPickerReady"; | 1348 VLOG(0) << "Login WebUI >> AccountPickerReady"; |
1350 | 1349 |
1351 if (delegate_ && !ScreenLocker::default_screen_locker() && | 1350 if (delegate_ && !ScreenLocker::default_screen_locker() && |
1352 !chromeos::IsMachineHWIDCorrect() && | 1351 !chromeos::IsMachineHWIDCorrect() && |
1353 !oobe_ui_) { | 1352 !oobe_ui_) { |
1354 delegate_->ShowWrongHWIDScreen(); | 1353 delegate_->ShowWrongHWIDScreen(); |
1355 return; | 1354 return; |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1706 rate.initial_delay_in_ms = auto_repeat_delay; | 1705 rate.initial_delay_in_ms = auto_repeat_delay; |
1707 rate.repeat_interval_in_ms = auto_repeat_interval; | 1706 rate.repeat_interval_in_ms = auto_repeat_interval; |
1708 input_method::InputMethodManager::Get() | 1707 input_method::InputMethodManager::Get() |
1709 ->GetImeKeyboard() | 1708 ->GetImeKeyboard() |
1710 ->SetAutoRepeatEnabled(true); | 1709 ->SetAutoRepeatEnabled(true); |
1711 input_method::InputMethodManager::Get()->GetImeKeyboard()->SetAutoRepeatRate( | 1710 input_method::InputMethodManager::Get()->GetImeKeyboard()->SetAutoRepeatRate( |
1712 rate); | 1711 rate); |
1713 } | 1712 } |
1714 | 1713 |
1715 } // namespace chromeos | 1714 } // namespace chromeos |
OLD | NEW |