| Index: chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
|
| diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
|
| index ac7717e6c5b9a35d713d061238a320003490954f..a3d600e474a264d2e4b073d581ca1afeaad22ad5 100644
|
| --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
|
| +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
|
| @@ -14,6 +14,7 @@
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/signin/about_signin_internals_factory.h"
|
| #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
|
| +#include "chrome/browser/signin/signin_manager_factory.h"
|
| #include "chrome/browser/sync/profile_sync_service.h"
|
| #include "chrome/browser/sync/profile_sync_service_factory.h"
|
| #include "chrome/browser/ui/browser_finder.h"
|
| @@ -106,7 +107,8 @@ void InlineSigninHelper::OnSigninOAuthInformationAvailable(
|
| about_signin_internals->OnRefreshTokenReceived("Successful");
|
|
|
| signin::Source source = signin::GetSourceForPromoURL(current_url_);
|
| - if (source == signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT) {
|
| + if (source == signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT ||
|
| + source == signin::SOURCE_REAUTH) {
|
| ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)->
|
| UpdateCredentials(email, refresh_token);
|
|
|
| @@ -137,18 +139,15 @@ void InlineSigninHelper::OnSigninOAuthInformationAvailable(
|
| choose_what_to_sync_ ?
|
| OneClickSigninSyncStarter::NO_CONFIRMATION :
|
| OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN;
|
| - bool start_signin = true;
|
|
|
| - if (source != signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT) {
|
| - start_signin = !OneClickSigninHelper::HandleCrossAccountError(
|
| + bool start_signin =
|
| + !OneClickSigninHelper::HandleCrossAccountError(
|
| contents, "",
|
| email, password_, refresh_token,
|
| OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT,
|
| source, start_mode,
|
| base::Bind(&InlineLoginHandlerImpl::SyncStarterCallback,
|
| handler_));
|
| - }
|
| -
|
| if (start_signin) {
|
| // Call OneClickSigninSyncStarter to exchange oauth code for tokens.
|
| // OneClickSigninSyncStarter will delete itself once the job is done.
|
| @@ -252,9 +251,24 @@ void InlineLoginHandlerImpl::CompleteLogin(const base::ListValue* args) {
|
| one_click_signin::HISTOGRAM_WITH_DEFAULTS);
|
|
|
| OneClickSigninHelper::CanOfferFor can_offer_for =
|
| - source == signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT ?
|
| - OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT :
|
| OneClickSigninHelper::CAN_OFFER_FOR_ALL;
|
| + switch (source) {
|
| + case signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT:
|
| + can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT;
|
| + break;
|
| + case signin::SOURCE_REAUTH: {
|
| + std::string primary_username =
|
| + SigninManagerFactory::GetForProfile(
|
| + Profile::FromWebUI(web_ui()))->GetAuthenticatedUsername();
|
| + if (!gaia::AreEmailsSame(default_email, primary_username))
|
| + can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT;
|
| + break;
|
| + }
|
| + default:
|
| + // No need to change |can_offer_for|.
|
| + break;
|
| + }
|
| +
|
| std::string error_msg;
|
| bool can_offer = OneClickSigninHelper::CanOffer(
|
| contents, can_offer_for, email_, &error_msg);
|
|
|