Index: chrome/browser/net/chrome_network_delegate.cc |
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc |
index ae84c3eb7eb7b887cbf8ad2baf8febf69a305fa7..b892db9abd6c93f218d9dce2aa5c0ab9b766e0cd 100644 |
--- a/chrome/browser/net/chrome_network_delegate.cc |
+++ b/chrome/browser/net/chrome_network_delegate.cc |
@@ -15,6 +15,7 @@ |
#include "base/debug/trace_event.h" |
#include "base/logging.h" |
#include "base/metrics/histogram.h" |
+#include "base/metrics/sparse_histogram.h" |
#include "base/metrics/user_metrics.h" |
#include "base/path_service.h" |
#include "base/prefs/pref_member.h" |
@@ -243,6 +244,27 @@ void ReportInvalidReferrerSend(const GURL& target_url, |
NOTREACHED(); |
} |
+// Determine whether the specified |request| is for a main frame resource. Used |
+// for histograms. |
+bool IsMainFrameResourceRequest(const net::URLRequest* request) { |
+ const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
+ return info && info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME; |
+} |
+ |
+// Record network errors that requests complete with, including OK and ABORTED. |
+void RecordNetworkErrorHistograms(const net::URLRequest* request) { |
+ if (request->url().SchemeIs("http")) { |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("Net.HttpRequestCompletionErrorCodes", |
+ std::abs(request->status().error())); |
+ |
+ if (IsMainFrameResourceRequest(request)) { |
+ UMA_HISTOGRAM_SPARSE_SLOWLY( |
+ "Net.HttpRequestCompletionErrorCodes.MainFrame", |
+ std::abs(request->status().error())); |
+ } |
+ } |
+} |
+ |
} // namespace |
ChromeNetworkDelegate::ChromeNetworkDelegate( |
@@ -549,7 +571,10 @@ void ChromeNetworkDelegate::OnRawBytesRead(const net::URLRequest& request, |
void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request, |
bool started) { |
if (data_reduction_proxy_usage_stats_) |
- data_reduction_proxy_usage_stats_->OnUrlRequestCompleted(request, started); |
+ data_reduction_proxy_usage_stats_->OnUrlRequestCompleted( |
bengr
2014/12/09 23:44:13
After megjablon@'s CL lands, this will be in DataR
sclittle
2014/12/10 00:05:03
Darn. Being able to single out main frame resource
|
+ request, started, IsMainFrameResourceRequest(request)); |
+ |
+ RecordNetworkErrorHistograms(request); |
TRACE_EVENT_ASYNC_END0("net", "URLRequest", request); |
if (request->status().status() == net::URLRequestStatus::SUCCESS) { |