1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/tab_contents/navigation_metrics_recorder.h" 6 7 #include "base/metrics/histogram.h" 8 #include "content/public/browser/navigation_details.h" 9 #include "content/public/browser/navigation_entry.h" 10 11 DEFINE_WEB_CONTENTS_USER_DATA_KEY(NavigationMetricsRecorder); 12 13 namespace { 14 15 enum Scheme { 16 SCHEME_UNKNOWN, 17 SCHEME_HTTP, 18 SCHEME_HTTPS, 19 SCHEME_FILE, 20 SCHEME_FTP, 21 SCHEME_DATA, 22 SCHEME_JAVASCRIPT, 23 SCHEME_ABOUT, 24 SCHEME_CHROME, 25 SCHEME_MAX, 26 }; 27 28 static const char* kSchemeNames[] = { 29 "unknown", 30 "http", 31 "https", 32 "file", 33 "ftp", 34 "data", 35 "javascript", 36 "about", 37 "chrome", 38 "max", 39 }; 40 41 COMPILE_ASSERT(arraysize(kSchemeNames) == SCHEME_MAX + 1, 42 NavigationMetricsRecorder_name_count_mismatch); 43 44 void RecordMainFrameNavigation(const content::LoadCommittedDetails& details) { 45 GURL url = details.entry->GetVirtualURL(); 46 Scheme scheme = SCHEME_UNKNOWN; 47 for (int i = 1; i < SCHEME_MAX; ++i) { 48 if (url.SchemeIs(kSchemeNames[i])) { 49 scheme = static_cast<Scheme>(i); 50 break; 51 } 52 } 53 UMA_HISTOGRAM_ENUMERATION( 54 "Navigation.MainFrameScheme", scheme, SCHEME_MAX); 55 } 56 57 } // namespace 58 59 NavigationMetricsRecorder::NavigationMetricsRecorder( 60 content::WebContents* web_contents) 61 : content::WebContentsObserver(web_contents) { 62 } 63 64 NavigationMetricsRecorder::~NavigationMetricsRecorder() { 65 } 66 67 void NavigationMetricsRecorder::DidNavigateMainFrame( 68 const content::LoadCommittedDetails& details, 69 const content::FrameNavigateParams& params) { 70 RecordMainFrameNavigation(details); 71 } 72 73