Home | History | Annotate | Download | only in tab_contents
      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