Index: components/signin/core/browser/signin_manager.cc |
diff --git a/components/signin/core/browser/signin_manager.cc b/components/signin/core/browser/signin_manager.cc |
index 0875b9a3461b2b96009f5d1cf367f9c8fc289f71..c59c76cf9226c3ebca3b4d46dca347af1a977fbe 100644 |
--- a/components/signin/core/browser/signin_manager.cc |
+++ b/components/signin/core/browser/signin_manager.cc |
@@ -74,14 +74,23 @@ SigninManager::SigninManager(SigninClient* client, |
void SigninManager::AddMergeSessionObserver( |
MergeSessionHelper::Observer* observer) { |
- if (merge_session_helper_) |
- merge_session_helper_->AddObserver(observer); |
+ merge_session_observer_list_.AddObserver(observer); |
} |
void SigninManager::RemoveMergeSessionObserver( |
MergeSessionHelper::Observer* observer) { |
- if (merge_session_helper_) |
- merge_session_helper_->RemoveObserver(observer); |
+ merge_session_observer_list_.RemoveObserver(observer); |
+} |
+ |
+void SigninManager::MergeSessionCompleted(const std::string& account_id, |
+ const GoogleServiceAuthError& error) { |
+ FOR_EACH_OBSERVER(MergeSessionHelper::Observer, merge_session_observer_list_, |
+ MergeSessionCompleted(account_id, error)); |
+} |
+ |
+void SigninManager::GetCheckConnectionInfoCompleted(bool succeeded) { |
+ FOR_EACH_OBSERVER(MergeSessionHelper::Observer, merge_session_observer_list_, |
+ GetCheckConnectionInfoCompleted(succeeded)); |
} |
SigninManager::~SigninManager() {} |
@@ -275,8 +284,10 @@ void SigninManager::Initialize(PrefService* local_state) { |
void SigninManager::Shutdown() { |
account_tracker_service_->RemoveObserver(this); |
- if (merge_session_helper_) |
+ if (merge_session_helper_) { |
merge_session_helper_->CancelAll(); |
+ merge_session_helper_->RemoveObserver(this); |
+ } |
local_state_pref_registrar_.RemoveAll(); |
account_id_helper_.reset(); |
@@ -363,13 +374,16 @@ void SigninManager::MergeSigninCredentialIntoCookieJar() { |
if (!IsAuthenticated()) |
return; |
- // Don't execute 2 MergeSessionHelpers. New account takes priority. |
- if (merge_session_helper_.get() && merge_session_helper_->is_running()) |
- merge_session_helper_->CancelAll(); |
+ // Don't execute two MergeSessionHelpers. New account takes priority. |
+ if (merge_session_helper_) { |
+ if (merge_session_helper_->is_running()) |
+ merge_session_helper_->CancelAll(); |
+ merge_session_helper_->RemoveObserver(this); |
+ } |
merge_session_helper_.reset(new MergeSessionHelper( |
token_service_, GaiaConstants::kChromeSource, |
- client_->GetURLRequestContext(), NULL)); |
+ client_->GetURLRequestContext(), this)); |
merge_session_helper_->LogIn(GetAuthenticatedAccountId()); |
} |