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.
5 #include "chrome/browser/ui/webui/ntp/ntp_user_data_logger.h"
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"
13 DEFINE_WEB_CONTENTS_USER_DATA_KEY(NTPUserDataLogger);
15 NTPUserDataLogger::~NTPUserDataLogger() {}
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_));
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_));
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;
39 void NTPUserDataLogger::EmitMouseoverCount() {
40 UMA_HISTOGRAM_COUNTS("NewTabPage.NumberOfMouseOvers", number_of_mouseovers_);
41 number_of_mouseovers_ = 0;
44 void NTPUserDataLogger::LogEvent(NTPLoggingEventType event) {
47 number_of_mouseovers_++;
49 case NTP_THUMBNAIL_ATTEMPT:
50 number_of_thumbnail_attempts_++;
52 case NTP_THUMBNAIL_ERROR:
53 number_of_thumbnail_errors_++;
55 case NTP_FALLBACK_THUMBNAIL_REQUESTED:
56 number_of_fallback_thumbnails_requested_++;
58 case NTP_FALLBACK_THUMBNAIL_USED:
59 number_of_fallback_thumbnails_used_++;
66 // content::WebContentsObserver override
67 void NTPUserDataLogger::NavigationEntryCommitted(
68 const content::LoadCommittedDetails& load_details) {
69 if (!load_details.previous_url.is_valid())
72 if (search::MatchesOriginAndPath(ntp_url_, load_details.previous_url)) {
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();
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) {
90 size_t NTPUserDataLogger::GetPercentError(size_t errors, size_t events) const {
91 return (100 * errors) / events;