summaryrefslogtreecommitdiff
path: root/chrome/browser/signin/signin_names_io_thread.cc
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2014-02-21 12:16:55 +0000
committerTorne (Richard Coles) <torne@google.com>2014-02-21 12:16:55 +0000
commit5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7 (patch)
tree5d4ae202b870bd86673f596f0d424bc4b3e55ebe /chrome/browser/signin/signin_names_io_thread.cc
parente862bac9c33104a29d98631d62668ae7b6676510 (diff)
downloadchromium_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.cc87
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);