| 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 1aa96e09e740d4133ddc64689aa45d4a9c2d387a..bf2598e80310fe2593b539c287ac629f31d379da 100644
|
| --- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| +++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| @@ -436,27 +436,35 @@ void GaiaScreenHandler::HandleWebviewLoadAborted(
|
| UpdateState(error_reason);
|
| }
|
|
|
| -std::string GaiaScreenHandler::GetCanonicalEmail(
|
| +AccountId GaiaScreenHandler::GetAccountId(
|
| 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);
|
| + gaia::CanonicalizeEmail(gaia::SanitizeEmail(authenticated_email));
|
| + const AccountId authenticated_account_id(
|
| + AccountId::FromUserEmailGaiaId(canonicalized_email, gaia_id));
|
| +
|
| + // If we don't have UserManager instance (i.e. we are in unit test),
|
| + // or a known user has authenticated, just log in.
|
| 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;
|
| - }
|
| - }
|
| + if (!user_manager || user_manager->IsKnownUser(authenticated_account_id))
|
| + return authenticated_account_id;
|
| +
|
| + // If [part of] user id has changed, update stored data and connect user
|
| + // to existing home directory.
|
| + AccountId old_account_id(EmptyAccountId());
|
| + if (!user_manager->GetKnownUserAccountId(authenticated_account_id,
|
| + &old_account_id)) {
|
| + return authenticated_account_id;
|
| }
|
| - // For compatibility reasons, sanitized email is used.
|
| - return sanitized_email;
|
| +
|
| + if (old_account_id.GetUserEmail() != canonicalized_email) {
|
| + LOG(WARNING) << "Existing user '" << old_account_id.GetUserEmail()
|
| + << "' authenticated by alias '" << canonicalized_email << "'.";
|
| + return old_account_id;
|
| + }
|
| +
|
| + return authenticated_account_id;
|
| }
|
|
|
| void GaiaScreenHandler::HandleCompleteAuthentication(
|
| @@ -474,8 +482,7 @@ void GaiaScreenHandler::HandleCompleteAuthentication(
|
| const std::string sanitized_email = gaia::SanitizeEmail(email);
|
| Delegate()->SetDisplayEmail(sanitized_email);
|
|
|
| - const std::string canonical_email = GetCanonicalEmail(email, gaia_id);
|
| - UserContext user_context(canonical_email);
|
| + UserContext user_context(GetAccountId(email, gaia_id));
|
| user_context.SetGaiaID(gaia_id);
|
| user_context.SetKey(Key(password));
|
| user_context.SetAuthCode(auth_code);
|
| @@ -508,7 +515,7 @@ void GaiaScreenHandler::HandleCompleteLogin(const std::string& gaia_id,
|
|
|
| // Consumer management enrollment is in progress.
|
| const std::string owner_email =
|
| - user_manager::UserManager::Get()->GetOwnerEmail();
|
| + user_manager::UserManager::Get()->GetOwnerAccountId().GetUserEmail();
|
| if (typed_email != owner_email) {
|
| // Show Gaia sign-in screen again, since we only allow the owner to sign
|
| // in.
|
| @@ -595,8 +602,7 @@ 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);
|
| - const std::string canonical_email = GetCanonicalEmail(typed_email, gaia_id);
|
| - UserContext user_context(canonical_email);
|
| + UserContext user_context(GetAccountId(typed_email, gaia_id));
|
| user_context.SetGaiaID(gaia_id);
|
| user_context.SetKey(Key(password));
|
| user_context.SetAuthFlow(using_saml
|
| @@ -755,7 +761,7 @@ void GaiaScreenHandler::ShowGaiaScreenIfReady() {
|
| std::vector<std::string> input_methods =
|
| imm->GetInputMethodUtil()->GetHardwareLoginInputMethodIds();
|
| const std::string owner_im = SigninScreenHandler::GetUserLRUInputMethod(
|
| - user_manager::UserManager::Get()->GetOwnerEmail());
|
| + user_manager::UserManager::Get()->GetOwnerAccountId().GetUserEmail());
|
| const std::string system_im = g_browser_process->local_state()->GetString(
|
| language_prefs::kPreferredKeyboardLayout);
|
|
|
| @@ -839,7 +845,8 @@ void GaiaScreenHandler::LoadAuthExtension(bool force,
|
| context.is_enrolling_consumer_management = is_enrolling_consumer_management_;
|
|
|
| std::string gaia_id;
|
| - if (user_manager::UserManager::Get()->FindGaiaID(context.email, &gaia_id))
|
| + if (user_manager::UserManager::Get()->FindGaiaID(
|
| + AccountId::FromUserEmail(context.email), &gaia_id))
|
| context.gaia_id = gaia_id;
|
|
|
| if (Delegate()) {
|
| @@ -849,7 +856,7 @@ void GaiaScreenHandler::LoadAuthExtension(bool force,
|
| if (!context.email.empty()) {
|
| context.gaps_cookie =
|
| user_manager::UserManager::Get()->GetKnownUserGAPSCookie(
|
| - gaia::CanonicalizeEmail(context.email));
|
| + AccountId::FromUserEmail(gaia::CanonicalizeEmail(context.email)));
|
| }
|
|
|
| populated_email_.clear();
|
|
|