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 e35938088eaf77926a08624e14578e8666249ec8..b02bec4e1d40f1ce179eac81844af93054b7f920 100644 |
--- a/net/url_request/url_request_http_job.cc |
+++ b/net/url_request/url_request_http_job.cc |
@@ -55,6 +55,8 @@ |
#include "net/proxy/proxy_info.h" |
#include "net/proxy/proxy_retry_info.h" |
#include "net/proxy/proxy_service.h" |
+#include "net/reporting/reporting_metrics.h" |
+#include "net/reporting/reporting_service.h" |
#include "net/ssl/channel_id_service.h" |
#include "net/ssl/ssl_cert_request_info.h" |
#include "net/ssl/ssl_config_service.h" |
@@ -368,6 +370,7 @@ void URLRequestHttpJob::NotifyHeadersComplete() { |
ProcessStrictTransportSecurityHeader(); |
ProcessPublicKeyPinsHeader(); |
ProcessExpectCTHeader(); |
+ ProcessReportToHeader(); |
// Handle the server notification of a new SDCH dictionary. |
SdchManager* sdch_manager(request()->context()->sdch_manager()); |
@@ -860,6 +863,31 @@ void URLRequestHttpJob::ProcessExpectCTHeader() { |
} |
} |
+void URLRequestHttpJob::ProcessReportToHeader() { |
+ DCHECK(response_info_); |
+ |
+ ReportingService* reporting_service = |
+ request_->context()->reporting_service(); |
+ if (!reporting_service) { |
+ HistogramHeader(HEADER_FATE_DROPPED_NO_SERVICE); |
+ return; |
+ } |
+ |
+ // Only accept Report-To headers on HTTPS connections that have no |
+ // certificate errors. |
+ // TODO(juliatuttle): Do we need to check cert status? |
+ const SSLInfo& ssl_info = response_info_->ssl_info; |
+ if (!ssl_info.is_valid() || IsCertStatusError(ssl_info.cert_status)) |
+ return; |
+ |
+ HttpResponseHeaders* headers = GetResponseHeaders(); |
+ std::string value; |
+ if (!headers->GetNormalizedHeader("Report-To", &value)) |
+ return; |
+ |
+ reporting_service->ProcessHeader(request_info_.url.GetOrigin(), value); |
+} |
+ |
void URLRequestHttpJob::OnStartCompleted(int result) { |
TRACE_EVENT0(kNetTracingCategory, "URLRequestHttpJob::OnStartCompleted"); |
RecordTimer(); |