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 2155ea9a54e0c1264b0556580c9e41dd468e8ef2..6565a8dcb8608e759f08b56c6a0b0c033b7e81cc 100644 |
--- a/net/url_request/url_request_http_job.cc |
+++ b/net/url_request/url_request_http_job.cc |
@@ -484,6 +484,17 @@ void URLRequestHttpJob::StartTransactionInternal() { |
// If we already have a transaction, then we should restart the transaction |
// with auth provided by auth_credentials_. |
+ bool invalid_header_values_in_rfc7230 = false; |
+ for (HttpRequestHeaders::Iterator it(request_info_.extra_headers); |
+ it.GetNext();) { |
+ if (!HttpUtil::IsValidHeaderValueRFC7230(it.value())) { |
+ invalid_header_values_in_rfc7230 = true; |
+ break; |
+ } |
+ } |
+ UMA_HISTOGRAM_BOOLEAN("Net.HttpRequest.ContainsInvalidHeaderValuesInRFC7230", |
+ invalid_header_values_in_rfc7230); |
+ |
int rv; |
if (network_delegate()) { |
@@ -928,6 +939,23 @@ void URLRequestHttpJob::OnStartCompleted(int result) { |
SetProxyServer(transaction_->GetResponseInfo()->proxy_server); |
} |
scoped_refptr<HttpResponseHeaders> headers = GetResponseHeaders(); |
+ |
+ if (headers) { |
+ void* iter = NULL; |
+ std::string name; |
+ std::string value; |
+ bool invalid_header_values_in_rfc7230 = false; |
+ while (headers->EnumerateHeaderLines(&iter, &name, &value)) { |
+ if (!HttpUtil::IsValidHeaderValueRFC7230(value)) { |
+ invalid_header_values_in_rfc7230 = true; |
+ break; |
+ } |
+ } |
+ UMA_HISTOGRAM_BOOLEAN( |
+ "Net.HttpResponse.ContainsInvalidHeaderValuesInRFC7230", |
+ invalid_header_values_in_rfc7230); |
+ } |
+ |
if (network_delegate()) { |
// Note that |this| may not be deleted until |
// |on_headers_received_callback_| or |