Chromium Code Reviews| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "ash/shell.h" | 10 #include "ash/shell.h" |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 867 | 867 |
| 868 void SigninScreenHandler::OnUserRemoved(const std::string& username, | 868 void SigninScreenHandler::OnUserRemoved(const std::string& username, |
| 869 bool last_user_removed) { | 869 bool last_user_removed) { |
| 870 CallJS("login.AccountPickerScreen.removeUser", username); | 870 CallJS("login.AccountPickerScreen.removeUser", username); |
| 871 if (last_user_removed) | 871 if (last_user_removed) |
| 872 OnShowAddUser(); | 872 OnShowAddUser(); |
| 873 } | 873 } |
| 874 | 874 |
| 875 void SigninScreenHandler::OnUserImageChanged(const user_manager::User& user) { | 875 void SigninScreenHandler::OnUserImageChanged(const user_manager::User& user) { |
| 876 if (page_is_ready()) | 876 if (page_is_ready()) |
| 877 CallJS("login.AccountPickerScreen.updateUserImage", user.email()); | 877 CallJS("login.AccountPickerScreen.updateUserImage", |
| 878 user.GetAccountId().Serialize()); | |
| 878 } | 879 } |
| 879 | 880 |
| 880 void SigninScreenHandler::OnPreferencesChanged() { | 881 void SigninScreenHandler::OnPreferencesChanged() { |
| 881 // Make sure that one of the login UI is fully functional now, otherwise | 882 // Make sure that one of the login UI is fully functional now, otherwise |
| 882 // preferences update would be picked up next time it will be shown. | 883 // preferences update would be picked up next time it will be shown. |
| 883 if (!webui_visible_) { | 884 if (!webui_visible_) { |
| 884 LOG(WARNING) << "Login UI is not active - postponed prefs change."; | 885 LOG(WARNING) << "Login UI is not active - postponed prefs change."; |
| 885 preferences_changed_delayed_ = true; | 886 preferences_changed_delayed_ = true; |
| 886 return; | 887 return; |
| 887 } | 888 } |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 981 // Do not load the extension for the screen locker, see crosbug.com/25018. | 982 // Do not load the extension for the screen locker, see crosbug.com/25018. |
| 982 return !ScreenLocker::default_screen_locker() && | 983 return !ScreenLocker::default_screen_locker() && |
| 983 is_account_picker_showing_first_time_; | 984 is_account_picker_showing_first_time_; |
| 984 } | 985 } |
| 985 | 986 |
| 986 void SigninScreenHandler::UpdateAddButtonStatus() { | 987 void SigninScreenHandler::UpdateAddButtonStatus() { |
| 987 CallJS("cr.ui.login.DisplayManager.updateAddUserButtonStatus", | 988 CallJS("cr.ui.login.DisplayManager.updateAddUserButtonStatus", |
| 988 AllWhitelistedUsersPresent()); | 989 AllWhitelistedUsersPresent()); |
| 989 } | 990 } |
| 990 | 991 |
| 991 void SigninScreenHandler::HandleAuthenticateUser(const std::string& username, | 992 void SigninScreenHandler::HandleAuthenticateUser(const std::string& user_id, |
| 992 const std::string& password) { | 993 const std::string& password) { |
| 993 if (!delegate_) | 994 if (!delegate_) |
| 994 return; | 995 return; |
| 995 UserContext user_context( | 996 AccountId account_id(EmptyAccountId()); |
|
dzhioev (left Google)
2015/11/12 00:46:24
Why default constructor of AccountId doesn't produ
Alexander Alekseev
2015/11/12 06:53:04
To force manual construction. We can change this a
| |
| 996 AccountId::FromUserEmail(gaia::SanitizeEmail(username))); | 997 const bool status = AccountId::Deserialize(user_id, &account_id); |
|
stevenjb
2015/11/11 20:39:23
"user_id" does not imply a JSON dictionary. Use so
Alexander Alekseev
2015/11/12 06:53:04
Done.
| |
| 998 // TODO(alemate): this is used also for offline Gaia. | |
| 999 // Add DCHECK() once migrated. | |
| 1000 if (!status) { | |
| 1001 LOG(WARNING) << "Failed to parse user_id='" << user_id << "'"; | |
| 1002 account_id = AccountId::FromUserEmail(user_id); | |
| 1003 } | |
| 1004 DCHECK_EQ(account_id.GetUserEmail(), | |
| 1005 gaia::SanitizeEmail(account_id.GetUserEmail())); | |
| 1006 | |
| 1007 UserContext user_context(account_id); | |
| 997 user_context.SetKey(Key(password)); | 1008 user_context.SetKey(Key(password)); |
| 998 delegate_->Login(user_context, SigninSpecifics()); | 1009 delegate_->Login(user_context, SigninSpecifics()); |
| 999 } | 1010 } |
| 1000 | 1011 |
| 1001 void SigninScreenHandler::HandleLaunchIncognito() { | 1012 void SigninScreenHandler::HandleLaunchIncognito() { |
| 1002 UserContext context(user_manager::USER_TYPE_GUEST, std::string()); | 1013 UserContext context(user_manager::USER_TYPE_GUEST, std::string()); |
| 1003 if (delegate_) | 1014 if (delegate_) |
| 1004 delegate_->Login(context, SigninSpecifics()); | 1015 delegate_->Login(context, SigninSpecifics()); |
| 1005 } | 1016 } |
| 1006 | 1017 |
| 1007 void SigninScreenHandler::HandleShowSupervisedUserCreationScreen() { | 1018 void SigninScreenHandler::HandleShowSupervisedUserCreationScreen() { |
| 1008 if (!user_manager::UserManager::Get()->AreSupervisedUsersAllowed()) { | 1019 if (!user_manager::UserManager::Get()->AreSupervisedUsersAllowed()) { |
| 1009 LOG(ERROR) << "Managed users not allowed."; | 1020 LOG(ERROR) << "Managed users not allowed."; |
| 1010 return; | 1021 return; |
| 1011 } | 1022 } |
| 1012 LoginDisplayHostImpl::default_host()-> | 1023 LoginDisplayHostImpl::default_host()-> |
| 1013 StartWizard(WizardController::kSupervisedUserCreationScreenName); | 1024 StartWizard(WizardController::kSupervisedUserCreationScreenName); |
| 1014 } | 1025 } |
| 1015 | 1026 |
| 1016 void SigninScreenHandler::HandleLaunchPublicSession( | 1027 void SigninScreenHandler::HandleLaunchPublicSession( |
| 1017 const std::string& user_id, | 1028 const std::string& user_id, |
| 1018 const std::string& locale, | 1029 const std::string& locale, |
| 1019 const std::string& input_method) { | 1030 const std::string& input_method) { |
| 1020 if (!delegate_) | 1031 if (!delegate_) |
| 1021 return; | 1032 return; |
| 1022 | 1033 |
| 1023 UserContext context(user_manager::USER_TYPE_PUBLIC_ACCOUNT, user_id); | 1034 AccountId account_id(EmptyAccountId()); |
| 1035 const bool status = AccountId::Deserialize(user_id, &account_id); | |
| 1036 DCHECK(status) << "Failed to parse user_id='" << user_id << "'"; | |
| 1037 UserContext context(user_manager::USER_TYPE_PUBLIC_ACCOUNT, | |
| 1038 account_id.GetUserEmail()); | |
| 1024 context.SetPublicSessionLocale(locale), | 1039 context.SetPublicSessionLocale(locale), |
| 1025 context.SetPublicSessionInputMethod(input_method); | 1040 context.SetPublicSessionInputMethod(input_method); |
| 1026 delegate_->Login(context, SigninSpecifics()); | 1041 delegate_->Login(context, SigninSpecifics()); |
| 1027 } | 1042 } |
| 1028 | 1043 |
| 1029 void SigninScreenHandler::HandleOfflineLogin(const base::ListValue* args) { | 1044 void SigninScreenHandler::HandleOfflineLogin(const base::ListValue* args) { |
| 1030 if (!delegate_ || delegate_->IsShowUsers()) { | 1045 if (!delegate_ || delegate_->IsShowUsers()) { |
| 1031 NOTREACHED(); | 1046 NOTREACHED(); |
| 1032 return; | 1047 return; |
| 1033 } | 1048 } |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1168 TRACE_EVENT_ASYNC_END0( | 1183 TRACE_EVENT_ASYNC_END0( |
| 1169 "ui", "ShowLoginWebUI", LoginDisplayHostImpl::kShowLoginWebUIid); | 1184 "ui", "ShowLoginWebUI", LoginDisplayHostImpl::kShowLoginWebUIid); |
| 1170 } | 1185 } |
| 1171 webui_visible_ = true; | 1186 webui_visible_ = true; |
| 1172 if (preferences_changed_delayed_) | 1187 if (preferences_changed_delayed_) |
| 1173 OnPreferencesChanged(); | 1188 OnPreferencesChanged(); |
| 1174 } | 1189 } |
| 1175 | 1190 |
| 1176 void SigninScreenHandler::HandleCancelPasswordChangedFlow( | 1191 void SigninScreenHandler::HandleCancelPasswordChangedFlow( |
| 1177 const std::string& user_id) { | 1192 const std::string& user_id) { |
| 1178 if (!user_id.empty()) | 1193 if (!user_id.empty()) { |
| 1179 RecordReauthReason(AccountId::FromUserEmail(user_id), | 1194 AccountId account_id(EmptyAccountId()); |
| 1180 ReauthReason::PASSWORD_UPDATE_SKIPPED); | 1195 const bool status = AccountId::Deserialize(user_id, &account_id); |
| 1196 DCHECK(status) << "Failed to parse user_id='" << user_id << "'"; | |
| 1197 RecordReauthReason(account_id, ReauthReason::PASSWORD_UPDATE_SKIPPED); | |
| 1198 } | |
| 1181 gaia_screen_handler_->StartClearingCookies( | 1199 gaia_screen_handler_->StartClearingCookies( |
| 1182 base::Bind(&SigninScreenHandler::CancelPasswordChangedFlowInternal, | 1200 base::Bind(&SigninScreenHandler::CancelPasswordChangedFlowInternal, |
| 1183 weak_factory_.GetWeakPtr())); | 1201 weak_factory_.GetWeakPtr())); |
| 1184 } | 1202 } |
| 1185 | 1203 |
| 1186 void SigninScreenHandler::HandleCancelUserAdding() { | 1204 void SigninScreenHandler::HandleCancelUserAdding() { |
| 1187 if (delegate_) | 1205 if (delegate_) |
| 1188 delegate_->CancelUserAdding(); | 1206 delegate_->CancelUserAdding(); |
| 1189 } | 1207 } |
| 1190 | 1208 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1229 DCHECK(user_manager::UserManager::Get()->IsUserLoggedIn()); | 1247 DCHECK(user_manager::UserManager::Get()->IsUserLoggedIn()); |
| 1230 if (ScreenLocker::default_screen_locker()) | 1248 if (ScreenLocker::default_screen_locker()) |
| 1231 ScreenLocker::default_screen_locker()->UnlockOnLoginSuccess(); | 1249 ScreenLocker::default_screen_locker()->UnlockOnLoginSuccess(); |
| 1232 } | 1250 } |
| 1233 | 1251 |
| 1234 void SigninScreenHandler::HandleShowLoadingTimeoutError() { | 1252 void SigninScreenHandler::HandleShowLoadingTimeoutError() { |
| 1235 UpdateState(NetworkError::ERROR_REASON_LOADING_TIMEOUT); | 1253 UpdateState(NetworkError::ERROR_REASON_LOADING_TIMEOUT); |
| 1236 } | 1254 } |
| 1237 | 1255 |
| 1238 void SigninScreenHandler::HandleFocusPod(const std::string& user_id) { | 1256 void SigninScreenHandler::HandleFocusPod(const std::string& user_id) { |
| 1239 SetUserInputMethod(user_id, ime_state_.get()); | 1257 AccountId account_id(EmptyAccountId()); |
| 1240 WallpaperManager::Get()->SetUserWallpaperDelayed(user_id); | 1258 const bool status = AccountId::Deserialize(user_id, &account_id); |
| 1241 proximity_auth::ScreenlockBridge::Get()->SetFocusedUser(user_id); | 1259 DCHECK(status) << "Failed to parse user_id='" << user_id << "'"; |
| 1260 SetUserInputMethod(account_id.GetUserEmail(), ime_state_.get()); | |
| 1261 WallpaperManager::Get()->SetUserWallpaperDelayed(account_id.GetUserEmail()); | |
| 1262 proximity_auth::ScreenlockBridge::Get()->SetFocusedUser( | |
| 1263 account_id.GetUserEmail()); | |
| 1242 if (delegate_) | 1264 if (delegate_) |
| 1243 delegate_->CheckUserStatus(user_id); | 1265 delegate_->CheckUserStatus(account_id.GetUserEmail()); |
| 1244 if (!test_focus_pod_callback_.is_null()) | 1266 if (!test_focus_pod_callback_.is_null()) |
| 1245 test_focus_pod_callback_.Run(); | 1267 test_focus_pod_callback_.Run(); |
| 1246 | 1268 |
| 1247 bool use_24hour_clock = false; | 1269 bool use_24hour_clock = false; |
| 1248 if (user_manager::UserManager::Get()->GetKnownUserBooleanPref( | 1270 if (user_manager::UserManager::Get()->GetKnownUserBooleanPref( |
| 1249 AccountId::FromUserEmail(user_id), prefs::kUse24HourClock, | 1271 account_id, prefs::kUse24HourClock, &use_24hour_clock)) { |
| 1250 &use_24hour_clock)) { | |
| 1251 g_browser_process->platform_part() | 1272 g_browser_process->platform_part() |
| 1252 ->GetSystemClock() | 1273 ->GetSystemClock() |
| 1253 ->SetLastFocusedPodHourClockType(use_24hour_clock ? base::k24HourClock | 1274 ->SetLastFocusedPodHourClockType(use_24hour_clock ? base::k24HourClock |
| 1254 : base::k12HourClock); | 1275 : base::k12HourClock); |
| 1255 } | 1276 } |
| 1256 } | 1277 } |
| 1257 | 1278 |
| 1258 void SigninScreenHandler::HandleGetPublicSessionKeyboardLayouts( | 1279 void SigninScreenHandler::HandleGetPublicSessionKeyboardLayouts( |
| 1259 const std::string& user_id, | 1280 const std::string& user_id, |
| 1260 const std::string& locale) { | 1281 const std::string& locale) { |
| 1282 AccountId account_id(EmptyAccountId()); | |
| 1283 const bool status = AccountId::Deserialize(user_id, &account_id); | |
| 1284 DCHECK(status) << "Failed to parse user_id='" << user_id << "'"; | |
| 1261 GetKeyboardLayoutsForLocale( | 1285 GetKeyboardLayoutsForLocale( |
| 1262 base::Bind(&SigninScreenHandler::SendPublicSessionKeyboardLayouts, | 1286 base::Bind(&SigninScreenHandler::SendPublicSessionKeyboardLayouts, |
| 1263 weak_factory_.GetWeakPtr(), | 1287 weak_factory_.GetWeakPtr(), account_id, locale), |
| 1264 user_id, | |
| 1265 locale), | |
| 1266 locale); | 1288 locale); |
| 1267 } | 1289 } |
| 1268 | 1290 |
| 1269 void SigninScreenHandler::SendPublicSessionKeyboardLayouts( | 1291 void SigninScreenHandler::SendPublicSessionKeyboardLayouts( |
| 1270 const std::string& user_id, | 1292 const AccountId& account_id, |
| 1271 const std::string& locale, | 1293 const std::string& locale, |
| 1272 scoped_ptr<base::ListValue> keyboard_layouts) { | 1294 scoped_ptr<base::ListValue> keyboard_layouts) { |
| 1273 CallJS("login.AccountPickerScreen.setPublicSessionKeyboardLayouts", | 1295 CallJS("login.AccountPickerScreen.setPublicSessionKeyboardLayouts", |
| 1274 user_id, | 1296 account_id.Serialize(), locale, *keyboard_layouts); |
| 1275 locale, | |
| 1276 *keyboard_layouts); | |
| 1277 } | 1297 } |
| 1278 | 1298 |
| 1279 void SigninScreenHandler::HandleLaunchKioskApp(const std::string& app_id, | 1299 void SigninScreenHandler::HandleLaunchKioskApp(const std::string& app_id, |
| 1280 bool diagnostic_mode) { | 1300 bool diagnostic_mode) { |
| 1281 UserContext context(user_manager::USER_TYPE_KIOSK_APP, app_id); | 1301 AccountId account_id(EmptyAccountId()); |
| 1302 const bool status = AccountId::Deserialize(app_id, &account_id); | |
| 1303 DCHECK(status) << "Failed to parse app_id='" << app_id << "'"; | |
| 1304 UserContext context(user_manager::USER_TYPE_KIOSK_APP, | |
| 1305 account_id.GetUserEmail()); | |
| 1282 SigninSpecifics specifics; | 1306 SigninSpecifics specifics; |
| 1283 specifics.kiosk_diagnostic_mode = diagnostic_mode; | 1307 specifics.kiosk_diagnostic_mode = diagnostic_mode; |
| 1284 if (delegate_) | 1308 if (delegate_) |
| 1285 delegate_->Login(context, specifics); | 1309 delegate_->Login(context, specifics); |
| 1286 } | 1310 } |
| 1287 | 1311 |
| 1288 void SigninScreenHandler::HandleCancelConsumerManagementEnrollment() { | 1312 void SigninScreenHandler::HandleCancelConsumerManagementEnrollment() { |
| 1289 policy::ConsumerManagementService* consumer_management = | 1313 policy::ConsumerManagementService* consumer_management = |
| 1290 g_browser_process->platform_part()->browser_policy_connector_chromeos()-> | 1314 g_browser_process->platform_part()->browser_policy_connector_chromeos()-> |
| 1291 GetConsumerManagementService(); | 1315 GetConsumerManagementService(); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 1302 max_mode_delegate_->IsMaximizeModeEnabled()); | 1326 max_mode_delegate_->IsMaximizeModeEnabled()); |
| 1303 } | 1327 } |
| 1304 } | 1328 } |
| 1305 | 1329 |
| 1306 void SigninScreenHandler::HandleLogRemoveUserWarningShown() { | 1330 void SigninScreenHandler::HandleLogRemoveUserWarningShown() { |
| 1307 ProfileMetrics::LogProfileDeleteUser( | 1331 ProfileMetrics::LogProfileDeleteUser( |
| 1308 ProfileMetrics::DELETE_PROFILE_USER_MANAGER_SHOW_WARNING); | 1332 ProfileMetrics::DELETE_PROFILE_USER_MANAGER_SHOW_WARNING); |
| 1309 } | 1333 } |
| 1310 | 1334 |
| 1311 void SigninScreenHandler::HandleFirstIncorrectPasswordAttempt( | 1335 void SigninScreenHandler::HandleFirstIncorrectPasswordAttempt( |
| 1312 const std::string& email) { | 1336 const std::string& user_id) { |
| 1313 // TODO(ginkage): Fix this case once crbug.com/469987 is ready. | 1337 // TODO(ginkage): Fix this case once crbug.com/469987 is ready. |
| 1314 /* | 1338 /* |
| 1315 if (user_manager::UserManager::Get()->FindUsingSAML(email)) | 1339 if (user_manager::UserManager::Get()->FindUsingSAML(email)) |
| 1316 RecordReauthReason(email, ReauthReason::INCORRECT_SAML_PASSWORD_ENTERED); | 1340 RecordReauthReason(email, ReauthReason::INCORRECT_SAML_PASSWORD_ENTERED); |
| 1317 */ | 1341 */ |
| 1318 } | 1342 } |
| 1319 | 1343 |
| 1320 void SigninScreenHandler::HandleMaxIncorrectPasswordAttempts( | 1344 void SigninScreenHandler::HandleMaxIncorrectPasswordAttempts( |
| 1321 const std::string& email) { | 1345 const std::string& user_id) { |
| 1322 RecordReauthReason(AccountId::FromUserEmail(email), | 1346 AccountId account_id(EmptyAccountId()); |
| 1323 ReauthReason::INCORRECT_PASSWORD_ENTERED); | 1347 const bool status = AccountId::Deserialize(user_id, &account_id); |
| 1348 DCHECK(status) << "Failed to parse user_id='" << user_id << "'"; | |
| 1349 RecordReauthReason(account_id, ReauthReason::INCORRECT_PASSWORD_ENTERED); | |
| 1324 } | 1350 } |
| 1325 | 1351 |
| 1326 bool SigninScreenHandler::AllWhitelistedUsersPresent() { | 1352 bool SigninScreenHandler::AllWhitelistedUsersPresent() { |
| 1327 CrosSettings* cros_settings = CrosSettings::Get(); | 1353 CrosSettings* cros_settings = CrosSettings::Get(); |
| 1328 bool allow_new_user = false; | 1354 bool allow_new_user = false; |
| 1329 cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); | 1355 cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); |
| 1330 if (allow_new_user) | 1356 if (allow_new_user) |
| 1331 return false; | 1357 return false; |
| 1332 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); | 1358 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); |
| 1333 const user_manager::UserList& users = user_manager->GetUsers(); | 1359 const user_manager::UserList& users = user_manager->GetUsers(); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1412 return gaia_screen_handler_->frame_error(); | 1438 return gaia_screen_handler_->frame_error(); |
| 1413 } | 1439 } |
| 1414 | 1440 |
| 1415 void SigninScreenHandler::OnCapsLockChanged(bool enabled) { | 1441 void SigninScreenHandler::OnCapsLockChanged(bool enabled) { |
| 1416 caps_lock_enabled_ = enabled; | 1442 caps_lock_enabled_ = enabled; |
| 1417 if (page_is_ready()) | 1443 if (page_is_ready()) |
| 1418 CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_); | 1444 CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_); |
| 1419 } | 1445 } |
| 1420 | 1446 |
| 1421 } // namespace chromeos | 1447 } // namespace chromeos |
| OLD | NEW |