Index: chrome/browser/signin/signin_manager.cc |
diff --git a/chrome/browser/signin/signin_manager.cc b/chrome/browser/signin/signin_manager.cc |
index 988e2073fe0d10acf4ade3a33f2d3b910bd78526..f76a94bf226db95426e276b2fdeeb91319c28573 100644 |
--- a/chrome/browser/signin/signin_manager.cc |
+++ b/chrome/browser/signin/signin_manager.cc |
@@ -117,6 +117,18 @@ bool SigninManager::HasSigninProcess() const { |
return signin_host_id_ != ChildProcessHost::kInvalidUniqueID; |
} |
+void SigninManager::AddMergeSessionObserver( |
+ GoogleAutoLoginHelper::Observer* observer) { |
+ if (merge_session_helper_) |
+ merge_session_helper_->AddObserver(observer); |
+} |
+ |
+void SigninManager::RemoveMergeSessionObserver( |
+ GoogleAutoLoginHelper::Observer* observer) { |
+ if (merge_session_helper_) |
+ merge_session_helper_->RemoveObserver(observer); |
+} |
+ |
SigninManager::~SigninManager() { |
} |
@@ -369,6 +381,9 @@ void SigninManager::Initialize(Profile* profile, PrefService* local_state) { |
} |
void SigninManager::Shutdown() { |
+ if (merge_session_helper_) |
+ merge_session_helper_->CancelAll(); |
+ |
local_state_pref_registrar_.RemoveAll(); |
account_id_helper_.reset(); |
SigninManagerBase::Shutdown(); |
@@ -557,6 +572,15 @@ void SigninManager::CompletePendingSignin() { |
DCHECK(!possibly_invalid_username_.empty()); |
OnSignedIn(possibly_invalid_username_); |
+ // If inline sign in is enabled, but new profile management is not, perform a |
+ // merge session now to push the user's credentials into the cookie jar. |
+ bool do_merge_session_in_signin_manager = |
+ !switches::IsEnableWebBasedSignin() && |
+ !switches::IsNewProfileManagement(); |
+ |
+ if (do_merge_session_in_signin_manager) |
+ merge_session_helper_.reset(new GoogleAutoLoginHelper(profile_, NULL)); |
+ |
DCHECK(!temp_oauth_login_tokens_.refresh_token.empty()); |
DCHECK(!GetAuthenticatedUsername().empty()); |
ProfileOAuth2TokenService* token_service = |
@@ -564,6 +588,9 @@ void SigninManager::CompletePendingSignin() { |
token_service->UpdateCredentials(GetAuthenticatedUsername(), |
temp_oauth_login_tokens_.refresh_token); |
temp_oauth_login_tokens_ = ClientOAuthResult(); |
+ |
+ if (do_merge_session_in_signin_manager) |
+ merge_session_helper_->LogIn(); |
} |
void SigninManager::OnExternalSigninCompleted(const std::string& username) { |