Chromium Code Reviews| Index: net/url_request/url_request_throttler_entry.cc |
| diff --git a/net/url_request/url_request_throttler_entry.cc b/net/url_request/url_request_throttler_entry.cc |
| index 60c6154d4983c68dacf9ab745d2d8f87fd7b902f..0720883a4ff1c8e10a7a740e760a92f3693c9cab 100644 |
| --- a/net/url_request/url_request_throttler_entry.cc |
| +++ b/net/url_request/url_request_throttler_entry.cc |
| @@ -14,6 +14,7 @@ |
| #include "base/values.h" |
| #include "net/base/load_flags.h" |
| #include "net/base/net_log.h" |
| +#include "net/url_request/url_request.h" |
| #include "net/url_request/url_request_throttler_header_interface.h" |
| #include "net/url_request/url_request_throttler_manager.h" |
| @@ -138,8 +139,10 @@ bool URLRequestThrottlerEntry::IsEntryOutdated() const { |
| // if an entry has more than one reference (the map will always hold one), |
| // it should not be considered outdated. |
| // |
| - // TODO(joi): Once the manager is not a Singleton, revisit whether |
| - // refcounting is needed at all. |
| + // We considered whether to make URLRequestThrottlerEntry objects |
| + // non-refcounted, but since any means of knowing whether they are |
| + // currently in use by others than the manager would be more or less |
| + // equivalent to a refcount, we kept them refcounted. |
| if (!HasOneRef()) |
| return false; |
| @@ -161,9 +164,12 @@ void URLRequestThrottlerEntry::DetachManager() { |
| manager_ = NULL; |
| } |
| -bool URLRequestThrottlerEntry::ShouldRejectRequest(int load_flags) const { |
| +bool URLRequestThrottlerEntry::ShouldRejectRequest(const URLRequest* request, |
| + int load_flags) const { |
| bool reject_request = false; |
| if (!is_backoff_disabled_ && !ExplicitUserRequest(load_flags) && |
| + (!request || !request->context() || |
| + request->context()->network_delegate()->CanRejectRequest(*request)) && |
|
eroman
2012/06/06 04:52:11
Is it possible for network_delegate() to be NULL (
Jói
2012/06/06 13:38:55
So say the trybots :) Added that to the check.
|
| GetBackoffEntry()->ShouldRejectRequest()) { |
| int num_failures = GetBackoffEntry()->failure_count(); |
| int release_after_ms = |
| @@ -237,10 +243,7 @@ base::TimeTicks |
| void URLRequestThrottlerEntry::UpdateWithResponse( |
| const std::string& host, |
| const URLRequestThrottlerHeaderInterface* response) { |
| - int response_code = response->GetResponseCode(); |
| - HandleMetricsTracking(response_code); |
| - |
| - if (IsConsideredError(response_code)) { |
| + if (IsConsideredError(response->GetResponseCode())) { |
| GetBackoffEntry()->InformOfRequest(false); |
| } else { |
| GetBackoffEntry()->InformOfRequest(true); |
| @@ -280,12 +283,6 @@ void URLRequestThrottlerEntry::Initialize() { |
| backoff_policy_.maximum_backoff_ms = kDefaultMaximumBackoffMs; |
| backoff_policy_.entry_lifetime_ms = kDefaultEntryLifetimeMs; |
| backoff_policy_.always_use_initial_delay = false; |
| - |
| - // We pretend we just had a successful response so that we have a |
| - // starting point to our tracking. This is called from the |
| - // constructor so we do not use the virtual ImplGetTimeNow(). |
| - last_successful_response_time_ = base::TimeTicks::Now(); |
| - last_response_was_success_ = true; |
| } |
| bool URLRequestThrottlerEntry::IsConsideredError(int response_code) { |
| @@ -322,34 +319,6 @@ void URLRequestThrottlerEntry::HandleThrottlingHeader( |
| DisableBackoffThrottling(); |
| if (manager_) |
| manager_->AddToOptOutList(host); |
| - } else { |
| - // TODO(joi): Log this. |
| - } |
| -} |
| - |
| -void URLRequestThrottlerEntry::HandleMetricsTracking(int response_code) { |
| - // Note that we are not interested in whether the code is considered |
| - // an error for the backoff logic, but whether it is a 5xx error in |
| - // general. This is because here, we are tracking the apparent total |
| - // downtime of a server. |
| - if (response_code >= 500) { |
| - last_response_was_success_ = false; |
| - } else { |
| - base::TimeTicks now = ImplGetTimeNow(); |
| - if (!last_response_was_success_) { |
| - // We are transitioning from failure to success, so generate our stats. |
| - base::TimeDelta down_time = now - last_successful_response_time_; |
| - int failure_count = GetBackoffEntry()->failure_count(); |
| - |
| - UMA_HISTOGRAM_COUNTS("Throttling.FailureCountAtSuccess", failure_count); |
| - UMA_HISTOGRAM_CUSTOM_TIMES( |
| - "Throttling.PerceivedDowntime", down_time, |
| - base::TimeDelta::FromMilliseconds(10), |
| - base::TimeDelta::FromHours(6), 50); |
| - } |
| - |
| - last_successful_response_time_ = now; |
| - last_response_was_success_ = true; |
| } |
| } |