| Index: chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| index 50b3d0853ad401d2b6ad45a85fdbabe8a0b2c5f3..bdfd9f89ea736af36941292b892397a160cb4855 100644
|
| --- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| +++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| @@ -480,6 +480,29 @@ void GaiaScreenHandler::HandleWebviewLoadAborted(
|
| UpdateState(error_reason);
|
| }
|
|
|
| +std::string GaiaScreenHandler::GetCanonicalEmail(
|
| + const std::string& authenticated_email,
|
| + const std::string& gaia_id) const {
|
| + const std::string sanitized_email = gaia::SanitizeEmail(authenticated_email);
|
| +
|
| + const std::string canonicalized_email =
|
| + gaia::CanonicalizeEmail(sanitized_email);
|
| + user_manager::UserManager* user_manager = user_manager::UserManager::Get();
|
| + if (user_manager && !user_manager->IsKnownUser(canonicalized_email)) {
|
| + std::string old_canonical_email;
|
| + if (user_manager->GetKnownUserCanonicalEmail(gaia_id,
|
| + &old_canonical_email)) {
|
| + if (old_canonical_email != canonicalized_email) {
|
| + LOG(WARNING) << "Existing user '" << old_canonical_email
|
| + << "' authenticated by alias '" << sanitized_email << "'.";
|
| + return old_canonical_email;
|
| + }
|
| + }
|
| + }
|
| + // For compatibility reasons, sanitized email is used.
|
| + return sanitized_email;
|
| +}
|
| +
|
| void GaiaScreenHandler::HandleCompleteAuthentication(
|
| const std::string& gaia_id,
|
| const std::string& email,
|
| @@ -494,7 +517,9 @@ void GaiaScreenHandler::HandleCompleteAuthentication(
|
| DCHECK(!gaia_id.empty());
|
| const std::string sanitized_email = gaia::SanitizeEmail(email);
|
| Delegate()->SetDisplayEmail(sanitized_email);
|
| - UserContext user_context(sanitized_email);
|
| +
|
| + const std::string canonical_email = GetCanonicalEmail(email, gaia_id);
|
| + UserContext user_context(canonical_email);
|
| user_context.SetGaiaID(gaia_id);
|
| user_context.SetKey(Key(password));
|
| user_context.SetAuthCode(auth_code);
|
| @@ -615,7 +640,8 @@ void GaiaScreenHandler::DoCompleteLogin(const std::string& gaia_id,
|
| DCHECK(!gaia_id.empty());
|
| const std::string sanitized_email = gaia::SanitizeEmail(typed_email);
|
| Delegate()->SetDisplayEmail(sanitized_email);
|
| - UserContext user_context(sanitized_email);
|
| + const std::string canonical_email = GetCanonicalEmail(typed_email, gaia_id);
|
| + UserContext user_context(canonical_email);
|
| user_context.SetGaiaID(gaia_id);
|
| user_context.SetKey(Key(password));
|
| user_context.SetAuthFlow(using_saml
|
|
|