OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "google_apis/gaia/oauth2_token_service.h" | 5 #include "google_apis/gaia/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" |
11 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
| 12 #include "base/metrics/histogram_macros.h" |
12 #include "base/profiler/scoped_tracker.h" | 13 #include "base/profiler/scoped_tracker.h" |
13 #include "base/rand_util.h" | 14 #include "base/rand_util.h" |
14 #include "base/stl_util.h" | 15 #include "base/stl_util.h" |
15 #include "base/time/time.h" | 16 #include "base/time/time.h" |
16 #include "base/timer/timer.h" | 17 #include "base/timer/timer.h" |
17 #include "google_apis/gaia/gaia_urls.h" | 18 #include "google_apis/gaia/gaia_urls.h" |
18 #include "google_apis/gaia/google_service_auth_error.h" | 19 #include "google_apis/gaia/google_service_auth_error.h" |
19 #include "google_apis/gaia/oauth2_access_token_fetcher_impl.h" | 20 #include "google_apis/gaia/oauth2_access_token_fetcher_impl.h" |
20 #include "net/url_request/url_request_context_getter.h" | 21 #include "net/url_request/url_request_context_getter.h" |
21 | 22 |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 } | 285 } |
285 | 286 |
286 void OAuth2TokenService::Fetcher::OnGetTokenFailure( | 287 void OAuth2TokenService::Fetcher::OnGetTokenFailure( |
287 const GoogleServiceAuthError& error) { | 288 const GoogleServiceAuthError& error) { |
288 fetcher_.reset(); | 289 fetcher_.reset(); |
289 | 290 |
290 if (ShouldRetry(error) && retry_number_ < max_fetch_retry_num_) { | 291 if (ShouldRetry(error) && retry_number_ < max_fetch_retry_num_) { |
291 base::TimeDelta backoff = base::TimeDelta::FromMilliseconds( | 292 base::TimeDelta backoff = base::TimeDelta::FromMilliseconds( |
292 ComputeExponentialBackOffMilliseconds(retry_number_)); | 293 ComputeExponentialBackOffMilliseconds(retry_number_)); |
293 ++retry_number_; | 294 ++retry_number_; |
| 295 UMA_HISTOGRAM_ENUMERATION("Signin.OAuth2TokenGetRetry", |
| 296 error.state(), GoogleServiceAuthError::NUM_STATES); |
294 retry_timer_.Stop(); | 297 retry_timer_.Stop(); |
295 retry_timer_.Start(FROM_HERE, | 298 retry_timer_.Start(FROM_HERE, |
296 backoff, | 299 backoff, |
297 this, | 300 this, |
298 &OAuth2TokenService::Fetcher::Start); | 301 &OAuth2TokenService::Fetcher::Start); |
299 return; | 302 return; |
300 } | 303 } |
301 | 304 |
| 305 UMA_HISTOGRAM_ENUMERATION("Signin.OAuth2TokenGetFailure", |
| 306 error.state(), GoogleServiceAuthError::NUM_STATES); |
302 error_ = error; | 307 error_ = error; |
303 InformWaitingRequestsAndDelete(); | 308 InformWaitingRequestsAndDelete(); |
304 } | 309 } |
305 | 310 |
306 // Returns an exponential backoff in milliseconds including randomness less than | 311 // Returns an exponential backoff in milliseconds including randomness less than |
307 // 1000 ms when retrying fetching an OAuth2 access token. | 312 // 1000 ms when retrying fetching an OAuth2 access token. |
308 int64 OAuth2TokenService::Fetcher::ComputeExponentialBackOffMilliseconds( | 313 int64 OAuth2TokenService::Fetcher::ComputeExponentialBackOffMilliseconds( |
309 int retry_num) { | 314 int retry_num) { |
310 DCHECK(retry_num < max_fetch_retry_num_); | 315 DCHECK(retry_num < max_fetch_retry_num_); |
311 int64 exponential_backoff_in_seconds = 1 << retry_num; | 316 int64 exponential_backoff_in_seconds = 1 << retry_num; |
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 const std::string& account_id, | 847 const std::string& account_id, |
843 const ScopeSet& scopes) const { | 848 const ScopeSet& scopes) const { |
844 PendingFetcherMap::const_iterator iter = pending_fetchers_.find( | 849 PendingFetcherMap::const_iterator iter = pending_fetchers_.find( |
845 OAuth2TokenService::RequestParameters( | 850 OAuth2TokenService::RequestParameters( |
846 client_id, | 851 client_id, |
847 account_id, | 852 account_id, |
848 scopes)); | 853 scopes)); |
849 return iter == pending_fetchers_.end() ? | 854 return iter == pending_fetchers_.end() ? |
850 0 : iter->second->GetWaitingRequestCount(); | 855 0 : iter->second->GetWaitingRequestCount(); |
851 } | 856 } |
OLD | NEW |