Index: chrome/browser/renderer_host/buffered_resource_handler.cc |
=================================================================== |
--- chrome/browser/renderer_host/buffered_resource_handler.cc (revision 7938) |
+++ chrome/browser/renderer_host/buffered_resource_handler.cc (working copy) |
@@ -4,10 +4,33 @@ |
#include "chrome/browser/renderer_host/buffered_resource_handler.h" |
+#include "base/histogram.h" |
#include "net/base/mime_sniffer.h" |
#include "chrome/browser/renderer_host/download_throttling_resource_handler.h" |
#include "chrome/browser/renderer_host/resource_dispatcher_host.h" |
+namespace { |
+ |
+void RecordSnifferMetrics(bool sniffing_blocked, |
+ bool we_would_like_to_sniff, |
+ const std::string& mime_type) { |
+ static BooleanHistogram nosniff_usage(L"nosniff.usage"); |
+ nosniff_usage.SetFlags(kUmaTargetedHistogramFlag); |
+ nosniff_usage.AddBoolean(sniffing_blocked); |
+ |
+ if (sniffing_blocked) { |
+ static BooleanHistogram nosniff_otherwise(L"nosniff.otherwise"); |
+ nosniff_otherwise.SetFlags(kUmaTargetedHistogramFlag); |
+ nosniff_otherwise.AddBoolean(we_would_like_to_sniff); |
+ |
+ static BooleanHistogram nosniff_empty_mime_type(L"nosniff.empty_mime_type"); |
+ nosniff_empty_mime_type.SetFlags(kUmaTargetedHistogramFlag); |
+ nosniff_empty_mime_type.AddBoolean(mime_type.empty()); |
+ } |
+} |
+ |
+} // namespace |
+ |
BufferedResourceHandler::BufferedResourceHandler(ResourceHandler* handler, |
ResourceDispatcherHost* host, |
URLRequest* request) |
@@ -92,8 +115,14 @@ |
std::string content_type_options; |
request_->GetResponseHeaderByName("x-content-type-options", |
&content_type_options); |
- if (content_type_options != "nosniff" && |
- net::ShouldSniffMimeType(request_->url(), mime_type)) { |
+ |
+ const bool sniffing_blocked = (content_type_options == "nosniff"); |
+ const bool we_would_like_to_sniff = |
+ net::ShouldSniffMimeType(request_->url(), mime_type); |
+ |
+ RecordSnifferMetrics(sniffing_blocked, we_would_like_to_sniff, mime_type); |
+ |
+ if (!sniffing_blocked && we_would_like_to_sniff) { |
// We're going to look at the data before deciding what the content type |
// is. That means we need to delay sending the ResponseStarted message |
// over the IPC channel. |