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

Side by Side Diff: net/url_request/url_request_http_job.cc

Issue 1374883002: Add UMAs for checking header values against RFC 7230 in //net (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reflect comments. Created 5 years 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "net/url_request/url_request_http_job.h" 5 #include "net/url_request/url_request_http_job.h"
6 6
7 #include "base/base_switches.h" 7 #include "base/base_switches.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 476
477 void URLRequestHttpJob::StartTransactionInternal() { 477 void URLRequestHttpJob::StartTransactionInternal() {
478 // This should only be called while the request's status is IO_PENDING. 478 // This should only be called while the request's status is IO_PENDING.
479 DCHECK_EQ(URLRequestStatus::IO_PENDING, request_->status().status()); 479 DCHECK_EQ(URLRequestStatus::IO_PENDING, request_->status().status());
480 480
481 // NOTE: This method assumes that request_info_ is already setup properly. 481 // NOTE: This method assumes that request_info_ is already setup properly.
482 482
483 // If we already have a transaction, then we should restart the transaction 483 // If we already have a transaction, then we should restart the transaction
484 // with auth provided by auth_credentials_. 484 // with auth provided by auth_credentials_.
485 485
486 bool invalid_header_values_in_RFC7230 = false;
davidben 2015/12/17 20:00:41 Nit: I would lowercase RFC.
hiroshige 2015/12/22 06:33:50 Done.
487 for (HttpRequestHeaders::Iterator it(request_info_.extra_headers);
488 it.GetNext();) {
489 if (!HttpUtil::IsValidHeaderValueRFC7230(it.value())) {
490 invalid_header_values_in_RFC7230 = true;
491 break;
492 }
493 }
494 UMA_HISTOGRAM_BOOLEAN("Net.HttpRequestContainsInvalidHeaderValuesInRFC7230",
495 invalid_header_values_in_RFC7230);
496
486 int rv; 497 int rv;
487 498
488 if (network_delegate()) { 499 if (network_delegate()) {
489 network_delegate()->NotifySendHeaders( 500 network_delegate()->NotifySendHeaders(
490 request_, request_info_.extra_headers); 501 request_, request_info_.extra_headers);
491 } 502 }
492 503
493 if (transaction_.get()) { 504 if (transaction_.get()) {
494 rv = transaction_->RestartWithAuth(auth_credentials_, start_callback_); 505 rv = transaction_->RestartWithAuth(auth_credentials_, start_callback_);
495 auth_credentials_ = AuthCredentials(); 506 auth_credentials_ = AuthCredentials();
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 // Clear the IO_PENDING status 936 // Clear the IO_PENDING status
926 SetStatus(URLRequestStatus()); 937 SetStatus(URLRequestStatus());
927 938
928 const URLRequestContext* context = request_->context(); 939 const URLRequestContext* context = request_->context();
929 940
930 if (result == OK) { 941 if (result == OK) {
931 if (transaction_ && transaction_->GetResponseInfo()) { 942 if (transaction_ && transaction_->GetResponseInfo()) {
932 SetProxyServer(transaction_->GetResponseInfo()->proxy_server); 943 SetProxyServer(transaction_->GetResponseInfo()->proxy_server);
933 } 944 }
934 scoped_refptr<HttpResponseHeaders> headers = GetResponseHeaders(); 945 scoped_refptr<HttpResponseHeaders> headers = GetResponseHeaders();
946
947 if (headers) {
948 void* iter = NULL;
949 std::string name;
950 std::string value;
951 bool invalid_header_values_in_RFC7230 = false;
952 while (headers->EnumerateHeaderLines(&iter, &name, &value)) {
953 if (!HttpUtil::IsValidHeaderValueRFC7230(value)) {
954 invalid_header_values_in_RFC7230 = true;
955 break;
956 }
957 }
958 UMA_HISTOGRAM_BOOLEAN(
959 "Net.HttpResponseContainsInvalidHeaderValuesInRFC7230",
960 invalid_header_values_in_RFC7230);
961 }
962
935 if (network_delegate()) { 963 if (network_delegate()) {
936 // Note that |this| may not be deleted until 964 // Note that |this| may not be deleted until
937 // |on_headers_received_callback_| or 965 // |on_headers_received_callback_| or
938 // |NetworkDelegate::URLRequestDestroyed()| has been called. 966 // |NetworkDelegate::URLRequestDestroyed()| has been called.
939 OnCallToDelegate(); 967 OnCallToDelegate();
940 allowed_unsafe_redirect_url_ = GURL(); 968 allowed_unsafe_redirect_url_ = GURL();
941 int error = network_delegate()->NotifyHeadersReceived( 969 int error = network_delegate()->NotifyHeadersReceived(
942 request_, 970 request_,
943 on_headers_received_callback_, 971 on_headers_received_callback_,
944 headers.get(), 972 headers.get(),
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
1578 return override_response_headers_.get() ? 1606 return override_response_headers_.get() ?
1579 override_response_headers_.get() : 1607 override_response_headers_.get() :
1580 transaction_->GetResponseInfo()->headers.get(); 1608 transaction_->GetResponseInfo()->headers.get();
1581 } 1609 }
1582 1610
1583 void URLRequestHttpJob::NotifyURLRequestDestroyed() { 1611 void URLRequestHttpJob::NotifyURLRequestDestroyed() {
1584 awaiting_callback_ = false; 1612 awaiting_callback_ = false;
1585 } 1613 }
1586 1614
1587 } // namespace net 1615 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698