Index: chrome/browser/tab_contents/navigation_metrics_recorder.cc |
diff --git a/chrome/browser/tab_contents/navigation_metrics_recorder.cc b/chrome/browser/tab_contents/navigation_metrics_recorder.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..425926786227c5f750aa0b23836449d6f6004576 |
--- /dev/null |
+++ b/chrome/browser/tab_contents/navigation_metrics_recorder.cc |
@@ -0,0 +1,70 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/tab_contents/navigation_metrics_recorder.h" |
+ |
+#include "base/metrics/histogram.h" |
+#include "content/public/browser/navigation_details.h" |
+#include "content/public/browser/navigation_entry.h" |
+ |
+namespace { |
+ |
+enum Scheme { |
+ SCHEME_UNKNOWN, |
+ SCHEME_HTTP, |
+ SCHEME_HTTPS, |
+ SCHEME_FILE, |
+ SCHEME_FTP, |
+ SCHEME_DATA, |
+ SCHEME_JAVASCRIPT, |
+ SCHEME_ABOUT, |
+ SCHEME_CHROME, |
+ SCHEME_MAX, |
+}; |
+ |
+static const char* kSchemeNames[] = { |
+ "unknown", |
+ "http", |
+ "https", |
+ "file", |
+ "ftp", |
+ "data", |
+ "javascript", |
+ "about", |
+ "chrome", |
+ "max", |
+}; |
+ |
+COMPILE_ASSERT(arraysize(kSchemeNames) == SCHEME_MAX + 1, |
+ NavigationMetricsRecorder_name_count_mismatch); |
+ |
+void RecordMainFrameNavigation(const content::LoadCommittedDetails& details) { |
+ GURL url = details.entry->GetVirtualURL(); |
+ Scheme scheme = SCHEME_UNKNOWN; |
+ for (int i = 1; i < SCHEME_MAX; ++i) { |
+ if (url.SchemeIs(kSchemeNames[i])) { |
+ scheme = static_cast<Scheme>(i); |
+ break; |
+ } |
+ } |
+ UMA_HISTOGRAM_ENUMERATION( |
+ "Navigation.MainFrameScheme", scheme, SCHEME_MAX); |
+} |
+ |
+} // namespace |
+ |
+NavigationMetricsRecorder::NavigationMetricsRecorder( |
+ content::WebContents* web_contents) |
+ : content::WebContentsObserver(web_contents) { |
+} |
+ |
+NavigationMetricsRecorder::~NavigationMetricsRecorder() { |
+} |
+ |
+void NavigationMetricsRecorder::DidNavigateMainFrame( |
+ const content::LoadCommittedDetails& details, |
+ const content::FrameNavigateParams& params) { |
+ RecordMainFrameNavigation(details); |
+} |
+ |