| Index: chrome/browser/signin/oauth2_token_service.cc
|
| diff --git a/chrome/browser/signin/oauth2_token_service.cc b/chrome/browser/signin/oauth2_token_service.cc
|
| index 1773871d8a739b911baa5f1cbbe27215f98d1b5c..351d7b4beba5eeb55d95eeb1bdfa55cc2718bb6f 100644
|
| --- a/chrome/browser/signin/oauth2_token_service.cc
|
| +++ b/chrome/browser/signin/oauth2_token_service.cc
|
| @@ -79,6 +79,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);
|
| @@ -91,6 +92,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_; }
|
| @@ -106,6 +108,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);
|
| @@ -121,6 +124,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_;
|
| @@ -148,6 +152,7 @@ OAuth2TokenService::Fetcher* OAuth2TokenService::Fetcher::CreateAndStart(
|
| 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) {
|
| @@ -156,6 +161,7 @@ OAuth2TokenService::Fetcher* OAuth2TokenService::Fetcher::CreateAndStart(
|
| getter,
|
| chrome_client_id,
|
| chrome_client_secret,
|
| + account_id,
|
| refresh_token,
|
| scopes,
|
| waiting_request);
|
| @@ -168,11 +174,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),
|
| @@ -299,6 +307,10 @@ const std::string& OAuth2TokenService::Fetcher::GetRefreshToken() const {
|
| return refresh_token_;
|
| }
|
|
|
| +const std::string& OAuth2TokenService::Fetcher::GetAccountId() const {
|
| + return account_id_;
|
| +}
|
| +
|
| OAuth2TokenService::Request::Request() {
|
| }
|
|
|
| @@ -328,14 +340,18 @@ void OAuth2TokenService::RemoveObserver(Observer* observer) {
|
| observer_list_.RemoveObserver(observer);
|
| }
|
|
|
| -bool OAuth2TokenService::RefreshTokenIsAvailable() {
|
| - return !GetRefreshToken().empty();
|
| +bool OAuth2TokenService::RefreshTokenIsAvailable(
|
| + const std::string& account_id) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + return !GetRefreshToken(account_id).empty();
|
| }
|
|
|
| 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(),
|
| @@ -345,11 +361,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,
|
| @@ -359,10 +377,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(),
|
| @@ -372,6 +392,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,
|
| @@ -381,7 +402,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(),
|
| @@ -395,6 +416,7 @@ OAuth2TokenService::StartRequestForClientWithContext(
|
| StartCacheLookupRequest(request.get(), scopes, consumer);
|
| } else {
|
| FetchOAuth2Token(request.get(),
|
| + account_id,
|
| getter,
|
| client_id,
|
| client_secret,
|
| @@ -404,11 +426,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
|
| @@ -426,6 +449,7 @@ void OAuth2TokenService::FetchOAuth2Token(RequestImpl* request,
|
| getter,
|
| client_id,
|
| client_secret,
|
| + account_id,
|
| refresh_token,
|
| scopes,
|
| request->AsWeakPtr());
|
| @@ -456,7 +480,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
|
| @@ -494,12 +518,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(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| TokenCache::iterator token_iterator = token_cache_.find(scopes);
|
| if (token_iterator == token_cache_.end())
|
| @@ -514,6 +540,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(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| TokenCache::iterator token_iterator = token_cache_.find(scopes);
|
| if (token_iterator != token_cache_.end() &&
|
| @@ -529,6 +556,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(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
|
|
| CacheEntry& token = token_cache_[scopes];
|
| @@ -536,7 +564,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.
|
| }
|
|
|
| @@ -595,10 +625,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();
|
| }
|
|
|