| 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/session/user_session_manager.h" | 5 #include "chrome/browser/chromeos/login/session/user_session_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/base_paths.h" | 9 #include "base/base_paths.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 | 443 |
| 444 void UserSessionManager::StartSession( | 444 void UserSessionManager::StartSession( |
| 445 const UserContext& user_context, | 445 const UserContext& user_context, |
| 446 StartSessionType start_session_type, | 446 StartSessionType start_session_type, |
| 447 bool has_auth_cookies, | 447 bool has_auth_cookies, |
| 448 bool has_active_session, | 448 bool has_active_session, |
| 449 UserSessionManagerDelegate* delegate) { | 449 UserSessionManagerDelegate* delegate) { |
| 450 delegate_ = delegate; | 450 delegate_ = delegate; |
| 451 start_session_type_ = start_session_type; | 451 start_session_type_ = start_session_type; |
| 452 | 452 |
| 453 VLOG(1) << "Starting session for " << user_context.GetUserID(); | 453 VLOG(1) << "Starting session for " |
| 454 << user_context.GetAccountId().GetUserEmail(); |
| 454 | 455 |
| 455 PreStartSession(); | 456 PreStartSession(); |
| 456 CreateUserSession(user_context, has_auth_cookies); | 457 CreateUserSession(user_context, has_auth_cookies); |
| 457 | 458 |
| 458 if (!has_active_session) | 459 if (!has_active_session) |
| 459 StartCrosSession(); | 460 StartCrosSession(); |
| 460 | 461 |
| 461 // TODO(nkostylev): Notify UserLoggedIn() after profile is actually | 462 // TODO(nkostylev): Notify UserLoggedIn() after profile is actually |
| 462 // ready to be used (http://crbug.com/361528). | 463 // ready to be used (http://crbug.com/361528). |
| 463 NotifyUserLoggedIn(); | 464 NotifyUserLoggedIn(); |
| 464 | 465 |
| 465 if (!user_context.GetDeviceId().empty()) { | 466 if (!user_context.GetDeviceId().empty()) { |
| 466 user_manager::UserManager::Get()->SetKnownUserDeviceId( | 467 user_manager::UserManager::Get()->SetKnownUserDeviceId( |
| 467 user_context.GetUserID(), user_context.GetDeviceId()); | 468 user_context.GetAccountId(), user_context.GetDeviceId()); |
| 468 } | 469 } |
| 469 | 470 |
| 470 PrepareProfile(); | 471 PrepareProfile(); |
| 471 } | 472 } |
| 472 | 473 |
| 473 void UserSessionManager::DelegateDeleted(UserSessionManagerDelegate* delegate) { | 474 void UserSessionManager::DelegateDeleted(UserSessionManagerDelegate* delegate) { |
| 474 if (delegate_ == delegate) | 475 if (delegate_ == delegate) |
| 475 delegate_ = nullptr; | 476 delegate_ = nullptr; |
| 476 } | 477 } |
| 477 | 478 |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 693 // argv[0] is the program name |base::CommandLine::NO_PROGRAM|. | 694 // argv[0] is the program name |base::CommandLine::NO_PROGRAM|. |
| 694 flags.assign(user_flags.argv().begin() + 1, user_flags.argv().end()); | 695 flags.assign(user_flags.argv().begin() + 1, user_flags.argv().end()); |
| 695 LOG(WARNING) << "Restarting to apply per-session flags..."; | 696 LOG(WARNING) << "Restarting to apply per-session flags..."; |
| 696 DBusThreadManager::Get()->GetSessionManagerClient()->SetFlagsForUser( | 697 DBusThreadManager::Get()->GetSessionManagerClient()->SetFlagsForUser( |
| 697 user_manager::UserManager::Get()->GetActiveUser()->email(), flags); | 698 user_manager::UserManager::Get()->GetActiveUser()->email(), flags); |
| 698 AttemptRestart(profile); | 699 AttemptRestart(profile); |
| 699 return true; | 700 return true; |
| 700 } | 701 } |
| 701 | 702 |
| 702 bool UserSessionManager::NeedsToUpdateEasyUnlockKeys() const { | 703 bool UserSessionManager::NeedsToUpdateEasyUnlockKeys() const { |
| 703 return !user_context_.GetUserID().empty() && | 704 return user_context_.GetAccountId().is_valid() && |
| 704 user_manager::User::TypeHasGaiaAccount(user_context_.GetUserType()) && | 705 user_manager::User::TypeHasGaiaAccount(user_context_.GetUserType()) && |
| 705 user_context_.GetKey() && !user_context_.GetKey()->GetSecret().empty(); | 706 user_context_.GetKey() && !user_context_.GetKey()->GetSecret().empty(); |
| 706 } | 707 } |
| 707 | 708 |
| 708 bool UserSessionManager::CheckEasyUnlockKeyOps(const base::Closure& callback) { | 709 bool UserSessionManager::CheckEasyUnlockKeyOps(const base::Closure& callback) { |
| 709 if (!running_easy_unlock_key_ops_) | 710 if (!running_easy_unlock_key_ops_) |
| 710 return false; | 711 return false; |
| 711 | 712 |
| 712 // Assumes only one deferred callback is needed. | 713 // Assumes only one deferred callback is needed. |
| 713 DCHECK(easy_unlock_key_ops_finished_callback_.is_null()); | 714 DCHECK(easy_unlock_key_ops_finished_callback_.is_null()); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 case OAuth2LoginManager::SESSION_RESTORE_PREPARING: | 752 case OAuth2LoginManager::SESSION_RESTORE_PREPARING: |
| 752 case OAuth2LoginManager::SESSION_RESTORE_IN_PROGRESS: | 753 case OAuth2LoginManager::SESSION_RESTORE_IN_PROGRESS: |
| 753 return; | 754 return; |
| 754 } | 755 } |
| 755 | 756 |
| 756 // We should not be clearing existing token state if that was a connection | 757 // We should not be clearing existing token state if that was a connection |
| 757 // error. http://crbug.com/295245 | 758 // error. http://crbug.com/295245 |
| 758 if (!connection_error) { | 759 if (!connection_error) { |
| 759 // We are in one of "done" states here. | 760 // We are in one of "done" states here. |
| 760 user_manager::UserManager::Get()->SaveUserOAuthStatus( | 761 user_manager::UserManager::Get()->SaveUserOAuthStatus( |
| 761 user_manager::UserManager::Get()->GetLoggedInUser()->email(), | 762 user_manager::UserManager::Get()->GetLoggedInUser()->GetAccountId(), |
| 762 user_status); | 763 user_status); |
| 763 } | 764 } |
| 764 | 765 |
| 765 login_manager->RemoveObserver(this); | 766 login_manager->RemoveObserver(this); |
| 766 | 767 |
| 767 if (exit_after_session_restore_ && | 768 if (exit_after_session_restore_ && |
| 768 (state == OAuth2LoginManager::SESSION_RESTORE_DONE || | 769 (state == OAuth2LoginManager::SESSION_RESTORE_DONE || |
| 769 state == OAuth2LoginManager::SESSION_RESTORE_FAILED || | 770 state == OAuth2LoginManager::SESSION_RESTORE_FAILED || |
| 770 state == OAuth2LoginManager::SESSION_RESTORE_CONNECTION_FAILED)) { | 771 state == OAuth2LoginManager::SESSION_RESTORE_CONNECTION_FAILED)) { |
| 771 LOG(WARNING) << "Restarting Chrome after session restore finishes, " | 772 LOG(WARNING) << "Restarting Chrome after session restore finishes, " |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 854 | 855 |
| 855 void UserSessionManager::PreStartSession() { | 856 void UserSessionManager::PreStartSession() { |
| 856 // Switch log file as soon as possible. | 857 // Switch log file as soon as possible. |
| 857 if (base::SysInfo::IsRunningOnChromeOS()) | 858 if (base::SysInfo::IsRunningOnChromeOS()) |
| 858 logging::RedirectChromeLogging(*(base::CommandLine::ForCurrentProcess())); | 859 logging::RedirectChromeLogging(*(base::CommandLine::ForCurrentProcess())); |
| 859 } | 860 } |
| 860 | 861 |
| 861 void UserSessionManager::StoreUserContextDataBeforeProfileIsCreated() { | 862 void UserSessionManager::StoreUserContextDataBeforeProfileIsCreated() { |
| 862 // Store obfuscated GAIA ID. | 863 // Store obfuscated GAIA ID. |
| 863 if (!user_context_.GetGaiaID().empty()) { | 864 if (!user_context_.GetGaiaID().empty()) { |
| 864 user_manager::UserManager::Get()->UpdateGaiaID(user_context_.GetUserID(), | 865 user_manager::UserManager::Get()->UpdateGaiaID(user_context_.GetAccountId(), |
| 865 user_context_.GetGaiaID()); | 866 user_context_.GetGaiaID()); |
| 866 } | 867 } |
| 867 } | 868 } |
| 868 | 869 |
| 869 void UserSessionManager::StartCrosSession() { | 870 void UserSessionManager::StartCrosSession() { |
| 870 BootTimesRecorder* btl = BootTimesRecorder::Get(); | 871 BootTimesRecorder* btl = BootTimesRecorder::Get(); |
| 871 btl->AddLoginTimeMarker("StartSession-Start", false); | 872 btl->AddLoginTimeMarker("StartSession-Start", false); |
| 872 DBusThreadManager::Get()->GetSessionManagerClient()-> | 873 DBusThreadManager::Get()->GetSessionManagerClient()->StartSession( |
| 873 StartSession(user_context_.GetUserID()); | 874 user_context_.GetAccountId().GetUserEmail()); |
| 874 btl->AddLoginTimeMarker("StartSession-End", false); | 875 btl->AddLoginTimeMarker("StartSession-End", false); |
| 875 } | 876 } |
| 876 | 877 |
| 877 void UserSessionManager::NotifyUserLoggedIn() { | 878 void UserSessionManager::NotifyUserLoggedIn() { |
| 878 BootTimesRecorder* btl = BootTimesRecorder::Get(); | 879 BootTimesRecorder* btl = BootTimesRecorder::Get(); |
| 879 btl->AddLoginTimeMarker("UserLoggedIn-Start", false); | 880 btl->AddLoginTimeMarker("UserLoggedIn-Start", false); |
| 880 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); | 881 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); |
| 881 user_manager->UserLoggedIn(user_context_.GetUserID(), | 882 user_manager->UserLoggedIn(user_context_.GetAccountId(), |
| 882 user_context_.GetUserIDHash(), | 883 user_context_.GetUserIDHash(), false); |
| 883 false); | |
| 884 btl->AddLoginTimeMarker("UserLoggedIn-End", false); | 884 btl->AddLoginTimeMarker("UserLoggedIn-End", false); |
| 885 } | 885 } |
| 886 | 886 |
| 887 void UserSessionManager::PrepareProfile() { | 887 void UserSessionManager::PrepareProfile() { |
| 888 bool is_demo_session = | 888 const bool is_demo_session = DemoAppLauncher::IsDemoAppSession( |
| 889 DemoAppLauncher::IsDemoAppSession(user_context_.GetUserID()); | 889 user_context_.GetAccountId().GetUserEmail()); |
| 890 | 890 |
| 891 // TODO(nkostylev): Figure out whether demo session is using the right profile | 891 // TODO(nkostylev): Figure out whether demo session is using the right profile |
| 892 // path or not. See https://codereview.chromium.org/171423009 | 892 // path or not. See https://codereview.chromium.org/171423009 |
| 893 g_browser_process->profile_manager()->CreateProfileAsync( | 893 g_browser_process->profile_manager()->CreateProfileAsync( |
| 894 ProfileHelper::GetProfilePathByUserIdHash(user_context_.GetUserIDHash()), | 894 ProfileHelper::GetProfilePathByUserIdHash(user_context_.GetUserIDHash()), |
| 895 base::Bind(&UserSessionManager::OnProfileCreated, | 895 base::Bind(&UserSessionManager::OnProfileCreated, |
| 896 AsWeakPtr(), | 896 AsWeakPtr(), |
| 897 user_context_, | 897 user_context_, |
| 898 is_demo_session), | 898 is_demo_session), |
| 899 base::string16(), | 899 base::string16(), |
| 900 base::string16(), | 900 base::string16(), |
| 901 std::string()); | 901 std::string()); |
| 902 } | 902 } |
| 903 | 903 |
| 904 void UserSessionManager::OnProfileCreated(const UserContext& user_context, | 904 void UserSessionManager::OnProfileCreated(const UserContext& user_context, |
| 905 bool is_incognito_profile, | 905 bool is_incognito_profile, |
| 906 Profile* profile, | 906 Profile* profile, |
| 907 Profile::CreateStatus status) { | 907 Profile::CreateStatus status) { |
| 908 CHECK(profile); | 908 CHECK(profile); |
| 909 | 909 |
| 910 switch (status) { | 910 switch (status) { |
| 911 case Profile::CREATE_STATUS_CREATED: | 911 case Profile::CREATE_STATUS_CREATED: |
| 912 // Profile created but before initializing extensions and promo resources. | 912 // Profile created but before initializing extensions and promo resources. |
| 913 InitProfilePreferences(profile, user_context); | 913 InitProfilePreferences(profile, user_context); |
| 914 break; | 914 break; |
| 915 case Profile::CREATE_STATUS_INITIALIZED: | 915 case Profile::CREATE_STATUS_INITIALIZED: |
| 916 // Profile is created, extensions and promo resources are initialized. | 916 // Profile is created, extensions and promo resources are initialized. |
| 917 // At this point all other Chrome OS services will be notified that it is | 917 // At this point all other Chrome OS services will be notified that it is |
| 918 // safe to use this profile. | 918 // safe to use this profile. |
| 919 UserProfileInitialized(profile, | 919 UserProfileInitialized(profile, is_incognito_profile, |
| 920 is_incognito_profile, | 920 user_context.GetAccountId()); |
| 921 user_context.GetUserID()); | |
| 922 break; | 921 break; |
| 923 case Profile::CREATE_STATUS_LOCAL_FAIL: | 922 case Profile::CREATE_STATUS_LOCAL_FAIL: |
| 924 case Profile::CREATE_STATUS_REMOTE_FAIL: | 923 case Profile::CREATE_STATUS_REMOTE_FAIL: |
| 925 case Profile::CREATE_STATUS_CANCELED: | 924 case Profile::CREATE_STATUS_CANCELED: |
| 926 case Profile::MAX_CREATE_STATUS: | 925 case Profile::MAX_CREATE_STATUS: |
| 927 NOTREACHED(); | 926 NOTREACHED(); |
| 928 break; | 927 break; |
| 929 } | 928 } |
| 930 } | 929 } |
| 931 | 930 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 961 } else if (user_manager::UserManager::Get()-> | 960 } else if (user_manager::UserManager::Get()-> |
| 962 IsLoggedInAsUserWithGaiaAccount()) { | 961 IsLoggedInAsUserWithGaiaAccount()) { |
| 963 // Get the Gaia ID from the user context. If it's not available, this may | 962 // Get the Gaia ID from the user context. If it's not available, this may |
| 964 // not be available when unlocking a previously opened profile, or when | 963 // not be available when unlocking a previously opened profile, or when |
| 965 // creating a supervised users. However, in these cases the gaia_id should | 964 // creating a supervised users. However, in these cases the gaia_id should |
| 966 // be already available in the account tracker. | 965 // be already available in the account tracker. |
| 967 std::string gaia_id = user_context.GetGaiaID(); | 966 std::string gaia_id = user_context.GetGaiaID(); |
| 968 if (gaia_id.empty()) { | 967 if (gaia_id.empty()) { |
| 969 AccountTrackerService* account_tracker = | 968 AccountTrackerService* account_tracker = |
| 970 AccountTrackerServiceFactory::GetForProfile(profile); | 969 AccountTrackerServiceFactory::GetForProfile(profile); |
| 971 AccountInfo info = | 970 const AccountInfo info = account_tracker->FindAccountInfoByEmail( |
| 972 account_tracker->FindAccountInfoByEmail(user_context.GetUserID()); | 971 user_context.GetAccountId().GetUserEmail()); |
| 973 gaia_id = info.gaia; | 972 gaia_id = info.gaia; |
| 974 DCHECK(!gaia_id.empty()); | 973 DCHECK(!gaia_id.empty()); |
| 975 } | 974 } |
| 976 | 975 |
| 977 // Make sure that the google service username is properly set (we do this | 976 // Make sure that the google service username is properly set (we do this |
| 978 // on every sign in, not just the first login, to deal with existing | 977 // on every sign in, not just the first login, to deal with existing |
| 979 // profiles that might not have it set yet). | 978 // profiles that might not have it set yet). |
| 980 SigninManagerBase* signin_manager = | 979 SigninManagerBase* signin_manager = |
| 981 SigninManagerFactory::GetForProfile(profile); | 980 SigninManagerFactory::GetForProfile(profile); |
| 982 signin_manager->SetAuthenticatedAccountInfo(gaia_id, | 981 signin_manager->SetAuthenticatedAccountInfo( |
| 983 user_context.GetUserID()); | 982 gaia_id, user_context.GetAccountId().GetUserEmail()); |
| 984 | 983 |
| 985 // Backfill GAIA ID in user prefs stored in Local State. | 984 // Backfill GAIA ID in user prefs stored in Local State. |
| 986 std::string tmp_gaia_id; | 985 std::string tmp_gaia_id; |
| 987 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); | 986 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); |
| 988 if (!user_manager->FindGaiaID(user_context.GetUserID(), &tmp_gaia_id) && | 987 if (!user_manager->FindGaiaID(user_context.GetAccountId(), &tmp_gaia_id) && |
| 989 !gaia_id.empty()) { | 988 !gaia_id.empty()) { |
| 990 user_manager->UpdateGaiaID(user_context.GetUserID(), gaia_id); | 989 user_manager->UpdateGaiaID(user_context.GetAccountId(), gaia_id); |
| 991 } | 990 } |
| 992 } | 991 } |
| 993 } | 992 } |
| 994 | 993 |
| 995 void UserSessionManager::UserProfileInitialized(Profile* profile, | 994 void UserSessionManager::UserProfileInitialized(Profile* profile, |
| 996 bool is_incognito_profile, | 995 bool is_incognito_profile, |
| 997 const std::string& user_id) { | 996 const AccountId& account_id) { |
| 998 // Demo user signed in. | 997 // Demo user signed in. |
| 999 if (is_incognito_profile) { | 998 if (is_incognito_profile) { |
| 1000 profile->OnLogin(); | 999 profile->OnLogin(); |
| 1001 | 1000 |
| 1002 // Send the notification before creating the browser so additional objects | 1001 // Send the notification before creating the browser so additional objects |
| 1003 // that need the profile (e.g. the launcher) can be created first. | 1002 // that need the profile (e.g. the launcher) can be created first. |
| 1004 content::NotificationService::current()->Notify( | 1003 content::NotificationService::current()->Notify( |
| 1005 chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED, | 1004 chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED, |
| 1006 content::NotificationService::AllSources(), | 1005 content::NotificationService::AllSources(), |
| 1007 content::Details<Profile>(profile)); | 1006 content::Details<Profile>(profile)); |
| 1008 | 1007 |
| 1009 if (delegate_) | 1008 if (delegate_) |
| 1010 delegate_->OnProfilePrepared(profile, false); | 1009 delegate_->OnProfilePrepared(profile, false); |
| 1011 | 1010 |
| 1012 return; | 1011 return; |
| 1013 } | 1012 } |
| 1014 | 1013 |
| 1015 BootTimesRecorder* btl = BootTimesRecorder::Get(); | 1014 BootTimesRecorder* btl = BootTimesRecorder::Get(); |
| 1016 btl->AddLoginTimeMarker("UserProfileGotten", false); | 1015 btl->AddLoginTimeMarker("UserProfileGotten", false); |
| 1017 | 1016 |
| 1018 if (user_context_.IsUsingOAuth()) { | 1017 if (user_context_.IsUsingOAuth()) { |
| 1019 // Retrieve the policy that indicates whether to continue copying | 1018 // Retrieve the policy that indicates whether to continue copying |
| 1020 // authentication cookies set by a SAML IdP on subsequent logins after the | 1019 // authentication cookies set by a SAML IdP on subsequent logins after the |
| 1021 // first. | 1020 // first. |
| 1022 bool transfer_saml_auth_cookies_on_subsequent_login = false; | 1021 bool transfer_saml_auth_cookies_on_subsequent_login = false; |
| 1023 if (has_auth_cookies_ && | 1022 if (has_auth_cookies_ && |
| 1024 g_browser_process->platform_part()-> | 1023 g_browser_process->platform_part() |
| 1025 browser_policy_connector_chromeos()->GetUserAffiliation(user_id) == | 1024 ->browser_policy_connector_chromeos() |
| 1026 policy::USER_AFFILIATION_MANAGED) { | 1025 ->GetUserAffiliation(account_id.GetUserEmail()) == |
| 1026 policy::USER_AFFILIATION_MANAGED) { |
| 1027 CrosSettings::Get()->GetBoolean( | 1027 CrosSettings::Get()->GetBoolean( |
| 1028 kAccountsPrefTransferSAMLCookies, | 1028 kAccountsPrefTransferSAMLCookies, |
| 1029 &transfer_saml_auth_cookies_on_subsequent_login); | 1029 &transfer_saml_auth_cookies_on_subsequent_login); |
| 1030 } | 1030 } |
| 1031 | 1031 |
| 1032 // Transfers authentication-related data from the profile that was used for | 1032 // Transfers authentication-related data from the profile that was used for |
| 1033 // authentication to the user's profile. The proxy authentication state is | 1033 // authentication to the user's profile. The proxy authentication state is |
| 1034 // transferred unconditionally. If the user authenticated via an auth | 1034 // transferred unconditionally. If the user authenticated via an auth |
| 1035 // extension, authentication cookies and channel IDs will be transferred as | 1035 // extension, authentication cookies and channel IDs will be transferred as |
| 1036 // well when the user's cookie jar is empty. If the cookie jar is not empty, | 1036 // well when the user's cookie jar is empty. If the cookie jar is not empty, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 if (cryptohome_util::TpmIsOwned()) | 1085 if (cryptohome_util::TpmIsOwned()) |
| 1086 client->CallTpmClearStoredPasswordAndBlock(); | 1086 client->CallTpmClearStoredPasswordAndBlock(); |
| 1087 else | 1087 else |
| 1088 client->TpmCanAttemptOwnership(EmptyVoidDBusMethodCallback()); | 1088 client->TpmCanAttemptOwnership(EmptyVoidDBusMethodCallback()); |
| 1089 } | 1089 } |
| 1090 btl->AddLoginTimeMarker("TPMOwn-End", false); | 1090 btl->AddLoginTimeMarker("TPMOwn-End", false); |
| 1091 | 1091 |
| 1092 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); | 1092 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); |
| 1093 if (user_manager->IsLoggedInAsUserWithGaiaAccount()) { | 1093 if (user_manager->IsLoggedInAsUserWithGaiaAccount()) { |
| 1094 if (user_context_.GetAuthFlow() == UserContext::AUTH_FLOW_GAIA_WITH_SAML) | 1094 if (user_context_.GetAuthFlow() == UserContext::AUTH_FLOW_GAIA_WITH_SAML) |
| 1095 user_manager->UpdateUsingSAML(user_context_.GetUserID(), true); | 1095 user_manager->UpdateUsingSAML(user_context_.GetAccountId(), true); |
| 1096 SAMLOfflineSigninLimiter* saml_offline_signin_limiter = | 1096 SAMLOfflineSigninLimiter* saml_offline_signin_limiter = |
| 1097 SAMLOfflineSigninLimiterFactory::GetForProfile(profile); | 1097 SAMLOfflineSigninLimiterFactory::GetForProfile(profile); |
| 1098 if (saml_offline_signin_limiter) | 1098 if (saml_offline_signin_limiter) |
| 1099 saml_offline_signin_limiter->SignedIn(user_context_.GetAuthFlow()); | 1099 saml_offline_signin_limiter->SignedIn(user_context_.GetAuthFlow()); |
| 1100 } | 1100 } |
| 1101 | 1101 |
| 1102 profile->OnLogin(); | 1102 profile->OnLogin(); |
| 1103 | 1103 |
| 1104 g_browser_process->platform_part()->SessionManager()->SetSessionState( | 1104 g_browser_process->platform_part()->SessionManager()->SetSessionState( |
| 1105 session_manager::SESSION_STATE_LOGGED_IN_NOT_ACTIVE); | 1105 session_manager::SESSION_STATE_LOGGED_IN_NOT_ACTIVE); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1118 InitRlz(profile); | 1118 InitRlz(profile); |
| 1119 InitializeCerts(profile); | 1119 InitializeCerts(profile); |
| 1120 InitializeCRLSetFetcher(user); | 1120 InitializeCRLSetFetcher(user); |
| 1121 InitializeEVCertificatesWhitelistComponent(user); | 1121 InitializeEVCertificatesWhitelistComponent(user); |
| 1122 } | 1122 } |
| 1123 | 1123 |
| 1124 UpdateEasyUnlockKeys(user_context_); | 1124 UpdateEasyUnlockKeys(user_context_); |
| 1125 user_context_.ClearSecrets(); | 1125 user_context_.ClearSecrets(); |
| 1126 if (TokenHandlesEnabled()) { | 1126 if (TokenHandlesEnabled()) { |
| 1127 CreateTokenUtilIfMissing(); | 1127 CreateTokenUtilIfMissing(); |
| 1128 if (token_handle_util_->ShouldObtainHandle(user->GetUserID())) { | 1128 if (token_handle_util_->ShouldObtainHandle(user->GetAccountId())) { |
| 1129 if (!token_handle_fetcher_.get()) { | 1129 if (!token_handle_fetcher_.get()) { |
| 1130 token_handle_fetcher_.reset(new TokenHandleFetcher( | 1130 token_handle_fetcher_.reset(new TokenHandleFetcher( |
| 1131 token_handle_util_.get(), user->GetUserID())); | 1131 token_handle_util_.get(), user->GetAccountId())); |
| 1132 token_handle_fetcher_->BackfillToken( | 1132 token_handle_fetcher_->BackfillToken( |
| 1133 profile, base::Bind(&UserSessionManager::OnTokenHandleObtained, | 1133 profile, base::Bind(&UserSessionManager::OnTokenHandleObtained, |
| 1134 weak_factory_.GetWeakPtr())); | 1134 weak_factory_.GetWeakPtr())); |
| 1135 } | 1135 } |
| 1136 } | 1136 } |
| 1137 } | 1137 } |
| 1138 | 1138 |
| 1139 // Now that profile is ready, proceed to either alternative login flows or | 1139 // Now that profile is ready, proceed to either alternative login flows or |
| 1140 // launch browser. | 1140 // launch browser. |
| 1141 bool browser_launched = InitializeUserSession(profile); | 1141 bool browser_launched = InitializeUserSession(profile); |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1433 ++it) { | 1433 ++it) { |
| 1434 const user_manager::User* user = (*it); | 1434 const user_manager::User* user = (*it); |
| 1435 if (user->email() == user_id) { | 1435 if (user->email() == user_id) { |
| 1436 user_already_logged_in = true; | 1436 user_already_logged_in = true; |
| 1437 break; | 1437 break; |
| 1438 } | 1438 } |
| 1439 } | 1439 } |
| 1440 DCHECK(!user_already_logged_in); | 1440 DCHECK(!user_already_logged_in); |
| 1441 | 1441 |
| 1442 if (!user_already_logged_in) { | 1442 if (!user_already_logged_in) { |
| 1443 UserContext user_context(user_id); | 1443 UserContext user_context(AccountId::FromUserEmail(user_id)); |
| 1444 user_context.SetUserIDHash(user_id_hash); | 1444 user_context.SetUserIDHash(user_id_hash); |
| 1445 user_context.SetIsUsingOAuth(false); | 1445 user_context.SetIsUsingOAuth(false); |
| 1446 | 1446 |
| 1447 // Will call OnProfilePrepared() once profile has been loaded. | 1447 // Will call OnProfilePrepared() once profile has been loaded. |
| 1448 // Only handling secondary users here since primary user profile | 1448 // Only handling secondary users here since primary user profile |
| 1449 // (and session) has been loaded on Chrome startup. | 1449 // (and session) has been loaded on Chrome startup. |
| 1450 StartSession(user_context, | 1450 StartSession(user_context, |
| 1451 SECONDARY_USER_SESSION_AFTER_CRASH, | 1451 SECONDARY_USER_SESSION_AFTER_CRASH, |
| 1452 false, // has_auth_cookies | 1452 false, // has_auth_cookies |
| 1453 true, // has_active_session, this is restart after crash | 1453 true, // has_active_session, this is restart after crash |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1471 // and RefreshKeys op expects a failure to stop. As a result, some tests would | 1471 // and RefreshKeys op expects a failure to stop. As a result, some tests would |
| 1472 // timeout. | 1472 // timeout. |
| 1473 // TODO(xiyuan): Revisit this when adding tests. | 1473 // TODO(xiyuan): Revisit this when adding tests. |
| 1474 if (!base::SysInfo::IsRunningOnChromeOS()) | 1474 if (!base::SysInfo::IsRunningOnChromeOS()) |
| 1475 return; | 1475 return; |
| 1476 | 1476 |
| 1477 // Only update Easy unlock keys for regular user. | 1477 // Only update Easy unlock keys for regular user. |
| 1478 // TODO(xiyuan): Fix inconsistency user type of |user_context| introduced in | 1478 // TODO(xiyuan): Fix inconsistency user type of |user_context| introduced in |
| 1479 // authenticator. | 1479 // authenticator. |
| 1480 const user_manager::User* user = | 1480 const user_manager::User* user = |
| 1481 user_manager::UserManager::Get()->FindUser(user_context.GetUserID()); | 1481 user_manager::UserManager::Get()->FindUser(user_context.GetAccountId()); |
| 1482 if (!user || !user->HasGaiaAccount()) | 1482 if (!user || !user->HasGaiaAccount()) |
| 1483 return; | 1483 return; |
| 1484 | 1484 |
| 1485 // Bail if |user_context| does not have secret. | 1485 // Bail if |user_context| does not have secret. |
| 1486 if (user_context.GetKey()->GetSecret().empty()) | 1486 if (user_context.GetKey()->GetSecret().empty()) |
| 1487 return; | 1487 return; |
| 1488 | 1488 |
| 1489 const base::ListValue* device_list = NULL; | 1489 const base::ListValue* device_list = NULL; |
| 1490 EasyUnlockService* easy_unlock_service = EasyUnlockService::GetForUser(*user); | 1490 EasyUnlockService* easy_unlock_service = EasyUnlockService::GetForUser(*user); |
| 1491 if (easy_unlock_service) { | 1491 if (easy_unlock_service) { |
| 1492 device_list = easy_unlock_service->GetRemoteDevices(); | 1492 device_list = easy_unlock_service->GetRemoteDevices(); |
| 1493 easy_unlock_service->SetHardlockState( | 1493 easy_unlock_service->SetHardlockState( |
| 1494 EasyUnlockScreenlockStateHandler::NO_HARDLOCK); | 1494 EasyUnlockScreenlockStateHandler::NO_HARDLOCK); |
| 1495 } | 1495 } |
| 1496 | 1496 |
| 1497 base::ListValue empty_list; | 1497 base::ListValue empty_list; |
| 1498 if (!device_list) | 1498 if (!device_list) |
| 1499 device_list = &empty_list; | 1499 device_list = &empty_list; |
| 1500 | 1500 |
| 1501 EasyUnlockKeyManager* key_manager = GetEasyUnlockKeyManager(); | 1501 EasyUnlockKeyManager* key_manager = GetEasyUnlockKeyManager(); |
| 1502 running_easy_unlock_key_ops_ = true; | 1502 running_easy_unlock_key_ops_ = true; |
| 1503 key_manager->RefreshKeys( | 1503 key_manager->RefreshKeys( |
| 1504 user_context, *device_list, | 1504 user_context, *device_list, |
| 1505 base::Bind(&UserSessionManager::OnEasyUnlockKeyOpsFinished, AsWeakPtr(), | 1505 base::Bind(&UserSessionManager::OnEasyUnlockKeyOpsFinished, AsWeakPtr(), |
| 1506 user_context.GetUserID())); | 1506 user_context.GetAccountId().GetUserEmail())); |
| 1507 } | 1507 } |
| 1508 | 1508 |
| 1509 net::URLRequestContextGetter* | 1509 net::URLRequestContextGetter* |
| 1510 UserSessionManager::GetAuthRequestContext() const { | 1510 UserSessionManager::GetAuthRequestContext() const { |
| 1511 net::URLRequestContextGetter* auth_request_context = nullptr; | 1511 net::URLRequestContextGetter* auth_request_context = nullptr; |
| 1512 | 1512 |
| 1513 if (StartupUtils::IsWebviewSigninEnabled()) { | 1513 if (StartupUtils::IsWebviewSigninEnabled()) { |
| 1514 // Webview uses different partition storage than iframe. We need to get | 1514 // Webview uses different partition storage than iframe. We need to get |
| 1515 // cookies from the right storage for url request to get auth token into | 1515 // cookies from the right storage for url request to get auth token into |
| 1516 // session. | 1516 // session. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1557 exit_after_session_restore_ = true; | 1557 exit_after_session_restore_ = true; |
| 1558 } | 1558 } |
| 1559 | 1559 |
| 1560 void UserSessionManager::OnEasyUnlockKeyOpsFinished( | 1560 void UserSessionManager::OnEasyUnlockKeyOpsFinished( |
| 1561 const std::string& user_id, | 1561 const std::string& user_id, |
| 1562 bool success) { | 1562 bool success) { |
| 1563 running_easy_unlock_key_ops_ = false; | 1563 running_easy_unlock_key_ops_ = false; |
| 1564 if (!easy_unlock_key_ops_finished_callback_.is_null()) | 1564 if (!easy_unlock_key_ops_finished_callback_.is_null()) |
| 1565 easy_unlock_key_ops_finished_callback_.Run(); | 1565 easy_unlock_key_ops_finished_callback_.Run(); |
| 1566 | 1566 |
| 1567 const user_manager::User* user = | 1567 const user_manager::User* user = user_manager::UserManager::Get()->FindUser( |
| 1568 user_manager::UserManager::Get()->FindUser(user_id); | 1568 AccountId::FromUserEmail(user_id)); |
| 1569 EasyUnlockService* easy_unlock_service = | 1569 EasyUnlockService* easy_unlock_service = |
| 1570 EasyUnlockService::GetForUser(*user); | 1570 EasyUnlockService::GetForUser(*user); |
| 1571 easy_unlock_service->CheckCryptohomeKeysAndMaybeHardlock(); | 1571 easy_unlock_service->CheckCryptohomeKeysAndMaybeHardlock(); |
| 1572 } | 1572 } |
| 1573 | 1573 |
| 1574 void UserSessionManager::ActiveUserChanged( | 1574 void UserSessionManager::ActiveUserChanged( |
| 1575 const user_manager::User* active_user) { | 1575 const user_manager::User* active_user) { |
| 1576 if (!user_manager::UserManager::Get()->IsCurrentUserNew()) | 1576 if (!user_manager::UserManager::Get()->IsCurrentUserNew()) |
| 1577 SendUserPodsMetrics(); | 1577 SendUserPodsMetrics(); |
| 1578 | 1578 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1719 else | 1719 else |
| 1720 display = USER_PODS_DISPLAY_DISABLED_REGULAR; | 1720 display = USER_PODS_DISPLAY_DISABLED_REGULAR; |
| 1721 } | 1721 } |
| 1722 UMA_HISTOGRAM_ENUMERATION("UserSessionManager.UserPodsDisplay", display, | 1722 UMA_HISTOGRAM_ENUMERATION("UserSessionManager.UserPodsDisplay", display, |
| 1723 NUM_USER_PODS_DISPLAY); | 1723 NUM_USER_PODS_DISPLAY); |
| 1724 } | 1724 } |
| 1725 | 1725 |
| 1726 void UserSessionManager::OnOAuth2TokensFetched(UserContext context) { | 1726 void UserSessionManager::OnOAuth2TokensFetched(UserContext context) { |
| 1727 if (StartupUtils::IsWebviewSigninEnabled() && TokenHandlesEnabled()) { | 1727 if (StartupUtils::IsWebviewSigninEnabled() && TokenHandlesEnabled()) { |
| 1728 CreateTokenUtilIfMissing(); | 1728 CreateTokenUtilIfMissing(); |
| 1729 if (token_handle_util_->ShouldObtainHandle(context.GetUserID())) { | 1729 if (token_handle_util_->ShouldObtainHandle(context.GetAccountId())) { |
| 1730 token_handle_fetcher_.reset(new TokenHandleFetcher( | 1730 token_handle_fetcher_.reset(new TokenHandleFetcher( |
| 1731 token_handle_util_.get(), context.GetUserID())); | 1731 token_handle_util_.get(), context.GetAccountId())); |
| 1732 token_handle_fetcher_->FillForNewUser( | 1732 token_handle_fetcher_->FillForNewUser( |
| 1733 context.GetAccessToken(), | 1733 context.GetAccessToken(), |
| 1734 base::Bind(&UserSessionManager::OnTokenHandleObtained, | 1734 base::Bind(&UserSessionManager::OnTokenHandleObtained, |
| 1735 weak_factory_.GetWeakPtr())); | 1735 weak_factory_.GetWeakPtr())); |
| 1736 } | 1736 } |
| 1737 } | 1737 } |
| 1738 } | 1738 } |
| 1739 | 1739 |
| 1740 void UserSessionManager::OnTokenHandleObtained(const user_manager::UserID& id, | 1740 void UserSessionManager::OnTokenHandleObtained(const AccountId& account_id, |
| 1741 bool success) { | 1741 bool success) { |
| 1742 if (!success) | 1742 if (!success) |
| 1743 LOG(ERROR) << "OAuth2 token handle fetch failed."; | 1743 LOG(ERROR) << "OAuth2 token handle fetch failed."; |
| 1744 token_handle_fetcher_.reset(); | 1744 token_handle_fetcher_.reset(); |
| 1745 } | 1745 } |
| 1746 | 1746 |
| 1747 bool UserSessionManager::TokenHandlesEnabled() { | 1747 bool UserSessionManager::TokenHandlesEnabled() { |
| 1748 if (!should_obtain_handles_) | 1748 if (!should_obtain_handles_) |
| 1749 return false; | 1749 return false; |
| 1750 bool ephemeral_users_enabled = false; | 1750 bool ephemeral_users_enabled = false; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1763 first_run::GoodiesDisplayer::Delete(); | 1763 first_run::GoodiesDisplayer::Delete(); |
| 1764 } | 1764 } |
| 1765 | 1765 |
| 1766 void UserSessionManager::CreateTokenUtilIfMissing() { | 1766 void UserSessionManager::CreateTokenUtilIfMissing() { |
| 1767 if (!token_handle_util_.get()) | 1767 if (!token_handle_util_.get()) |
| 1768 token_handle_util_.reset( | 1768 token_handle_util_.reset( |
| 1769 new TokenHandleUtil(user_manager::UserManager::Get())); | 1769 new TokenHandleUtil(user_manager::UserManager::Get())); |
| 1770 } | 1770 } |
| 1771 | 1771 |
| 1772 } // namespace chromeos | 1772 } // namespace chromeos |
| OLD | NEW |