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

Unified Diff: google_apis/gaia/oauth2_token_service.cc

Issue 23382008: Making OAuth2TokenService multi-login aware, updating callers, minor fixes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing a unit test, addressing comments from courage@ Created 7 years, 3 months 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: google_apis/gaia/oauth2_token_service.cc
diff --git a/google_apis/gaia/oauth2_token_service.cc b/google_apis/gaia/oauth2_token_service.cc
index 0834c60d65e487bb51345d4174453737e5285b94..3fa5ff232f0a44db74c3ce78efefb7dc2c9ae824 100644
--- a/google_apis/gaia/oauth2_token_service.cc
+++ b/google_apis/gaia/oauth2_token_service.cc
@@ -75,6 +75,7 @@ class OAuth2TokenService::Fetcher : public OAuth2AccessTokenConsumer {
// The given |oauth2_token_service| will be informed when fetching is done.
static Fetcher* CreateAndStart(OAuth2TokenService* oauth2_token_service,
net::URLRequestContextGetter* getter,
+ const std::string& account_id,
const std::string& chrome_client_id,
const std::string& chrome_client_secret,
const std::string& refresh_token,
@@ -89,6 +90,7 @@ class OAuth2TokenService::Fetcher : public OAuth2AccessTokenConsumer {
const OAuth2TokenService::ScopeSet& GetScopeSet() const;
const std::string& GetRefreshToken() const;
+ const std::string& GetAccountId() const;
// The error result from this fetcher.
const GoogleServiceAuthError& error() const { return error_; }
@@ -104,6 +106,7 @@ class OAuth2TokenService::Fetcher : public OAuth2AccessTokenConsumer {
net::URLRequestContextGetter* getter,
const std::string& chrome_client_id,
const std::string& chrome_client_secret,
+ const std::string& account_id,
const std::string& refresh_token,
const OAuth2TokenService::ScopeSet& scopes,
base::WeakPtr<RequestImpl> waiting_request);
@@ -119,6 +122,7 @@ class OAuth2TokenService::Fetcher : public OAuth2AccessTokenConsumer {
// (whichever comes first).
OAuth2TokenService* const oauth2_token_service_;
scoped_refptr<net::URLRequestContextGetter> getter_;
+ const std::string account_id_;
const std::string refresh_token_;
const OAuth2TokenService::ScopeSet scopes_;
std::vector<base::WeakPtr<RequestImpl> > waiting_requests_;
@@ -144,6 +148,7 @@ class OAuth2TokenService::Fetcher : public OAuth2AccessTokenConsumer {
OAuth2TokenService::Fetcher* OAuth2TokenService::Fetcher::CreateAndStart(
OAuth2TokenService* oauth2_token_service,
net::URLRequestContextGetter* getter,
+ const std::string& account_id,
const std::string& chrome_client_id,
const std::string& chrome_client_secret,
const std::string& refresh_token,
@@ -154,6 +159,7 @@ OAuth2TokenService::Fetcher* OAuth2TokenService::Fetcher::CreateAndStart(
getter,
chrome_client_id,
chrome_client_secret,
+ account_id,
refresh_token,
scopes,
waiting_request);
@@ -166,11 +172,13 @@ OAuth2TokenService::Fetcher::Fetcher(
net::URLRequestContextGetter* getter,
const std::string& chrome_client_id,
const std::string& chrome_client_secret,
+ const std::string& account_id,
const std::string& refresh_token,
const OAuth2TokenService::ScopeSet& scopes,
base::WeakPtr<RequestImpl> waiting_request)
: oauth2_token_service_(oauth2_token_service),
getter_(getter),
+ account_id_(account_id),
refresh_token_(refresh_token),
scopes_(scopes),
retry_number_(0),
@@ -297,6 +305,10 @@ const std::string& OAuth2TokenService::Fetcher::GetRefreshToken() const {
return refresh_token_;
}
+const std::string& OAuth2TokenService::Fetcher::GetAccountId() const {
+ return account_id_;
+}
+
OAuth2TokenService::Request::Request() {
}
@@ -326,14 +338,22 @@ void OAuth2TokenService::RemoveObserver(Observer* observer) {
observer_list_.RemoveObserver(observer);
}
-bool OAuth2TokenService::RefreshTokenIsAvailable() {
- return !GetRefreshToken().empty();
+bool OAuth2TokenService::RefreshTokenIsAvailable(
+ const std::string& account_id) {
+ DCHECK(CalledOnValidThread());
+ return !GetRefreshToken(account_id).empty();
+}
+
+std::vector<std::string> OAuth2TokenService::GetAccounts() {
+ return std::vector<std::string>();
}
scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest(
+ const std::string& account_id,
const OAuth2TokenService::ScopeSet& scopes,
OAuth2TokenService::Consumer* consumer) {
return StartRequestForClientWithContext(
+ account_id,
GetRequestContext(),
GaiaUrls::GetInstance()->oauth2_chrome_client_id(),
GaiaUrls::GetInstance()->oauth2_chrome_client_secret(),
@@ -343,11 +363,13 @@ scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest(
scoped_ptr<OAuth2TokenService::Request>
OAuth2TokenService::StartRequestForClient(
+ const std::string& account_id,
const std::string& client_id,
const std::string& client_secret,
const OAuth2TokenService::ScopeSet& scopes,
OAuth2TokenService::Consumer* consumer) {
return StartRequestForClientWithContext(
+ account_id,
GetRequestContext(),
client_id,
client_secret,
@@ -357,10 +379,12 @@ OAuth2TokenService::StartRequestForClient(
scoped_ptr<OAuth2TokenService::Request>
OAuth2TokenService::StartRequestWithContext(
+ const std::string& account_id,
net::URLRequestContextGetter* getter,
const ScopeSet& scopes,
Consumer* consumer) {
return StartRequestForClientWithContext(
+ account_id,
getter,
GaiaUrls::GetInstance()->oauth2_chrome_client_id(),
GaiaUrls::GetInstance()->oauth2_chrome_client_secret(),
@@ -370,6 +394,7 @@ OAuth2TokenService::StartRequestWithContext(
scoped_ptr<OAuth2TokenService::Request>
OAuth2TokenService::StartRequestForClientWithContext(
+ const std::string& account_id,
net::URLRequestContextGetter* getter,
const std::string& client_id,
const std::string& client_secret,
@@ -379,7 +404,7 @@ OAuth2TokenService::StartRequestForClientWithContext(
scoped_ptr<RequestImpl> request(new RequestImpl(consumer));
- if (!RefreshTokenIsAvailable()) {
+ if (!RefreshTokenIsAvailable(account_id)) {
base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
&RequestImpl::InformConsumer,
request->AsWeakPtr(),
@@ -393,6 +418,7 @@ OAuth2TokenService::StartRequestForClientWithContext(
StartCacheLookupRequest(request.get(), scopes, consumer);
} else {
FetchOAuth2Token(request.get(),
+ account_id,
getter,
client_id,
client_secret,
@@ -402,11 +428,12 @@ OAuth2TokenService::StartRequestForClientWithContext(
}
void OAuth2TokenService::FetchOAuth2Token(RequestImpl* request,
+ const std::string& account_id,
net::URLRequestContextGetter* getter,
const std::string& client_id,
const std::string& client_secret,
const ScopeSet& scopes) {
- std::string refresh_token = GetRefreshToken();
+ std::string refresh_token = GetRefreshToken(account_id);
// If there is already a pending fetcher for |scopes| and |refresh_token|,
// simply register this |request| for those results rather than starting
@@ -422,6 +449,7 @@ void OAuth2TokenService::FetchOAuth2Token(RequestImpl* request,
pending_fetchers_[fetch_parameters] =
Fetcher::CreateAndStart(this,
getter,
+ account_id,
client_id,
client_secret,
refresh_token,
@@ -454,7 +482,7 @@ void OAuth2TokenService::OnFetchComplete(Fetcher* fetcher) {
// Update the auth error state so auth errors are appropriately communicated
// to the user.
- UpdateAuthError(fetcher->error());
+ UpdateAuthError(fetcher->GetAccountId(), fetcher->error());
// Note |fetcher| is recorded in |pending_fetcher_| mapped to its refresh
// token and scope set. This is guaranteed as follows; here a Fetcher is said
@@ -492,12 +520,14 @@ void OAuth2TokenService::OnFetchComplete(Fetcher* fetcher) {
bool OAuth2TokenService::HasCacheEntry(
const OAuth2TokenService::ScopeSet& scopes) {
+ // TODO(fgorski): Update keying of the cache to include account_id.
const CacheEntry* cache_entry = GetCacheEntry(scopes);
return cache_entry && cache_entry->access_token.length();
}
const OAuth2TokenService::CacheEntry* OAuth2TokenService::GetCacheEntry(
const OAuth2TokenService::ScopeSet& scopes) {
+ // TODO(fgorski): Update keying of the cache to include account_id.
DCHECK(CalledOnValidThread());
TokenCache::iterator token_iterator = token_cache_.find(scopes);
if (token_iterator == token_cache_.end())
@@ -512,6 +542,7 @@ const OAuth2TokenService::CacheEntry* OAuth2TokenService::GetCacheEntry(
bool OAuth2TokenService::RemoveCacheEntry(
const OAuth2TokenService::ScopeSet& scopes,
const std::string& token_to_remove) {
+ // TODO(fgorski): Update keying of the cache to include account_id.
DCHECK(CalledOnValidThread());
TokenCache::iterator token_iterator = token_cache_.find(scopes);
if (token_iterator != token_cache_.end() &&
@@ -527,6 +558,7 @@ void OAuth2TokenService::RegisterCacheEntry(
const OAuth2TokenService::ScopeSet& scopes,
const std::string& access_token,
const base::Time& expiration_date) {
+ // TODO(fgorski): Update keying of the cache to include account_id.
DCHECK(CalledOnValidThread());
CacheEntry& token = token_cache_[scopes];
@@ -534,7 +566,9 @@ void OAuth2TokenService::RegisterCacheEntry(
token.expiration_date = expiration_date;
}
-void OAuth2TokenService::UpdateAuthError(const GoogleServiceAuthError& error) {
+void OAuth2TokenService::UpdateAuthError(
+ const std::string& account_id,
+ const GoogleServiceAuthError& error) {
// Default implementation does nothing.
}
@@ -593,10 +627,6 @@ void OAuth2TokenService::FireRefreshTokensLoaded() {
FOR_EACH_OBSERVER(Observer, observer_list_, OnRefreshTokensLoaded());
}
-void OAuth2TokenService::FireRefreshTokensCleared() {
- FOR_EACH_OBSERVER(Observer, observer_list_, OnRefreshTokensCleared());
-}
-
int OAuth2TokenService::cache_size_for_testing() const {
return token_cache_.size();
}

Powered by Google App Engine
This is Rietveld 408576698