Index: chrome/browser/ui/webui/signin/user_manager_screen_handler.cc |
diff --git a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc |
index 6887224827e7b10446995c7b751d0b0e0774d125..087ac6c27033049e4d47c214687d9c22ff039879 100644 |
--- a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc |
+++ b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc |
@@ -124,23 +124,13 @@ std::string GetAvatarImageAtIndex( |
return webui::GetBitmapDataUrl(resized_image.AsBitmap()); |
} |
-size_t GetIndexOfProfileWithEmail(const ProfileInfoCache& info_cache, |
- const std::string& email) { |
- const base::string16& profile_email = base::UTF8ToUTF16(email); |
- for (size_t i = 0; i < info_cache.GetNumberOfProfiles(); ++i) { |
- if (info_cache.GetUserNameOfProfileAtIndex(i) == profile_email) |
- return i; |
- } |
- return std::string::npos; |
-} |
- |
extensions::ScreenlockPrivateEventRouter* GetScreenlockRouter( |
const std::string& email) { |
- const ProfileInfoCache& info_cache = |
- g_browser_process->profile_manager()->GetProfileInfoCache(); |
- const size_t profile_index = GetIndexOfProfileWithEmail(info_cache, email); |
+ base::FilePath path = |
+ profiles::GetPathOfProfileWithEmail(g_browser_process->profile_manager(), |
+ email); |
Profile* profile = g_browser_process->profile_manager() |
- ->GetProfileByPath(info_cache.GetPathOfProfileAtIndex(profile_index)); |
+ ->GetProfileByPath(path); |
return extensions::ScreenlockPrivateEventRouter::GetFactoryInstance()->Get( |
profile); |
} |
@@ -366,14 +356,13 @@ UserManagerScreenHandler::GetScreenType() const { |
} |
void UserManagerScreenHandler::Unlock(const std::string& user_email) { |
- const ProfileInfoCache& info_cache = |
- g_browser_process->profile_manager()->GetProfileInfoCache(); |
- const size_t profile_index = |
- GetIndexOfProfileWithEmail(info_cache, user_email); |
- DCHECK_LT(profile_index, info_cache.GetNumberOfProfiles()); |
- |
- authenticating_profile_index_ = profile_index; |
- ReportAuthenticationResult(true, ProfileMetrics::AUTH_LOCAL); |
+ base::FilePath path = |
+ profiles::GetPathOfProfileWithEmail(g_browser_process->profile_manager(), |
+ user_email); |
+ if (!path.empty()) { |
+ authenticating_profile_path_ = path; |
+ ReportAuthenticationResult(true, ProfileMetrics::AUTH_LOCAL); |
+ } |
} |
void UserManagerScreenHandler::AttemptEasySignin( |
@@ -420,6 +409,13 @@ void UserManagerScreenHandler::HandleAuthenticatedLaunchUser( |
if (!base::GetValueAsFilePath(*profile_path_value, &profile_path)) |
return; |
+ ProfileInfoCache& info_cache = |
+ g_browser_process->profile_manager()->GetProfileInfoCache(); |
Alexei Svitkine (slow)
2015/07/24 16:36:42
Nit: Make this a pointer via &g_browser_process->p
Roger Tawa OOO till Jul 10th
2015/07/24 17:01:29
I think I'll keep it as is. All the code in chrom
|
+ |
+ ProfileAttributesEntry* entry; |
+ if (!info_cache.GetProfileAttributesWithPath(profile_path, &entry)) |
+ return; |
+ |
base::string16 email_address; |
if (!args->GetString(1, &email_address)) |
return; |
@@ -428,16 +424,9 @@ void UserManagerScreenHandler::HandleAuthenticatedLaunchUser( |
if (!args->GetString(2, &password)) |
return; |
- const ProfileInfoCache& info_cache = |
- g_browser_process->profile_manager()->GetProfileInfoCache(); |
- size_t profile_index = info_cache.GetIndexOfProfileWithPath(profile_path); |
- |
- if (profile_index == std::string::npos) { |
- NOTREACHED(); |
- return; |
- } |
+ authenticating_profile_path_ = profile_path; |
- authenticating_profile_index_ = profile_index; |
+ size_t profile_index = info_cache.GetIndexOfProfileWithPath(profile_path); |
if (LocalAuth::ValidateLocalAuthCredentials(profile_index, password)) { |
ReportAuthenticationResult(true, ProfileMetrics::AUTH_LOCAL); |
return; |
@@ -453,29 +442,17 @@ void UserManagerScreenHandler::HandleAuthenticatedLaunchUser( |
oauth_client_.reset(new gaia::GaiaOAuthClient( |
web_ui()->GetWebContents()->GetBrowserContext()->GetRequestContext())); |
} |
- std::string token = info_cache.GetPasswordChangeDetectionTokenAtIndex( |
- profile_index); |
+ |
+ std::string token = entry->GetPasswordChangeDetectionToken(); |
if (!token.empty()) { |
oauth_client_->GetTokenHandleInfo(token, kMaxOAuthRetries, this); |
return; |
} |
// In order to support the upgrade case where we have a local hash but no |
- // password token, we fall back on (deprecated) ClientLogin. This will |
- // have to be removed in future versions as the service gets turned down |
- // but by then we'll have seamlessly updated the majority of users. |
- client_login_.reset(new GaiaAuthFetcher( |
- this, |
- GaiaConstants::kChromeSource, |
- web_ui()->GetWebContents()->GetBrowserContext()->GetRequestContext())); |
- |
- client_login_->StartClientLogin( |
- base::UTF16ToUTF8(email_address), |
- password, |
- GaiaConstants::kSyncService, |
- std::string(), |
- std::string(), |
- GaiaAuthFetcher::HostedAccountsAllowed); |
+ // password token, the user perform a full online reauth. |
+ UserManager::ShowReauthDialog(web_ui()->GetWebContents()->GetBrowserContext(), |
+ base::UTF16ToUTF8(email_address_)); |
Alexei Svitkine (slow)
2015/07/24 16:36:42
What's the reason for doing the conversion at the
Roger Tawa OOO till Jul 10th
2015/07/24 17:01:29
Everyone email is just an std::string (except when
Alexei Svitkine (slow)
2015/07/24 17:09:08
Woot, that's even better. :)
|
} |
void UserManagerScreenHandler::HandleRemoveUser(const base::ListValue* args) { |
@@ -579,23 +556,10 @@ void UserManagerScreenHandler::OnGetTokenInfoResponse( |
void UserManagerScreenHandler::OnOAuthError() { |
// Password has changed. Go through online signin flow. |
- // ... if we had it. Until then, use deprecated ClientLogin to validate |
- // the password. This will have to be changed soon. (TODO: bcwhite) |
- oauth_client_.reset(); |
- client_login_.reset(new GaiaAuthFetcher( |
- this, |
- GaiaConstants::kChromeSource, |
- web_ui()->GetWebContents()->GetBrowserContext()->GetRequestContext())); |
- |
DCHECK(!email_address_.empty()); |
- DCHECK(!password_attempt_.empty()); |
- client_login_->StartClientLogin( |
- base::UTF16ToUTF8(email_address_), |
- password_attempt_, |
- GaiaConstants::kSyncService, |
- std::string(), |
- std::string(), |
- GaiaAuthFetcher::HostedAccountsAllowed); |
+ oauth_client_.reset(); |
+ UserManager::ShowReauthDialog(web_ui()->GetWebContents()->GetBrowserContext(), |
+ base::UTF16ToUTF8(email_address_)); |
} |
void UserManagerScreenHandler::OnNetworkError(int response_code) { |
@@ -604,43 +568,6 @@ void UserManagerScreenHandler::OnNetworkError(int response_code) { |
ReportAuthenticationResult(false, ProfileMetrics::AUTH_FAILED_OFFLINE); |
} |
-void UserManagerScreenHandler::OnClientLoginSuccess( |
- const ClientLoginResult& result) { |
- oauth_client_.reset(); |
- LocalAuth::SetLocalAuthCredentials(authenticating_profile_index_, |
- password_attempt_); |
- ReportAuthenticationResult(true, ProfileMetrics::AUTH_ONLINE); |
-} |
- |
-void UserManagerScreenHandler::OnClientLoginFailure( |
- const GoogleServiceAuthError& error) { |
- const GoogleServiceAuthError::State state = error.state(); |
- // Some "error" results mean the password was correct but some other action |
- // should be taken. For our purposes, we only care that the password was |
- // correct so count those as a success. |
- bool success = (state == GoogleServiceAuthError::NONE || |
- state == GoogleServiceAuthError::CAPTCHA_REQUIRED || |
- state == GoogleServiceAuthError::TWO_FACTOR || |
- state == GoogleServiceAuthError::ACCOUNT_DELETED || |
- state == GoogleServiceAuthError::ACCOUNT_DISABLED || |
- state == GoogleServiceAuthError::WEB_LOGIN_REQUIRED); |
- |
- // If the password was correct, the user must have changed it since the |
- // profile was locked. Save the password to streamline future unlocks. |
- if (success) { |
- DCHECK(!password_attempt_.empty()); |
- LocalAuth::SetLocalAuthCredentials(authenticating_profile_index_, |
- password_attempt_); |
- } |
- |
- bool offline = error.IsTransientError(); |
- ProfileMetrics::ProfileAuth failure_metric = |
- offline ? ProfileMetrics::AUTH_FAILED_OFFLINE : |
- ProfileMetrics::AUTH_FAILED; |
- ReportAuthenticationResult( |
- success, success ? ProfileMetrics::AUTH_ONLINE : failure_metric); |
-} |
- |
void UserManagerScreenHandler::RegisterMessages() { |
web_ui()->RegisterMessageCallback(kJsApiUserManagerInitialize, |
base::Bind(&UserManagerScreenHandler::HandleInitialize, |
@@ -841,12 +768,8 @@ void UserManagerScreenHandler::ReportAuthenticationResult( |
password_attempt_.clear(); |
if (success) { |
- const ProfileInfoCache& info_cache = |
- g_browser_process->profile_manager()->GetProfileInfoCache(); |
- base::FilePath path = info_cache.GetPathOfProfileAtIndex( |
- authenticating_profile_index_); |
profiles::SwitchToProfile( |
- path, |
+ authenticating_profile_path_, |
desktop_type_, |
true, |
base::Bind(&UserManagerScreenHandler::OnSwitchToProfileComplete, |