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