| 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 0b6bd5dce376e5af55b6df43bd591f3e9129c0ef..829c1cef521e9d49f20df691cbc238d779f94cfe 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,
 | 
| 
 |