diff options
author | Torne (Richard Coles) <torne@google.com> | 2014-02-21 12:16:55 +0000 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2014-02-21 12:16:55 +0000 |
commit | 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7 (patch) | |
tree | 5d4ae202b870bd86673f596f0d424bc4b3e55ebe /chrome/browser/signin/signin_names_io_thread.cc | |
parent | e862bac9c33104a29d98631d62668ae7b6676510 (diff) | |
download | chromium_org-5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7.tar.gz |
Merge from Chromium at DEPS revision 251904
This commit was generated by merge_to_master.py.
Change-Id: I1f9543259d7d2a57d81aa41a1b84f85837439d21
Diffstat (limited to 'chrome/browser/signin/signin_names_io_thread.cc')
-rw-r--r-- | chrome/browser/signin/signin_names_io_thread.cc | 87 |
1 files changed, 44 insertions, 43 deletions
diff --git a/chrome/browser/signin/signin_names_io_thread.cc b/chrome/browser/signin/signin_names_io_thread.cc index e1f7b317ca..84b7c62dae 100644 --- a/chrome/browser/signin/signin_names_io_thread.cc +++ b/chrome/browser/signin/signin_names_io_thread.cc @@ -12,17 +12,11 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/signin_manager.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/notification_service.h" -SigninNamesOnIOThread::SigninNamesOnIOThread() { +SigninNamesOnIOThread::SigninNamesOnIOThread() : resources_released_(false) { CheckOnUIThread(); - // We want to register for all profiles, not just for the current profile. - registrar_.reset(new content::NotificationRegistrar); - registrar_->Add(this, chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, - content::NotificationService::AllSources()); - registrar_->Add(this, chrome::NOTIFICATION_GOOGLE_SIGNED_OUT, - content::NotificationService::AllSources()); + SigninManagerFactory::GetInstance()->AddObserver(this); // Get list of profiles and record the email addresses of any connected // accounts. @@ -41,7 +35,9 @@ SigninNamesOnIOThread::SigninNamesOnIOThread() { SigninNamesOnIOThread::~SigninNamesOnIOThread() { CheckOnIOThread(); - DCHECK(!registrar_) << "Must call ReleaseResourcesOnUIThread() first"; + DCHECK(resources_released_) << "Must call ReleaseResourcesOnUIThread() first"; + DCHECK(!observed_managers_.size()) + << "Shouldn't be observing any SigninManagers"; } const SigninNamesOnIOThread::EmailSet& @@ -52,31 +48,36 @@ const SigninNamesOnIOThread::EmailSet& void SigninNamesOnIOThread::ReleaseResourcesOnUIThread() { CheckOnUIThread(); - registrar_.reset(); + DCHECK(!resources_released_); + SigninManagerFactory::GetInstance()->RemoveObserver(this); + + for (std::set<SigninManagerBase*>::iterator i = observed_managers_.begin(); + i != observed_managers_.end(); + ++i) { + (*i)->RemoveObserver(this); + } + observed_managers_.clear(); + + resources_released_ = true; } -void SigninNamesOnIOThread::Observe( - int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) { - CheckOnUIThread(); +void SigninNamesOnIOThread::SigninManagerCreated(SigninManagerBase* manager) { + manager->AddObserver(this); + observed_managers_.insert(manager); +} - switch (type) { - case chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL: { - const GoogleServiceSigninSuccessDetails* signin_details = - content::Details<GoogleServiceSigninSuccessDetails>(details).ptr(); - PostTaskToIOThread(type, UTF8ToUTF16(signin_details->username)); - break; - } - case chrome::NOTIFICATION_GOOGLE_SIGNED_OUT: { - const GoogleServiceSignoutDetails* signout_details = - content::Details<GoogleServiceSignoutDetails>(details).ptr(); - PostTaskToIOThread(type, UTF8ToUTF16(signout_details->username)); - break; - } - default: - NOTREACHED() << "Unexpected type=" << type; - } +void SigninNamesOnIOThread::SigninManagerShutdown(SigninManagerBase* manager) { + manager->RemoveObserver(this); + observed_managers_.erase(manager); +} + +void SigninNamesOnIOThread::GoogleSigninSucceeded(const std::string& username, + const std::string& password) { + PostTaskToIOThread(true, base::UTF8ToUTF16(username)); +} + +void SigninNamesOnIOThread::GoogleSignedOut(const std::string& username) { + PostTaskToIOThread(false, base::UTF8ToUTF16(username)); } void SigninNamesOnIOThread::CheckOnIOThread() const { @@ -87,26 +88,26 @@ void SigninNamesOnIOThread::CheckOnUIThread() const { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); } -void SigninNamesOnIOThread::PostTaskToIOThread( - int type, - const base::string16& email) { +void SigninNamesOnIOThread::PostTaskToIOThread(bool add, + const base::string16& email) { if (content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)) { - UpdateOnIOThread(type, email); + UpdateOnIOThread(add, email); } else { bool may_run = content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind(&SigninNamesOnIOThread::UpdateOnIOThread, - base::Unretained(this), type, email)); + content::BrowserThread::IO, + FROM_HERE, + base::Bind(&SigninNamesOnIOThread::UpdateOnIOThread, + base::Unretained(this), + add, + email)); DCHECK(may_run); } } -void SigninNamesOnIOThread::UpdateOnIOThread( - int type, - const base::string16& email) { +void SigninNamesOnIOThread::UpdateOnIOThread(bool add, + const base::string16& email) { CheckOnIOThread(); - if (type == chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL) { + if (add) { emails_.insert(email); } else { emails_.erase(email); |