- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / ntp / ntp_user_data_logger.cc
1 // Copyright 2013 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/ui/webui/ntp/ntp_user_data_logger.h"
6
7 #include "base/metrics/histogram.h"
8 #include "chrome/browser/search/search.h"
9 #include "chrome/common/search_urls.h"
10 #include "chrome/common/url_constants.h"
11 #include "content/public/browser/navigation_details.h"
12
13 DEFINE_WEB_CONTENTS_USER_DATA_KEY(NTPUserDataLogger);
14
15 NTPUserDataLogger::~NTPUserDataLogger() {}
16
17 void NTPUserDataLogger::EmitThumbnailErrorRate() {
18   DCHECK_LE(number_of_thumbnail_errors_, number_of_thumbnail_attempts_);
19   if (number_of_thumbnail_attempts_ != 0) {
20     UMA_HISTOGRAM_PERCENTAGE(
21       "NewTabPage.ThumbnailErrorRate",
22       GetPercentError(number_of_thumbnail_errors_,
23                       number_of_thumbnail_attempts_));
24   }
25   DCHECK_LE(number_of_fallback_thumbnails_used_,
26             number_of_fallback_thumbnails_requested_);
27   if (number_of_fallback_thumbnails_requested_ != 0) {
28     UMA_HISTOGRAM_PERCENTAGE(
29         "NewTabPage.ThumbnailFallbackRate",
30         GetPercentError(number_of_fallback_thumbnails_used_,
31                         number_of_fallback_thumbnails_requested_));
32   }
33   number_of_thumbnail_attempts_ = 0;
34   number_of_thumbnail_errors_ = 0;
35   number_of_fallback_thumbnails_requested_ = 0;
36   number_of_fallback_thumbnails_used_ = 0;
37 }
38
39 void NTPUserDataLogger::EmitMouseoverCount() {
40   UMA_HISTOGRAM_COUNTS("NewTabPage.NumberOfMouseOvers", number_of_mouseovers_);
41   number_of_mouseovers_ = 0;
42 }
43
44 void NTPUserDataLogger::LogEvent(NTPLoggingEventType event) {
45   switch (event) {
46     case NTP_MOUSEOVER:
47       number_of_mouseovers_++;
48       break;
49     case NTP_THUMBNAIL_ATTEMPT:
50       number_of_thumbnail_attempts_++;
51       break;
52     case NTP_THUMBNAIL_ERROR:
53       number_of_thumbnail_errors_++;
54       break;
55     case NTP_FALLBACK_THUMBNAIL_REQUESTED:
56       number_of_fallback_thumbnails_requested_++;
57       break;
58     case NTP_FALLBACK_THUMBNAIL_USED:
59       number_of_fallback_thumbnails_used_++;
60       break;
61     default:
62       NOTREACHED();
63   }
64 }
65
66 // content::WebContentsObserver override
67 void NTPUserDataLogger::NavigationEntryCommitted(
68     const content::LoadCommittedDetails& load_details) {
69   if (!load_details.previous_url.is_valid())
70     return;
71
72   if (search::MatchesOriginAndPath(ntp_url_, load_details.previous_url)) {
73     EmitMouseoverCount();
74     // Only log thumbnail error rates for Instant NTP pages, as we do not have
75     // this data for non-Instant NTPs.
76     if (ntp_url_ != GURL(chrome::kChromeUINewTabURL))
77       EmitThumbnailErrorRate();
78   }
79 }
80
81 NTPUserDataLogger::NTPUserDataLogger(content::WebContents* contents)
82     : content::WebContentsObserver(contents),
83       number_of_mouseovers_(0),
84       number_of_thumbnail_attempts_(0),
85       number_of_thumbnail_errors_(0),
86       number_of_fallback_thumbnails_requested_(0),
87       number_of_fallback_thumbnails_used_(0) {
88 }
89
90 size_t NTPUserDataLogger::GetPercentError(size_t errors, size_t events) const {
91   return (100 * errors) / events;
92 }