Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5267)

Unified Diff: chrome/browser/signin/google_auto_login_helper.cc

Issue 63253003: Fix issues with token refresh in AccountReconcilor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wip Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/signin/google_auto_login_helper.cc
diff --git a/chrome/browser/signin/google_auto_login_helper.cc b/chrome/browser/signin/google_auto_login_helper.cc
index 09cb58a6827945e21241be7770792d1d6e1c5ed4..1cf1cf2ec6ea914048a4a7ed6a04ee8cf87e14bf 100644
--- a/chrome/browser/signin/google_auto_login_helper.cc
+++ b/chrome/browser/signin/google_auto_login_helper.cc
@@ -12,37 +12,79 @@
GoogleAutoLoginHelper::GoogleAutoLoginHelper(Profile* profile)
: profile_(profile) {}
-GoogleAutoLoginHelper::~GoogleAutoLoginHelper() {}
+GoogleAutoLoginHelper::~GoogleAutoLoginHelper() {
+ DCHECK(accounts_.empty());
+}
void GoogleAutoLoginHelper::LogIn() {
- uber_token_fetcher_.reset(new UbertokenFetcher(profile_, this));
+ // This is the code path for non-mirror world.
+ uber_token_fetcher_.reset(CreateNewUbertokenFetcher());
uber_token_fetcher_->StartFetchingToken();
+ DCHECK(accounts_.empty());
}
void GoogleAutoLoginHelper::LogIn(const std::string& account_id) {
- uber_token_fetcher_.reset(new UbertokenFetcher(profile_, this));
- uber_token_fetcher_->StartFetchingToken(account_id);
+ if (uber_token_fetcher_.get()) {
+ accounts_.push_back(account_id);
+ } else {
+ uber_token_fetcher_.reset(CreateNewUbertokenFetcher());
+ uber_token_fetcher_->StartFetchingToken(account_id);
+ }
}
void GoogleAutoLoginHelper::OnUbertokenSuccess(const std::string& uber_token) {
- gaia_auth_fetcher_.reset(new GaiaAuthFetcher(
- this, GaiaConstants::kChromeSource, profile_->GetRequestContext()));
+ VLOG(1) << "GoogleAutoLoginHelper::OnUbertokenSuccess";
+ gaia_auth_fetcher_.reset(CreateNewGaiaAuthFetcher());
gaia_auth_fetcher_->StartMergeSession(uber_token);
}
void GoogleAutoLoginHelper::OnUbertokenFailure(
const GoogleServiceAuthError& error) {
VLOG(1) << "Failed to retrieve ubertoken, error: " << error.ToString();
- base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
+ if (base::MessageLoop::current()) {
+ base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
+ } else {
+ delete this;
+ }
}
void GoogleAutoLoginHelper::OnMergeSessionSuccess(const std::string& data) {
DVLOG(1) << "MergeSession successful." << data;
- base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
+ if (accounts_.empty()) {
+ if (base::MessageLoop::current()) {
+ base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
+ } else {
+ delete this;
+ }
+ } else {
+ uber_token_fetcher_.reset(CreateNewUbertokenFetcher());
+ uber_token_fetcher_->StartFetchingToken(accounts_.front());
+ accounts_.pop_front();
+ }
}
void GoogleAutoLoginHelper::OnMergeSessionFailure(
const GoogleServiceAuthError& error) {
VLOG(1) << "Failed MergeSession request, error: " << error.ToString();
- base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
+ // TODO(acleung): Depending on the return error we should probably
+ // take different actions instead of just throw our hands up.
+
+ // Clearning pending accounts for now.
+ accounts_.clear();
+
+ if (base::MessageLoop::current()) {
+ base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
+ } else {
+ delete this;
+ }
+}
+
+UbertokenFetcher* GoogleAutoLoginHelper::CreateNewUbertokenFetcher() {
+ return new UbertokenFetcher(profile_, this);
+}
+
+GaiaAuthFetcher* GoogleAutoLoginHelper::CreateNewGaiaAuthFetcher() {
+ return new GaiaAuthFetcher(
+ this, GaiaConstants::kChromeSource, profile_->GetRequestContext());
}
+
« no previous file with comments | « chrome/browser/signin/google_auto_login_helper.h ('k') | chrome/browser/signin/google_auto_login_helper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698