Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2190)

Unified Diff: net/url_request/url_request_http_job.cc

Issue 1153093002: Implement URLRequestBackoffManager for managing Backoff headers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/url_request/url_request_http_job.cc
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index 96a6a0039e4e8f548aad3831c132864f123d8234..e58afa086eb66030f84706ceeba66c8204acf367 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -195,6 +195,7 @@ URLRequestHttpJob::URLRequestHttpJob(
base::Unretained(this))),
awaiting_callback_(false),
http_user_agent_settings_(http_user_agent_settings),
+ backoff_manager_(request->context()->backoff_manager()),
weak_factory_(this) {
URLRequestThrottlerManager* manager = request->context()->throttler_manager();
if (manager)
@@ -301,6 +302,23 @@ void URLRequestHttpJob::NotifyBeforeSendProxyHeadersCallback(
}
}
+void URLRequestHttpJob::NotifyBeforeNetworkStart(bool* defer) {
+ if (!request_)
+ return;
+ if (backoff_manager_) {
+ if (backoff_manager_->ShouldRejectRequest(request()->url(),
+ request()->request_time())) {
+ *defer = true;
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&URLRequestHttpJob::OnStartCompleted,
+ weak_factory_.GetWeakPtr(), ERR_TEMPORARY_BACKOFF));
+ return;
+ }
+ }
+ URLRequestJob::NotifyBeforeNetworkStart(defer);
+}
+
void URLRequestHttpJob::NotifyHeadersComplete() {
DCHECK(!response_info_);
@@ -313,6 +331,10 @@ void URLRequestHttpJob::NotifyHeadersComplete() {
if (!is_cached_content_ && throttling_entry_.get())
throttling_entry_->UpdateWithResponse(GetResponseCode());
+ if (!is_cached_content_ && backoff_manager_)
+ backoff_manager_->UpdateWithResponse(request()->url(), GetResponseHeaders(),
+ request()->request_time());
+
// The ordering of these calls is not important.
ProcessStrictTransportSecurityHeader();
ProcessPublicKeyPinsHeader();

Powered by Google App Engine
This is Rietveld 408576698