Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: components/translate/core/browser/translate_ui_delegate.cc

Issue 2400503002: [Translate] Integrate TranslateEventProto UMA logging into TranslateManager. (Closed)
Patch Set: use unique_ptr Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/translate/core/browser/translate_ui_delegate.h" 5 #include "components/translate/core/browser/translate_ui_delegate.h"
6 6
7 #include "base/i18n/string_compare.h" 7 #include "base/i18n/string_compare.h"
8 #include "base/metrics/histogram_macros.h" 8 #include "base/metrics/histogram_macros.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "components/metrics/proto/translate_event.pb.h"
10 #include "components/translate/core/browser/language_state.h" 11 #include "components/translate/core/browser/language_state.h"
11 #include "components/translate/core/browser/translate_client.h" 12 #include "components/translate/core/browser/translate_client.h"
12 #include "components/translate/core/browser/translate_download_manager.h" 13 #include "components/translate/core/browser/translate_download_manager.h"
13 #include "components/translate/core/browser/translate_driver.h" 14 #include "components/translate/core/browser/translate_driver.h"
14 #include "components/translate/core/browser/translate_manager.h" 15 #include "components/translate/core/browser/translate_manager.h"
15 #include "components/translate/core/browser/translate_prefs.h" 16 #include "components/translate/core/browser/translate_prefs.h"
16 #include "components/translate/core/common/translate_constants.h" 17 #include "components/translate/core/common/translate_constants.h"
17 #include "components/variations/variations_associated_data.h" 18 #include "components/variations/variations_associated_data.h"
18 #include "third_party/icu/source/i18n/unicode/coll.h" 19 #include "third_party/icu/source/i18n/unicode/coll.h"
19 #include "ui/base/l10n/l10n_util.h" 20 #include "ui/base/l10n/l10n_util.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 143
143 UMA_HISTOGRAM_BOOLEAN(kModifyOriginalLang, true); 144 UMA_HISTOGRAM_BOOLEAN(kModifyOriginalLang, true);
144 original_language_index_ = language_index; 145 original_language_index_ = language_index;
145 } 146 }
146 147
147 void TranslateUIDelegate::UpdateOriginalLanguage( 148 void TranslateUIDelegate::UpdateOriginalLanguage(
148 const std::string& language_code) { 149 const std::string& language_code) {
149 for (size_t i = 0; i < languages_.size(); ++i) { 150 for (size_t i = 0; i < languages_.size(); ++i) {
150 if (languages_[i].first.compare(language_code) == 0) { 151 if (languages_[i].first.compare(language_code) == 0) {
151 UpdateOriginalLanguageIndex(i); 152 UpdateOriginalLanguageIndex(i);
153 if (translate_manager_) {
154 translate_manager_->mutable_translate_event()
155 ->set_modified_source_language(language_code);
156 }
152 return; 157 return;
153 } 158 }
154 } 159 }
155 } 160 }
156 161
157 size_t TranslateUIDelegate::GetTargetLanguageIndex() const { 162 size_t TranslateUIDelegate::GetTargetLanguageIndex() const {
158 return target_language_index_; 163 return target_language_index_;
159 } 164 }
160 165
161 void TranslateUIDelegate::UpdateTargetLanguageIndex(size_t language_index) { 166 void TranslateUIDelegate::UpdateTargetLanguageIndex(size_t language_index) {
162 if (target_language_index_ == language_index) 167 if (target_language_index_ == language_index)
163 return; 168 return;
164 169
165 DCHECK_LT(language_index, GetNumberOfLanguages()); 170 DCHECK_LT(language_index, GetNumberOfLanguages());
166 UMA_HISTOGRAM_BOOLEAN(kModifyTargetLang, true); 171 UMA_HISTOGRAM_BOOLEAN(kModifyTargetLang, true);
167 target_language_index_ = language_index; 172 target_language_index_ = language_index;
168 } 173 }
169 174
170 void TranslateUIDelegate::UpdateTargetLanguage( 175 void TranslateUIDelegate::UpdateTargetLanguage(
171 const std::string& language_code) { 176 const std::string& language_code) {
172 for (size_t i = 0; i < languages_.size(); ++i) { 177 for (size_t i = 0; i < languages_.size(); ++i) {
173 if (languages_[i].first.compare(language_code) == 0) { 178 if (languages_[i].first.compare(language_code) == 0) {
174 UpdateTargetLanguageIndex(i); 179 UpdateTargetLanguageIndex(i);
180 if (translate_manager_) {
181 translate_manager_->mutable_translate_event()
182 ->set_modified_target_language(language_code);
183 }
175 return; 184 return;
176 } 185 }
177 } 186 }
178 } 187 }
179 188
180 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const { 189 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const {
181 DCHECK_LT(index, GetNumberOfLanguages()); 190 DCHECK_LT(index, GetNumberOfLanguages());
182 return languages_[index].first; 191 return languages_[index].first;
183 } 192 }
184 193
(...skipping 17 matching lines...) Expand all
202 } 211 }
203 212
204 void TranslateUIDelegate::Translate() { 213 void TranslateUIDelegate::Translate() {
205 if (!translate_driver_->IsOffTheRecord()) { 214 if (!translate_driver_->IsOffTheRecord()) {
206 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); 215 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode());
207 prefs_->ResetTranslationIgnoredCount(GetOriginalLanguageCode()); 216 prefs_->ResetTranslationIgnoredCount(GetOriginalLanguageCode());
208 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); 217 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode());
209 } 218 }
210 219
211 if (translate_manager_) { 220 if (translate_manager_) {
221 translate_manager_->RecordTranslateEvent(
222 metrics::TranslateEventProto::USER_ACCEPT);
212 translate_manager_->TranslatePage(GetOriginalLanguageCode(), 223 translate_manager_->TranslatePage(GetOriginalLanguageCode(),
213 GetTargetLanguageCode(), false); 224 GetTargetLanguageCode(), false);
214 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); 225 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true);
215 } 226 }
216 } 227 }
217 228
218 void TranslateUIDelegate::RevertTranslation() { 229 void TranslateUIDelegate::RevertTranslation() {
219 if (translate_manager_) { 230 if (translate_manager_) {
220 translate_manager_->RevertTranslation(); 231 translate_manager_->RevertTranslation();
221 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); 232 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true);
(...skipping 10 matching lines...) Expand all
232 } else { 243 } else {
233 prefs_->IncrementTranslationIgnoredCount(language); 244 prefs_->IncrementTranslationIgnoredCount(language);
234 } 245 }
235 } 246 }
236 247
237 // Remember that the user declined the translation so as to prevent showing a 248 // Remember that the user declined the translation so as to prevent showing a
238 // translate UI for that page again. (TranslateManager initiates translations 249 // translate UI for that page again. (TranslateManager initiates translations
239 // when getting a LANGUAGE_DETERMINED from the page, which happens when a load 250 // when getting a LANGUAGE_DETERMINED from the page, which happens when a load
240 // stops. That could happen multiple times, including after the user already 251 // stops. That could happen multiple times, including after the user already
241 // declined the translation.) 252 // declined the translation.)
242 if (explicitly_closed && translate_manager_) { 253 if (translate_manager_) {
243 translate_manager_->GetLanguageState().set_translation_declined(true); 254 translate_manager_->RecordTranslateEvent(
244 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); 255 explicitly_closed ? metrics::TranslateEventProto::USER_DECLINE
256 : metrics::TranslateEventProto::USER_IGNORE);
257 if (explicitly_closed)
258 translate_manager_->GetLanguageState().set_translation_declined(true);
245 } 259 }
246 260
247 if (!explicitly_closed) { 261 if (explicitly_closed) {
262 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
263 } else {
248 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); 264 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true);
249 } 265 }
250 } 266 }
251 267
252 bool TranslateUIDelegate::IsLanguageBlocked() { 268 bool TranslateUIDelegate::IsLanguageBlocked() {
253 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); 269 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode());
254 } 270 }
255 271
256 void TranslateUIDelegate::SetLanguageBlocked(bool value) { 272 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
257 if (value) { 273 if (value) {
258 prefs_->BlockLanguage(GetOriginalLanguageCode()); 274 prefs_->BlockLanguage(GetOriginalLanguageCode());
259 if (translate_manager_) { 275 if (translate_manager_) {
260 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 276 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
277 // Translation has been blocked for this language. Capture that in the
278 // metrics. Note that we don't capture a language being unblocked... which
279 // is not the same as accepting a given translation for this language.
280 translate_manager_->RecordTranslateEvent(
281 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE);
261 } 282 }
262 } else { 283 } else {
263 prefs_->UnblockLanguage(GetOriginalLanguageCode()); 284 prefs_->UnblockLanguage(GetOriginalLanguageCode());
264 } 285 }
265 286
266 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value); 287 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value);
267 } 288 }
268 289
269 bool TranslateUIDelegate::IsSiteBlacklisted() { 290 bool TranslateUIDelegate::IsSiteBlacklisted() {
270 std::string host = GetPageHost(); 291 std::string host = GetPageHost();
271 return !host.empty() && prefs_->IsSiteBlacklisted(host); 292 return !host.empty() && prefs_->IsSiteBlacklisted(host);
272 } 293 }
273 294
274 void TranslateUIDelegate::SetSiteBlacklist(bool value) { 295 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
275 std::string host = GetPageHost(); 296 std::string host = GetPageHost();
276 if (host.empty()) 297 if (host.empty())
277 return; 298 return;
278 299
279 if (value) { 300 if (value) {
280 prefs_->BlacklistSite(host); 301 prefs_->BlacklistSite(host);
281 if (translate_manager_) { 302 if (translate_manager_) {
282 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 303 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
304 // Translation has been blocked for this site. Capture that in the metrics
305 // Note that we don't capture a language being unblocked... which is not
306 // the same as accepting a given translation for this site.
307 translate_manager_->RecordTranslateEvent(
308 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE);
283 } 309 }
284 } else { 310 } else {
285 prefs_->RemoveSiteFromBlacklist(host); 311 prefs_->RemoveSiteFromBlacklist(host);
286 } 312 }
287 313
288 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value); 314 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value);
289 } 315 }
290 316
291 bool TranslateUIDelegate::ShouldAlwaysTranslate() { 317 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
292 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 318 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(),
(...skipping 20 matching lines...) Expand all
313 // The only chance the bubble will show up is after the user manually unchecks 339 // The only chance the bubble will show up is after the user manually unchecks
314 // "Always do this?". In that case, since it is after user explictly unchecks, 340 // "Always do this?". In that case, since it is after user explictly unchecks,
315 // we should show as it as unchecked so we only check == N instead of >= N. 341 // we should show as it as unchecked so we only check == N instead of >= N.
316 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == 342 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) ==
317 threshold; 343 threshold;
318 } 344 }
319 345
320 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 346 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
321 const std::string& original_lang = GetOriginalLanguageCode(); 347 const std::string& original_lang = GetOriginalLanguageCode();
322 const std::string& target_lang = GetTargetLanguageCode(); 348 const std::string& target_lang = GetTargetLanguageCode();
323 if (value) 349 if (value) {
324 prefs_->WhitelistLanguagePair(original_lang, target_lang); 350 prefs_->WhitelistLanguagePair(original_lang, target_lang);
325 else 351 // A default translation mapping has been accepted for this language.
352 // Capture that in the metrics. Note that we don't capture a language being
353 // unmapped... which is not the same as accepting some other translation
354 // for this language.
355 if (translate_manager_) {
356 translate_manager_->RecordTranslateEvent(
357 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE);
358 }
359 } else {
326 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 360 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang);
361 }
327 362
328 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value); 363 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value);
329 } 364 }
330 365
331 std::string TranslateUIDelegate::GetPageHost() { 366 std::string TranslateUIDelegate::GetPageHost() {
332 if (!translate_driver_->HasCurrentPage()) 367 if (!translate_driver_->HasCurrentPage())
333 return std::string(); 368 return std::string();
334 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); 369 return translate_driver_->GetLastCommittedURL().HostNoBrackets();
335 } 370 }
336 371
337 } // namespace translate 372 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698