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.
5 #include "components/translate/core/browser/translate_browser_metrics.h"
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"
15 using base::HistogramBase
;
16 using base::HistogramSamples
;
17 using base::StatisticsRecorder
;
21 class MetricsRecorder
{
23 explicit MetricsRecorder(const char* key
) : key_(key
) {
24 StatisticsRecorder::Initialize();
26 HistogramBase
* histogram
= StatisticsRecorder::FindHistogram(key_
);
28 base_samples_
= histogram
->SnapshotSamples();
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
) {
44 EXPECT_EQ(expected_disabled_by_prefs
,
45 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics::
46 INITIATION_STATUS_DISABLED_BY_PREFS
));
48 expected_disabled_by_switch
,
49 GetCountWithoutSnapshot(translate::TranslateBrowserMetrics::
50 INITIATION_STATUS_DISABLED_BY_SWITCH
));
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
));
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
));
84 HistogramBase::Count
GetTotalCount() {
88 HistogramBase::Count count
= samples_
->TotalCount();
89 if (!base_samples_
.get())
91 return count
- base_samples_
->TotalCount();
94 HistogramBase::Count
GetCount(HistogramBase::Sample value
) {
96 return GetCountWithoutSnapshot(value
);
101 HistogramBase
* histogram
= StatisticsRecorder::FindHistogram(key_
);
104 samples_
= histogram
->SnapshotSamples();
107 HistogramBase::Count
GetCountWithoutSnapshot(HistogramBase::Sample value
) {
110 HistogramBase::Count count
= samples_
->GetCount(value
);
111 if (!base_samples_
.get())
113 return count
- base_samples_
->GetCount(value
);
117 scoped_ptr
<HistogramSamples
> base_samples_
;
118 scoped_ptr
<HistogramSamples
> samples_
;
120 DISALLOW_COPY_AND_ASSIGN(MetricsRecorder
);
125 TEST(TranslateBrowserMetricsTest
, ReportInitiationStatus
) {
126 MetricsRecorder
recorder(translate::TranslateBrowserMetrics::GetMetricsName(
127 translate::TranslateBrowserMetrics::UMA_INITIATION_STATUS
));
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);
168 TEST(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());
178 TEST(TranslateBrowserMetricsTest
, ReportedLocalesOnDisabledByPrefs
) {
179 const int ENGLISH
= 25966;
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
));
188 TEST(TranslateBrowserMetricsTest
, ReportedUndisplayableLanguage
) {
189 const int ENGLISH
= 25966;
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
));
198 TEST(TranslateBrowserMetricsTest
, ReportedUnsupportedLanguageAtInitiation
) {
199 const int ENGLISH
= 25966;
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(
207 EXPECT_EQ(1, recorder
.GetCount(ENGLISH
));