| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/chromeos/login/screens/user_selection_screen.h" | 5 #include "chrome/browser/chromeos/login/screens/user_selection_screen.h" |
| 6 | 6 |
| 7 #include "base/location.h" | 7 #include "base/location.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 // At this point the reason for invalid token should be already set. If not, | 239 // At this point the reason for invalid token should be already set. If not, |
| 240 // this might be a leftover from an old version. | 240 // this might be a leftover from an old version. |
| 241 if (token_status == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID) | 241 if (token_status == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID) |
| 242 RecordReauthReason(user->GetAccountId(), ReauthReason::OTHER); | 242 RecordReauthReason(user->GetAccountId(), ReauthReason::OTHER); |
| 243 | 243 |
| 244 return user->force_online_signin() || | 244 return user->force_online_signin() || |
| 245 (token_status == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID) || | 245 (token_status == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID) || |
| 246 (token_status == user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN); | 246 (token_status == user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN); |
| 247 } | 247 } |
| 248 | 248 |
| 249 // static | |
| 250 AccountId UserSelectionScreen::GetAccountIdOfKnownUser( | |
| 251 const std::string& user_id) { | |
| 252 if (user_id.empty()) | |
| 253 return EmptyAccountId(); | |
| 254 | |
| 255 const AccountId initial_account_id = AccountId::FromUserEmail(user_id); | |
| 256 | |
| 257 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); | |
| 258 if (!user_manager) | |
| 259 return initial_account_id; | |
| 260 | |
| 261 AccountId known_account_id(EmptyAccountId()); | |
| 262 if (user_manager->GetKnownUserAccountId(initial_account_id, | |
| 263 &known_account_id)) | |
| 264 return known_account_id; | |
| 265 | |
| 266 return initial_account_id; | |
| 267 } | |
| 268 | |
| 269 void UserSelectionScreen::SetHandler(LoginDisplayWebUIHandler* handler) { | 249 void UserSelectionScreen::SetHandler(LoginDisplayWebUIHandler* handler) { |
| 270 handler_ = handler; | 250 handler_ = handler; |
| 271 } | 251 } |
| 272 | 252 |
| 273 void UserSelectionScreen::SetView(UserBoardView* view) { | 253 void UserSelectionScreen::SetView(UserBoardView* view) { |
| 274 view_ = view; | 254 view_ = view; |
| 275 } | 255 } |
| 276 | 256 |
| 277 void UserSelectionScreen::Init(const user_manager::UserList& users, | 257 void UserSelectionScreen::Init(const user_manager::UserList& users, |
| 278 bool show_guest) { | 258 bool show_guest) { |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 base::ListValue users_list; | 342 base::ListValue users_list; |
| 363 | 343 |
| 364 // TODO(nkostylev): Move to a separate method in UserManager. | 344 // TODO(nkostylev): Move to a separate method in UserManager. |
| 365 // http://crbug.com/230852 | 345 // http://crbug.com/230852 |
| 366 bool single_user = users_.size() == 1; | 346 bool single_user = users_.size() == 1; |
| 367 bool is_signin_to_add = LoginDisplayHostImpl::default_host() && | 347 bool is_signin_to_add = LoginDisplayHostImpl::default_host() && |
| 368 user_manager::UserManager::Get()->IsUserLoggedIn(); | 348 user_manager::UserManager::Get()->IsUserLoggedIn(); |
| 369 std::string owner_email; | 349 std::string owner_email; |
| 370 chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, | 350 chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, |
| 371 &owner_email); | 351 &owner_email); |
| 372 const AccountId owner(GetAccountIdOfKnownUser(owner_email)); | 352 const AccountId owner = user_manager::UserManager::GetKnownUserAccountId( |
| 353 owner_email, std::string()); |
| 373 | 354 |
| 374 policy::BrowserPolicyConnectorChromeOS* connector = | 355 policy::BrowserPolicyConnectorChromeOS* connector = |
| 375 g_browser_process->platform_part()->browser_policy_connector_chromeos(); | 356 g_browser_process->platform_part()->browser_policy_connector_chromeos(); |
| 376 bool is_enterprise_managed = connector->IsEnterpriseManaged(); | 357 bool is_enterprise_managed = connector->IsEnterpriseManaged(); |
| 377 | 358 |
| 378 const user_manager::UserList users_to_send = | 359 const user_manager::UserList users_to_send = |
| 379 PrepareUserListForSending(users_, owner, is_signin_to_add); | 360 PrepareUserListForSending(users_, owner, is_signin_to_add); |
| 380 | 361 |
| 381 user_auth_type_map_.clear(); | 362 user_auth_type_map_.clear(); |
| 382 | 363 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 token_handle_util_->MarkHandleInvalid(account_id); | 431 token_handle_util_->MarkHandleInvalid(account_id); |
| 451 SetAuthType(account_id.GetUserEmail(), ONLINE_SIGN_IN, base::string16()); | 432 SetAuthType(account_id.GetUserEmail(), ONLINE_SIGN_IN, base::string16()); |
| 452 } | 433 } |
| 453 } | 434 } |
| 454 | 435 |
| 455 // EasyUnlock stuff | 436 // EasyUnlock stuff |
| 456 | 437 |
| 457 void UserSelectionScreen::SetAuthType(const std::string& user_id, | 438 void UserSelectionScreen::SetAuthType(const std::string& user_id, |
| 458 AuthType auth_type, | 439 AuthType auth_type, |
| 459 const base::string16& initial_value) { | 440 const base::string16& initial_value) { |
| 460 const AccountId& account_id = GetAccountIdOfKnownUser(user_id); | 441 const AccountId& account_id = |
| 442 user_manager::UserManager::GetKnownUserAccountId(user_id, std::string()); |
| 461 if (GetAuthType(account_id.GetUserEmail()) == FORCE_OFFLINE_PASSWORD) | 443 if (GetAuthType(account_id.GetUserEmail()) == FORCE_OFFLINE_PASSWORD) |
| 462 return; | 444 return; |
| 463 DCHECK(GetAuthType(account_id.GetUserEmail()) != FORCE_OFFLINE_PASSWORD || | 445 DCHECK(GetAuthType(account_id.GetUserEmail()) != FORCE_OFFLINE_PASSWORD || |
| 464 auth_type == FORCE_OFFLINE_PASSWORD); | 446 auth_type == FORCE_OFFLINE_PASSWORD); |
| 465 user_auth_type_map_[account_id] = auth_type; | 447 user_auth_type_map_[account_id] = auth_type; |
| 466 view_->SetAuthType(account_id, auth_type, initial_value); | 448 view_->SetAuthType(account_id, auth_type, initial_value); |
| 467 } | 449 } |
| 468 | 450 |
| 469 proximity_auth::ScreenlockBridge::LockHandler::AuthType | 451 proximity_auth::ScreenlockBridge::LockHandler::AuthType |
| 470 UserSelectionScreen::GetAuthType(const std::string& username) const { | 452 UserSelectionScreen::GetAuthType(const std::string& username) const { |
| 471 const AccountId& account_id = GetAccountIdOfKnownUser(username); | 453 const AccountId& account_id = |
| 454 user_manager::UserManager::GetKnownUserAccountId(username, std::string()); |
| 472 if (user_auth_type_map_.find(account_id) == user_auth_type_map_.end()) | 455 if (user_auth_type_map_.find(account_id) == user_auth_type_map_.end()) |
| 473 return OFFLINE_PASSWORD; | 456 return OFFLINE_PASSWORD; |
| 474 return user_auth_type_map_.find(account_id)->second; | 457 return user_auth_type_map_.find(account_id)->second; |
| 475 } | 458 } |
| 476 | 459 |
| 477 proximity_auth::ScreenlockBridge::LockHandler::ScreenType | 460 proximity_auth::ScreenlockBridge::LockHandler::ScreenType |
| 478 UserSelectionScreen::GetScreenType() const { | 461 UserSelectionScreen::GetScreenType() const { |
| 479 if (display_type_ == OobeUI::kLockDisplay) | 462 if (display_type_ == OobeUI::kLockDisplay) |
| 480 return LOCK_SCREEN; | 463 return LOCK_SCREEN; |
| 481 | 464 |
| 482 if (display_type_ == OobeUI::kLoginDisplay) | 465 if (display_type_ == OobeUI::kLoginDisplay) |
| 483 return SIGNIN_SCREEN; | 466 return SIGNIN_SCREEN; |
| 484 | 467 |
| 485 return OTHER_SCREEN; | 468 return OTHER_SCREEN; |
| 486 } | 469 } |
| 487 | 470 |
| 488 void UserSelectionScreen::ShowBannerMessage(const base::string16& message) { | 471 void UserSelectionScreen::ShowBannerMessage(const base::string16& message) { |
| 489 view_->ShowBannerMessage(message); | 472 view_->ShowBannerMessage(message); |
| 490 } | 473 } |
| 491 | 474 |
| 492 void UserSelectionScreen::ShowUserPodCustomIcon( | 475 void UserSelectionScreen::ShowUserPodCustomIcon( |
| 493 const std::string& user_id, | 476 const std::string& user_id, |
| 494 const proximity_auth::ScreenlockBridge::UserPodCustomIconOptions& | 477 const proximity_auth::ScreenlockBridge::UserPodCustomIconOptions& |
| 495 icon_options) { | 478 icon_options) { |
| 496 scoped_ptr<base::DictionaryValue> icon = icon_options.ToDictionaryValue(); | 479 scoped_ptr<base::DictionaryValue> icon = icon_options.ToDictionaryValue(); |
| 497 if (!icon || icon->empty()) | 480 if (!icon || icon->empty()) |
| 498 return; | 481 return; |
| 499 const AccountId account_id = GetAccountIdOfKnownUser(user_id); | 482 const AccountId account_id = |
| 483 user_manager::UserManager::GetKnownUserAccountId(user_id, std::string()); |
| 500 view_->ShowUserPodCustomIcon(account_id, *icon); | 484 view_->ShowUserPodCustomIcon(account_id, *icon); |
| 501 } | 485 } |
| 502 | 486 |
| 503 void UserSelectionScreen::HideUserPodCustomIcon(const std::string& user_id) { | 487 void UserSelectionScreen::HideUserPodCustomIcon(const std::string& user_id) { |
| 504 const AccountId account_id = GetAccountIdOfKnownUser(user_id); | 488 const AccountId account_id = |
| 489 user_manager::UserManager::GetKnownUserAccountId(user_id, std::string()); |
| 505 view_->HideUserPodCustomIcon(account_id); | 490 view_->HideUserPodCustomIcon(account_id); |
| 506 } | 491 } |
| 507 | 492 |
| 508 void UserSelectionScreen::EnableInput() { | 493 void UserSelectionScreen::EnableInput() { |
| 509 // If Easy Unlock fails to unlock the screen, re-enable the password input. | 494 // If Easy Unlock fails to unlock the screen, re-enable the password input. |
| 510 // This is only necessary on the lock screen, because the error handling for | 495 // This is only necessary on the lock screen, because the error handling for |
| 511 // the sign-in screen uses a different code path. | 496 // the sign-in screen uses a different code path. |
| 512 if (ScreenLocker::default_screen_locker()) | 497 if (ScreenLocker::default_screen_locker()) |
| 513 ScreenLocker::default_screen_locker()->EnableInput(); | 498 ScreenLocker::default_screen_locker()->EnableInput(); |
| 514 } | 499 } |
| 515 | 500 |
| 516 void UserSelectionScreen::Unlock(const std::string& user_email) { | 501 void UserSelectionScreen::Unlock(const std::string& user_email) { |
| 517 DCHECK_EQ(GetScreenType(), LOCK_SCREEN); | 502 DCHECK_EQ(GetScreenType(), LOCK_SCREEN); |
| 518 ScreenLocker::Hide(); | 503 ScreenLocker::Hide(); |
| 519 } | 504 } |
| 520 | 505 |
| 521 void UserSelectionScreen::AttemptEasySignin(const std::string& user_id, | 506 void UserSelectionScreen::AttemptEasySignin(const std::string& user_id, |
| 522 const std::string& secret, | 507 const std::string& secret, |
| 523 const std::string& key_label) { | 508 const std::string& key_label) { |
| 524 DCHECK_EQ(GetScreenType(), SIGNIN_SCREEN); | 509 DCHECK_EQ(GetScreenType(), SIGNIN_SCREEN); |
| 525 | 510 |
| 526 UserContext user_context(GetAccountIdOfKnownUser(user_id)); | 511 UserContext user_context( |
| 512 user_manager::UserManager::GetKnownUserAccountId(user_id, std::string())); |
| 527 user_context.SetAuthFlow(UserContext::AUTH_FLOW_EASY_UNLOCK); | 513 user_context.SetAuthFlow(UserContext::AUTH_FLOW_EASY_UNLOCK); |
| 528 user_context.SetKey(Key(secret)); | 514 user_context.SetKey(Key(secret)); |
| 529 user_context.GetKey()->SetLabel(key_label); | 515 user_context.GetKey()->SetLabel(key_label); |
| 530 | 516 |
| 531 login_display_delegate_->Login(user_context, SigninSpecifics()); | 517 login_display_delegate_->Login(user_context, SigninSpecifics()); |
| 532 } | 518 } |
| 533 | 519 |
| 534 void UserSelectionScreen::HardLockPod(const AccountId& account_id) { | 520 void UserSelectionScreen::HardLockPod(const AccountId& account_id) { |
| 535 view_->SetAuthType(account_id, OFFLINE_PASSWORD, base::string16()); | 521 view_->SetAuthType(account_id, OFFLINE_PASSWORD, base::string16()); |
| 536 EasyUnlockService* service = GetEasyUnlockServiceForUser(account_id); | 522 EasyUnlockService* service = GetEasyUnlockServiceForUser(account_id); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 // The user profile should exist if and only if this is the lock screen. | 560 // The user profile should exist if and only if this is the lock screen. |
| 575 DCHECK_EQ(!!profile, GetScreenType() == LOCK_SCREEN); | 561 DCHECK_EQ(!!profile, GetScreenType() == LOCK_SCREEN); |
| 576 | 562 |
| 577 if (!profile) | 563 if (!profile) |
| 578 profile = profile_helper->GetSigninProfile(); | 564 profile = profile_helper->GetSigninProfile(); |
| 579 | 565 |
| 580 return EasyUnlockService::Get(profile); | 566 return EasyUnlockService::Get(profile); |
| 581 } | 567 } |
| 582 | 568 |
| 583 } // namespace chromeos | 569 } // namespace chromeos |
| OLD | NEW |