| 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 18912441d1211176b833b3995b64f582e4af4ad3..1773871d8a739b911baa5f1cbbe27215f98d1b5c 100644
|
| --- a/chrome/browser/signin/oauth2_token_service.cc
|
| +++ b/chrome/browser/signin/oauth2_token_service.cc
|
| @@ -315,7 +315,6 @@ OAuth2TokenService::OAuth2TokenService() {
|
| }
|
|
|
| OAuth2TokenService::~OAuth2TokenService() {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| // Release all the pending fetchers.
|
| STLDeleteContainerPairSecondPointers(
|
| pending_fetchers_.begin(), pending_fetchers_.end());
|
| @@ -330,7 +329,6 @@ void OAuth2TokenService::RemoveObserver(Observer* observer) {
|
| }
|
|
|
| bool OAuth2TokenService::RefreshTokenIsAvailable() {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| return !GetRefreshToken().empty();
|
| }
|
|
|
| @@ -383,20 +381,34 @@ OAuth2TokenService::StartRequestForClientWithContext(
|
|
|
| scoped_ptr<RequestImpl> request(new RequestImpl(consumer));
|
|
|
| - std::string refresh_token = GetRefreshToken();
|
| - if (refresh_token.empty()) {
|
| + if (!RefreshTokenIsAvailable()) {
|
| base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
|
| &RequestImpl::InformConsumer,
|
| request->AsWeakPtr(),
|
| - GoogleServiceAuthError(
|
| - GoogleServiceAuthError::USER_NOT_SIGNED_UP),
|
| + GoogleServiceAuthError(GoogleServiceAuthError::USER_NOT_SIGNED_UP),
|
| std::string(),
|
| base::Time()));
|
| return request.PassAs<Request>();
|
| }
|
|
|
| - if (HasCacheEntry(scopes))
|
| - return StartCacheLookupRequest(scopes, consumer);
|
| + if (HasCacheEntry(scopes)) {
|
| + StartCacheLookupRequest(request.get(), scopes, consumer);
|
| + } else {
|
| + FetchOAuth2Token(request.get(),
|
| + getter,
|
| + client_id,
|
| + client_secret,
|
| + scopes);
|
| + }
|
| + return request.PassAs<Request>();
|
| +}
|
| +
|
| +void OAuth2TokenService::FetchOAuth2Token(RequestImpl* request,
|
| + net::URLRequestContextGetter* getter,
|
| + const std::string& client_id,
|
| + const std::string& client_secret,
|
| + const ScopeSet& scopes) {
|
| + std::string refresh_token = GetRefreshToken();
|
|
|
| // If there is already a pending fetcher for |scopes| and |refresh_token|,
|
| // simply register this |request| for those results rather than starting
|
| @@ -406,7 +418,7 @@ OAuth2TokenService::StartRequestForClientWithContext(
|
| pending_fetchers_.find(fetch_parameters);
|
| if (iter != pending_fetchers_.end()) {
|
| iter->second->AddWaitingRequest(request->AsWeakPtr());
|
| - return request.PassAs<Request>();
|
| + return;
|
| }
|
|
|
| pending_fetchers_[fetch_parameters] =
|
| @@ -417,23 +429,20 @@ OAuth2TokenService::StartRequestForClientWithContext(
|
| refresh_token,
|
| scopes,
|
| request->AsWeakPtr());
|
| - return request.PassAs<Request>();
|
| }
|
|
|
| -scoped_ptr<OAuth2TokenService::Request>
|
| - OAuth2TokenService::StartCacheLookupRequest(
|
| - const OAuth2TokenService::ScopeSet& scopes,
|
| - OAuth2TokenService::Consumer* consumer) {
|
| +void OAuth2TokenService::StartCacheLookupRequest(
|
| + RequestImpl* request,
|
| + const OAuth2TokenService::ScopeSet& scopes,
|
| + OAuth2TokenService::Consumer* consumer) {
|
| CHECK(HasCacheEntry(scopes));
|
| const CacheEntry* cache_entry = GetCacheEntry(scopes);
|
| - scoped_ptr<RequestImpl> request(new RequestImpl(consumer));
|
| base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
|
| &RequestImpl::InformConsumer,
|
| request->AsWeakPtr(),
|
| GoogleServiceAuthError(GoogleServiceAuthError::NONE),
|
| cache_entry->access_token,
|
| cache_entry->expiration_date));
|
| - return request.PassAs<Request>();
|
| }
|
|
|
| void OAuth2TokenService::InvalidateToken(const ScopeSet& scopes,
|
|
|