navigation_metrics_recorder.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/navigation_metrics_recorder.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_details.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h"
108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "content/public/browser/render_view_host.h"
118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "content/public/browser/render_widget_host_view.h"
128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_WIN)
148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/win/windows_version.h"
158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/metro_utils/metro_chrome_win.h"
168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DEFINE_WEB_CONTENTS_USER_DATA_KEY(NavigationMetricsRecorder);
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum Scheme {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_UNKNOWN,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_HTTP,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_HTTPS,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_FILE,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_FTP,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_DATA,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_JAVASCRIPT,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_ABOUT,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_CHROME,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCHEME_MAX,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char* kSchemeNames[] = {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "unknown",
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "http",
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "https",
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "file",
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "ftp",
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "data",
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "javascript",
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "about",
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "chrome",
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "max",
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)COMPILE_ASSERT(arraysize(kSchemeNames) == SCHEME_MAX + 1,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               NavigationMetricsRecorder_name_count_mismatch);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RecordMainFrameNavigation(const content::LoadCommittedDetails& details) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url = details.entry->GetVirtualURL();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Scheme scheme = SCHEME_UNKNOWN;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 1; i < SCHEME_MAX; ++i) {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (url.SchemeIs(kSchemeNames[i])) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      scheme = static_cast<Scheme>(i);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "Navigation.MainFrameScheme", scheme, SCHEME_MAX);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NavigationMetricsRecorder::NavigationMetricsRecorder(
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::WebContents* web_contents)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : content::WebContentsObserver(web_contents) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NavigationMetricsRecorder::~NavigationMetricsRecorder() {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NavigationMetricsRecorder::DidNavigateMainFrame(
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::LoadCommittedDetails& details,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::FrameNavigateParams& params) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RecordMainFrameNavigation(details);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void NavigationMetricsRecorder::DidStartLoading(
818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    content::RenderViewHost* render_view_host) {
828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_WIN) && defined(USE_ASH)
838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    gfx::NativeView view = render_view_host->GetView()->GetNativeView();
858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    if (view) {
868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      chrome::HostDesktopType desktop =
878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)          chrome::GetHostDesktopTypeForNativeView(view);
888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      UMA_HISTOGRAM_ENUMERATION("Win8.PageLoad",
898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                chrome::GetWin8Environment(desktop),
908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                chrome::WIN_8_ENVIRONMENT_MAX);
918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    }
928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  }
938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif
948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
97