| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/signin/oauth2_token_service.h" | 5 #include "chrome/browser/signin/oauth2_token_service.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 // This is intentional -- some consumers may need the token for cleanup | 206 // This is intentional -- some consumers may need the token for cleanup |
| 207 // tasks. https://chromiumcodereview.appspot.com/11312124/ | 207 // tasks. https://chromiumcodereview.appspot.com/11312124/ |
| 208 oauth2_token_service_->RegisterCacheEntry(refresh_token_, | 208 oauth2_token_service_->RegisterCacheEntry(refresh_token_, |
| 209 scopes_, | 209 scopes_, |
| 210 access_token_, | 210 access_token_, |
| 211 expiration_date_); | 211 expiration_date_); |
| 212 // Deregisters itself from the service to prevent more waiting requests to | 212 // Deregisters itself from the service to prevent more waiting requests to |
| 213 // be added when it calls back the waiting requests. | 213 // be added when it calls back the waiting requests. |
| 214 oauth2_token_service_->OnFetchComplete(this); | 214 oauth2_token_service_->OnFetchComplete(this); |
| 215 InformWaitingRequests(); | 215 InformWaitingRequests(); |
| 216 MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 216 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
| 217 } | 217 } |
| 218 | 218 |
| 219 void OAuth2TokenService::Fetcher::OnGetTokenFailure( | 219 void OAuth2TokenService::Fetcher::OnGetTokenFailure( |
| 220 const GoogleServiceAuthError& error) { | 220 const GoogleServiceAuthError& error) { |
| 221 fetcher_.reset(); | 221 fetcher_.reset(); |
| 222 | 222 |
| 223 if (ShouldRetry(error) && retry_number_ < kMaxFetchRetryNum) { | 223 if (ShouldRetry(error) && retry_number_ < kMaxFetchRetryNum) { |
| 224 int64 backoff = ComputeExponentialBackOffMilliseconds(retry_number_); | 224 int64 backoff = ComputeExponentialBackOffMilliseconds(retry_number_); |
| 225 ++retry_number_; | 225 ++retry_number_; |
| 226 retry_timer_.Stop(); | 226 retry_timer_.Stop(); |
| 227 retry_timer_.Start(FROM_HERE, | 227 retry_timer_.Start(FROM_HERE, |
| 228 base::TimeDelta::FromMilliseconds(backoff), | 228 base::TimeDelta::FromMilliseconds(backoff), |
| 229 this, | 229 this, |
| 230 &OAuth2TokenService::Fetcher::Start); | 230 &OAuth2TokenService::Fetcher::Start); |
| 231 return; | 231 return; |
| 232 } | 232 } |
| 233 | 233 |
| 234 // Fetch completes. | 234 // Fetch completes. |
| 235 error_ = error; | 235 error_ = error; |
| 236 | 236 |
| 237 // Deregisters itself from the service to prevent more waiting requests to be | 237 // Deregisters itself from the service to prevent more waiting requests to be |
| 238 // added when it calls back the waiting requests. | 238 // added when it calls back the waiting requests. |
| 239 oauth2_token_service_->OnFetchComplete(this); | 239 oauth2_token_service_->OnFetchComplete(this); |
| 240 InformWaitingRequests(); | 240 InformWaitingRequests(); |
| 241 MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 241 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
| 242 } | 242 } |
| 243 | 243 |
| 244 // static | 244 // static |
| 245 bool OAuth2TokenService::Fetcher::ShouldRetry( | 245 bool OAuth2TokenService::Fetcher::ShouldRetry( |
| 246 const GoogleServiceAuthError& error) { | 246 const GoogleServiceAuthError& error) { |
| 247 GoogleServiceAuthError::State error_state = error.state(); | 247 GoogleServiceAuthError::State error_state = error.state(); |
| 248 return error_state == GoogleServiceAuthError::CONNECTION_FAILED || | 248 return error_state == GoogleServiceAuthError::CONNECTION_FAILED || |
| 249 error_state == GoogleServiceAuthError::REQUEST_CANCELED || | 249 error_state == GoogleServiceAuthError::REQUEST_CANCELED || |
| 250 error_state == GoogleServiceAuthError::SERVICE_UNAVAILABLE; | 250 error_state == GoogleServiceAuthError::SERVICE_UNAVAILABLE; |
| 251 } | 251 } |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 | 317 |
| 318 scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest( | 318 scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest( |
| 319 const OAuth2TokenService::ScopeSet& scopes, | 319 const OAuth2TokenService::ScopeSet& scopes, |
| 320 OAuth2TokenService::Consumer* consumer) { | 320 OAuth2TokenService::Consumer* consumer) { |
| 321 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 321 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 322 | 322 |
| 323 scoped_ptr<RequestImpl> request(new RequestImpl(consumer)); | 323 scoped_ptr<RequestImpl> request(new RequestImpl(consumer)); |
| 324 | 324 |
| 325 std::string refresh_token = GetRefreshToken(); | 325 std::string refresh_token = GetRefreshToken(); |
| 326 if (refresh_token.empty()) { | 326 if (refresh_token.empty()) { |
| 327 MessageLoop::current()->PostTask(FROM_HERE, base::Bind( | 327 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind( |
| 328 &OAuth2TokenService::InformConsumer, | 328 &OAuth2TokenService::InformConsumer, |
| 329 request->AsWeakPtr(), | 329 request->AsWeakPtr(), |
| 330 GoogleServiceAuthError( | 330 GoogleServiceAuthError( |
| 331 GoogleServiceAuthError::USER_NOT_SIGNED_UP), | 331 GoogleServiceAuthError::USER_NOT_SIGNED_UP), |
| 332 std::string(), | 332 std::string(), |
| 333 base::Time())); | 333 base::Time())); |
| 334 return request.PassAs<Request>(); | 334 return request.PassAs<Request>(); |
| 335 } | 335 } |
| 336 | 336 |
| 337 if (HasCacheEntry(scopes)) | 337 if (HasCacheEntry(scopes)) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 353 return request.PassAs<Request>(); | 353 return request.PassAs<Request>(); |
| 354 } | 354 } |
| 355 | 355 |
| 356 scoped_ptr<OAuth2TokenService::Request> | 356 scoped_ptr<OAuth2TokenService::Request> |
| 357 OAuth2TokenService::StartCacheLookupRequest( | 357 OAuth2TokenService::StartCacheLookupRequest( |
| 358 const OAuth2TokenService::ScopeSet& scopes, | 358 const OAuth2TokenService::ScopeSet& scopes, |
| 359 OAuth2TokenService::Consumer* consumer) { | 359 OAuth2TokenService::Consumer* consumer) { |
| 360 CHECK(HasCacheEntry(scopes)); | 360 CHECK(HasCacheEntry(scopes)); |
| 361 const CacheEntry* cache_entry = GetCacheEntry(scopes); | 361 const CacheEntry* cache_entry = GetCacheEntry(scopes); |
| 362 scoped_ptr<RequestImpl> request(new RequestImpl(consumer)); | 362 scoped_ptr<RequestImpl> request(new RequestImpl(consumer)); |
| 363 MessageLoop::current()->PostTask(FROM_HERE, base::Bind( | 363 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind( |
| 364 &OAuth2TokenService::InformConsumer, | 364 &OAuth2TokenService::InformConsumer, |
| 365 request->AsWeakPtr(), | 365 request->AsWeakPtr(), |
| 366 GoogleServiceAuthError(GoogleServiceAuthError::NONE), | 366 GoogleServiceAuthError(GoogleServiceAuthError::NONE), |
| 367 cache_entry->access_token, | 367 cache_entry->access_token, |
| 368 cache_entry->expiration_date)); | 368 cache_entry->expiration_date)); |
| 369 return request.PassAs<Request>(); | 369 return request.PassAs<Request>(); |
| 370 } | 370 } |
| 371 | 371 |
| 372 void OAuth2TokenService::InvalidateToken(const ScopeSet& scopes, | 372 void OAuth2TokenService::InvalidateToken(const ScopeSet& scopes, |
| 373 const std::string& invalid_token) { | 373 const std::string& invalid_token) { |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 } | 465 } |
| 466 | 466 |
| 467 void OAuth2TokenService::ClearCache() { | 467 void OAuth2TokenService::ClearCache() { |
| 468 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 468 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 469 token_cache_.clear(); | 469 token_cache_.clear(); |
| 470 } | 470 } |
| 471 | 471 |
| 472 int OAuth2TokenService::cache_size_for_testing() const { | 472 int OAuth2TokenService::cache_size_for_testing() const { |
| 473 return token_cache_.size(); | 473 return token_cache_.size(); |
| 474 } | 474 } |
| OLD | NEW |