1// Copyright 2014 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 "components/translate/core/browser/translate_browser_metrics.h" 6 7#include "base/basictypes.h" 8#include "base/memory/scoped_ptr.h" 9#include "base/metrics/histogram.h" 10#include "base/metrics/histogram_samples.h" 11#include "base/metrics/statistics_recorder.h" 12#include "testing/gtest/include/gtest/gtest.h" 13#include "testing/platform_test.h" 14 15using base::HistogramBase; 16using base::HistogramSamples; 17using base::StatisticsRecorder; 18 19namespace { 20 21class MetricsRecorder { 22 public: 23 explicit MetricsRecorder(const char* key) : key_(key) { 24 StatisticsRecorder::Initialize(); 25 26 HistogramBase* histogram = StatisticsRecorder::FindHistogram(key_); 27 if (histogram) 28 base_samples_ = histogram->SnapshotSamples(); 29 } 30 31 void CheckInitiationStatus(int expected_disabled_by_prefs, 32 int expected_disabled_by_switch, 33 int expected_disabled_by_config, 34 int expected_language_is_not_supported, 35 int expected_mime_type_is_not_supported, 36 int expected_url_is_not_supported, 37 int expected_similar_languages, 38 int expected_accept_languages, 39 int expected_auto_by_config, 40 int expected_auto_by_link, 41 int expected_show_infobar) { 42 Snapshot(); 43 44 EXPECT_EQ(expected_disabled_by_prefs, 45 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics:: 46 INITIATION_STATUS_DISABLED_BY_PREFS)); 47 EXPECT_EQ( 48 expected_disabled_by_switch, 49 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics:: 50 INITIATION_STATUS_DISABLED_BY_SWITCH)); 51 EXPECT_EQ( 52 expected_disabled_by_config, 53 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics:: 54 INITIATION_STATUS_DISABLED_BY_CONFIG)); 55 EXPECT_EQ(expected_language_is_not_supported, 56 GetCountWithoutSnapshot( 57 translate::TranslateBrowserMetrics:: 58 INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED)); 59 EXPECT_EQ(expected_mime_type_is_not_supported, 60 GetCountWithoutSnapshot( 61 translate::TranslateBrowserMetrics:: 62 INITIATION_STATUS_MIME_TYPE_IS_NOT_SUPPORTED)); 63 EXPECT_EQ( 64 expected_url_is_not_supported, 65 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics:: 66 INITIATION_STATUS_URL_IS_NOT_SUPPORTED)); 67 EXPECT_EQ(expected_similar_languages, 68 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics:: 69 INITIATION_STATUS_SIMILAR_LANGUAGES)); 70 EXPECT_EQ(expected_accept_languages, 71 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics:: 72 INITIATION_STATUS_ACCEPT_LANGUAGES)); 73 EXPECT_EQ(expected_auto_by_config, 74 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics:: 75 INITIATION_STATUS_AUTO_BY_CONFIG)); 76 EXPECT_EQ(expected_auto_by_link, 77 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics:: 78 INITIATION_STATUS_AUTO_BY_LINK)); 79 EXPECT_EQ(expected_show_infobar, 80 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics:: 81 INITIATION_STATUS_SHOW_INFOBAR)); 82 } 83 84 HistogramBase::Count GetTotalCount() { 85 Snapshot(); 86 if (!samples_.get()) 87 return 0; 88 HistogramBase::Count count = samples_->TotalCount(); 89 if (!base_samples_.get()) 90 return count; 91 return count - base_samples_->TotalCount(); 92 } 93 94 HistogramBase::Count GetCount(HistogramBase::Sample value) { 95 Snapshot(); 96 return GetCountWithoutSnapshot(value); 97 } 98 99 private: 100 void Snapshot() { 101 HistogramBase* histogram = StatisticsRecorder::FindHistogram(key_); 102 if (!histogram) 103 return; 104 samples_ = histogram->SnapshotSamples(); 105 } 106 107 HistogramBase::Count GetCountWithoutSnapshot(HistogramBase::Sample value) { 108 if (!samples_.get()) 109 return 0; 110 HistogramBase::Count count = samples_->GetCount(value); 111 if (!base_samples_.get()) 112 return count; 113 return count - base_samples_->GetCount(value); 114 } 115 116 std::string key_; 117 scoped_ptr<HistogramSamples> base_samples_; 118 scoped_ptr<HistogramSamples> samples_; 119 120 DISALLOW_COPY_AND_ASSIGN(MetricsRecorder); 121}; 122 123} // namespace 124 125TEST(TranslateBrowserMetricsTest, ReportInitiationStatus) { 126 MetricsRecorder recorder(translate::TranslateBrowserMetrics::GetMetricsName( 127 translate::TranslateBrowserMetrics::UMA_INITIATION_STATUS)); 128 129 recorder.CheckInitiationStatus(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 130 translate::TranslateBrowserMetrics::ReportInitiationStatus( 131 translate::TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); 132 recorder.CheckInitiationStatus(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 133 translate::TranslateBrowserMetrics::ReportInitiationStatus( 134 translate::TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH); 135 recorder.CheckInitiationStatus(1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0); 136 translate::TranslateBrowserMetrics::ReportInitiationStatus( 137 translate::TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); 138 recorder.CheckInitiationStatus(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0); 139 translate::TranslateBrowserMetrics::ReportInitiationStatus( 140 translate::TranslateBrowserMetrics:: 141 INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); 142 recorder.CheckInitiationStatus(1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0); 143 translate::TranslateBrowserMetrics::ReportInitiationStatus( 144 translate::TranslateBrowserMetrics:: 145 INITIATION_STATUS_MIME_TYPE_IS_NOT_SUPPORTED); 146 recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0); 147 translate::TranslateBrowserMetrics::ReportInitiationStatus( 148 translate::TranslateBrowserMetrics:: 149 INITIATION_STATUS_URL_IS_NOT_SUPPORTED); 150 recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0); 151 translate::TranslateBrowserMetrics::ReportInitiationStatus( 152 translate::TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); 153 recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0); 154 translate::TranslateBrowserMetrics::ReportInitiationStatus( 155 translate::TranslateBrowserMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES); 156 recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0); 157 translate::TranslateBrowserMetrics::ReportInitiationStatus( 158 translate::TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); 159 recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0); 160 translate::TranslateBrowserMetrics::ReportInitiationStatus( 161 translate::TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); 162 recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0); 163 translate::TranslateBrowserMetrics::ReportInitiationStatus( 164 translate::TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); 165 recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); 166} 167 168TEST(TranslateBrowserMetricsTest, ReportLanguageDetectionError) { 169 MetricsRecorder recorder(translate::TranslateBrowserMetrics::GetMetricsName( 170 translate::TranslateBrowserMetrics::UMA_LANGUAGE_DETECTION_ERROR)); 171 EXPECT_EQ(0, recorder.GetTotalCount()); 172 translate::TranslateBrowserMetrics::ReportLanguageDetectionError(); 173 EXPECT_EQ(1, recorder.GetTotalCount()); 174 175} 176 177 178TEST(TranslateBrowserMetricsTest, ReportedLocalesOnDisabledByPrefs) { 179 const int ENGLISH = 25966; 180 181 MetricsRecorder recorder(translate::TranslateBrowserMetrics::GetMetricsName( 182 translate::TranslateBrowserMetrics::UMA_LOCALES_ON_DISABLED_BY_PREFS)); 183 EXPECT_EQ(0, recorder.GetTotalCount()); 184 translate::TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs("en"); 185 EXPECT_EQ(1, recorder.GetCount(ENGLISH)); 186} 187 188TEST(TranslateBrowserMetricsTest, ReportedUndisplayableLanguage) { 189 const int ENGLISH = 25966; 190 191 MetricsRecorder recorder(translate::TranslateBrowserMetrics::GetMetricsName( 192 translate::TranslateBrowserMetrics::UMA_UNDISPLAYABLE_LANGUAGE)); 193 EXPECT_EQ(0, recorder.GetTotalCount()); 194 translate::TranslateBrowserMetrics::ReportUndisplayableLanguage("en"); 195 EXPECT_EQ(1, recorder.GetCount(ENGLISH)); 196} 197 198TEST(TranslateBrowserMetricsTest, ReportedUnsupportedLanguageAtInitiation) { 199 const int ENGLISH = 25966; 200 201 MetricsRecorder recorder(translate::TranslateBrowserMetrics::GetMetricsName( 202 translate::TranslateBrowserMetrics:: 203 UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION)); 204 EXPECT_EQ(0, recorder.GetTotalCount()); 205 translate::TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( 206 "en"); 207 EXPECT_EQ(1, recorder.GetCount(ENGLISH)); 208} 209