navigation_metrics_recorder.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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 11DEFINE_WEB_CONTENTS_USER_DATA_KEY(NavigationMetricsRecorder); 12 13namespace { 14 15enum 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 28static 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 41COMPILE_ASSERT(arraysize(kSchemeNames) == SCHEME_MAX + 1, 42 NavigationMetricsRecorder_name_count_mismatch); 43 44void 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 59NavigationMetricsRecorder::NavigationMetricsRecorder( 60 content::WebContents* web_contents) 61 : content::WebContentsObserver(web_contents) { 62} 63 64NavigationMetricsRecorder::~NavigationMetricsRecorder() { 65} 66 67void NavigationMetricsRecorder::DidNavigateMainFrame( 68 const content::LoadCommittedDetails& details, 69 const content::FrameNavigateParams& params) { 70 RecordMainFrameNavigation(details); 71} 72 73