From 4555495af33c594ec5b8e3d8340116978c4287cc Mon Sep 17 00:00:00 2001 From: msarda Date: Tue, 3 Feb 2015 13:46:32 -0800 Subject: Avoid double registration with content settings in account reconcilor. This CL avoids a double registration for content settings in account rconcilor as this leads to a DCHECK being fired during a reauthentication operation. BUG=454507 Review URL: https://codereview.chromium.org/896723006 Cr-Commit-Position: refs/heads/master@{#314409} --- components/signin/core/browser/account_reconcilor.cc | 14 ++++++++++++++ components/signin/core/browser/account_reconcilor.h | 1 + 2 files changed, 15 insertions(+) (limited to 'components/signin') diff --git a/components/signin/core/browser/account_reconcilor.cc b/components/signin/core/browser/account_reconcilor.cc index 3103479..b39062b 100644 --- a/components/signin/core/browser/account_reconcilor.cc +++ b/components/signin/core/browser/account_reconcilor.cc @@ -65,6 +65,7 @@ AccountReconcilor::AccountReconcilor(ProfileOAuth2TokenService* token_service, NULL), registered_with_token_service_(false), registered_with_merge_session_helper_(false), + registered_with_content_settings_(false), is_reconcile_started_(false), first_execution_(true), are_gaia_accounts_set_(false), @@ -144,11 +145,24 @@ void AccountReconcilor::UnregisterWithSigninManager() { } void AccountReconcilor::RegisterWithContentSettings() { + VLOG(1) << "AccountReconcilor::RegisterWithContentSettings"; + // During re-auth, the reconcilor will get a callback about successful signin + // even when the profile is already connected. Avoid re-registering + // with the token service since this will DCHECK. + if (registered_with_content_settings_) + return; + client_->AddContentSettingsObserver(this); + registered_with_content_settings_ = true; } void AccountReconcilor::UnregisterWithContentSettings() { + VLOG(1) << "AccountReconcilor::UnregisterWithContentSettings"; + if (!registered_with_content_settings_) + return; + client_->RemoveContentSettingsObserver(this); + registered_with_content_settings_ = false; } void AccountReconcilor::RegisterWithTokenService() { diff --git a/components/signin/core/browser/account_reconcilor.h b/components/signin/core/browser/account_reconcilor.h index 1b903aa..1d7adcf 100644 --- a/components/signin/core/browser/account_reconcilor.h +++ b/components/signin/core/browser/account_reconcilor.h @@ -193,6 +193,7 @@ class AccountReconcilor : public KeyedService, scoped_ptr gaia_fetcher_; bool registered_with_token_service_; bool registered_with_merge_session_helper_; + bool registered_with_content_settings_; // True while the reconcilor is busy checking or managing the accounts in // this profile. -- cgit v1.1