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

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

Issue 2400503002: [Translate] Integrate TranslateEventProto UMA logging into TranslateManager. (Closed)
Patch Set: fix trybots Created 4 years, 1 month 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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 void TranslateUIDelegate::UpdateOriginalLanguageIndex(size_t language_index) { 140 void TranslateUIDelegate::UpdateOriginalLanguageIndex(size_t language_index) {
140 if (original_language_index_ == language_index) 141 if (original_language_index_ == language_index)
141 return; 142 return;
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) {
150 DCHECK(translate_manager_ != nullptr);
149 for (size_t i = 0; i < languages_.size(); ++i) { 151 for (size_t i = 0; i < languages_.size(); ++i) {
150 if (languages_[i].first.compare(language_code) == 0) { 152 if (languages_[i].first.compare(language_code) == 0) {
151 UpdateOriginalLanguageIndex(i); 153 UpdateOriginalLanguageIndex(i);
154 translate_manager_->mutable_translate_event()
155 ->set_modified_source_language(language_code);
152 return; 156 return;
153 } 157 }
154 } 158 }
155 } 159 }
156 160
157 size_t TranslateUIDelegate::GetTargetLanguageIndex() const { 161 size_t TranslateUIDelegate::GetTargetLanguageIndex() const {
158 return target_language_index_; 162 return target_language_index_;
159 } 163 }
160 164
161 void TranslateUIDelegate::UpdateTargetLanguageIndex(size_t language_index) { 165 void TranslateUIDelegate::UpdateTargetLanguageIndex(size_t language_index) {
162 if (target_language_index_ == language_index) 166 if (target_language_index_ == language_index)
163 return; 167 return;
164 168
165 DCHECK_LT(language_index, GetNumberOfLanguages()); 169 DCHECK_LT(language_index, GetNumberOfLanguages());
166 UMA_HISTOGRAM_BOOLEAN(kModifyTargetLang, true); 170 UMA_HISTOGRAM_BOOLEAN(kModifyTargetLang, true);
167 target_language_index_ = language_index; 171 target_language_index_ = language_index;
168 } 172 }
169 173
170 void TranslateUIDelegate::UpdateTargetLanguage( 174 void TranslateUIDelegate::UpdateTargetLanguage(
171 const std::string& language_code) { 175 const std::string& language_code) {
176 DCHECK(translate_manager_ != nullptr);
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 translate_manager_->mutable_translate_event()
181 ->set_modified_target_language(language_code);
175 return; 182 return;
176 } 183 }
177 } 184 }
178 } 185 }
179 186
180 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const { 187 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const {
181 DCHECK_LT(index, GetNumberOfLanguages()); 188 DCHECK_LT(index, GetNumberOfLanguages());
182 return languages_[index].first; 189 return languages_[index].first;
183 } 190 }
184 191
(...skipping 17 matching lines...) Expand all
202 } 209 }
203 210
204 void TranslateUIDelegate::Translate() { 211 void TranslateUIDelegate::Translate() {
205 if (!translate_driver_->IsOffTheRecord()) { 212 if (!translate_driver_->IsOffTheRecord()) {
206 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); 213 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode());
207 prefs_->ResetTranslationIgnoredCount(GetOriginalLanguageCode()); 214 prefs_->ResetTranslationIgnoredCount(GetOriginalLanguageCode());
208 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); 215 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode());
209 } 216 }
210 217
211 if (translate_manager_) { 218 if (translate_manager_) {
219 translate_manager_->RecordTranslateEvent(
220 metrics::TranslateEventProto::USER_ACCEPT);
212 translate_manager_->TranslatePage(GetOriginalLanguageCode(), 221 translate_manager_->TranslatePage(GetOriginalLanguageCode(),
213 GetTargetLanguageCode(), false); 222 GetTargetLanguageCode(), false);
214 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); 223 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true);
215 } 224 }
216 } 225 }
217 226
218 void TranslateUIDelegate::RevertTranslation() { 227 void TranslateUIDelegate::RevertTranslation() {
219 if (translate_manager_) { 228 if (translate_manager_) {
220 translate_manager_->RevertTranslation(); 229 translate_manager_->RevertTranslation();
221 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); 230 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true);
(...skipping 10 matching lines...) Expand all
232 } else { 241 } else {
233 prefs_->IncrementTranslationIgnoredCount(language); 242 prefs_->IncrementTranslationIgnoredCount(language);
234 } 243 }
235 } 244 }
236 245
237 // Remember that the user declined the translation so as to prevent showing a 246 // Remember that the user declined the translation so as to prevent showing a
238 // translate UI for that page again. (TranslateManager initiates translations 247 // translate UI for that page again. (TranslateManager initiates translations
239 // when getting a LANGUAGE_DETERMINED from the page, which happens when a load 248 // 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 249 // stops. That could happen multiple times, including after the user already
241 // declined the translation.) 250 // declined the translation.)
242 if (explicitly_closed && translate_manager_) { 251 if (translate_manager_) {
243 translate_manager_->GetLanguageState().set_translation_declined(true); 252 translate_manager_->RecordTranslateEvent(
244 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); 253 explicitly_closed ? metrics::TranslateEventProto::USER_DECLINE
254 : metrics::TranslateEventProto::USER_IGNORE);
255 if (explicitly_closed)
256 translate_manager_->GetLanguageState().set_translation_declined(true);
245 } 257 }
246 258
247 if (!explicitly_closed) { 259 if (explicitly_closed) {
260 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
261 } else {
248 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); 262 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true);
249 } 263 }
250 } 264 }
251 265
252 bool TranslateUIDelegate::IsLanguageBlocked() { 266 bool TranslateUIDelegate::IsLanguageBlocked() {
253 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); 267 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode());
254 } 268 }
255 269
256 void TranslateUIDelegate::SetLanguageBlocked(bool value) { 270 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
257 if (value) { 271 if (value) {
258 prefs_->BlockLanguage(GetOriginalLanguageCode()); 272 prefs_->BlockLanguage(GetOriginalLanguageCode());
259 if (translate_manager_) { 273 if (translate_manager_) {
260 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 274 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
275 // Translation has been blocked for this language. Capture that in the
276 // metrics. Note that we don't capture a language being unblocked... which
277 // is not the same as accepting a given translation for this language.
278 translate_manager_->RecordTranslateEvent(
279 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE);
261 } 280 }
262 } else { 281 } else {
263 prefs_->UnblockLanguage(GetOriginalLanguageCode()); 282 prefs_->UnblockLanguage(GetOriginalLanguageCode());
264 } 283 }
265 284
266 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value); 285 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value);
267 } 286 }
268 287
269 bool TranslateUIDelegate::IsSiteBlacklisted() { 288 bool TranslateUIDelegate::IsSiteBlacklisted() {
270 std::string host = GetPageHost(); 289 std::string host = GetPageHost();
271 return !host.empty() && prefs_->IsSiteBlacklisted(host); 290 return !host.empty() && prefs_->IsSiteBlacklisted(host);
272 } 291 }
273 292
274 void TranslateUIDelegate::SetSiteBlacklist(bool value) { 293 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
275 std::string host = GetPageHost(); 294 std::string host = GetPageHost();
276 if (host.empty()) 295 if (host.empty())
277 return; 296 return;
278 297
279 if (value) { 298 if (value) {
280 prefs_->BlacklistSite(host); 299 prefs_->BlacklistSite(host);
281 if (translate_manager_) { 300 if (translate_manager_) {
282 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 301 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
302 // Translation has been blocked for this site. Capture that in the metrics
303 // Note that we don't capture a language being unblocked... which is not
304 // the same as accepting a given translation for this site.
305 translate_manager_->RecordTranslateEvent(
306 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE);
283 } 307 }
284 } else { 308 } else {
285 prefs_->RemoveSiteFromBlacklist(host); 309 prefs_->RemoveSiteFromBlacklist(host);
286 } 310 }
287 311
288 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value); 312 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value);
289 } 313 }
290 314
291 bool TranslateUIDelegate::ShouldAlwaysTranslate() { 315 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
292 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 316 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 337 // 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, 338 // "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. 339 // we should show as it as unchecked so we only check == N instead of >= N.
316 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == 340 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) ==
317 threshold; 341 threshold;
318 } 342 }
319 343
320 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 344 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
321 const std::string& original_lang = GetOriginalLanguageCode(); 345 const std::string& original_lang = GetOriginalLanguageCode();
322 const std::string& target_lang = GetTargetLanguageCode(); 346 const std::string& target_lang = GetTargetLanguageCode();
323 if (value) 347 if (value) {
324 prefs_->WhitelistLanguagePair(original_lang, target_lang); 348 prefs_->WhitelistLanguagePair(original_lang, target_lang);
325 else 349 // A default translation mapping has been accepted for this language.
350 // Capture that in the metrics. Note that we don't capture a language being
351 // unmapped... which is not the same as accepting some other translation
352 // for this language.
353 if (translate_manager_) {
354 translate_manager_->RecordTranslateEvent(
355 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE);
356 }
357 } else {
326 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 358 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang);
359 }
327 360
328 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value); 361 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value);
329 } 362 }
330 363
331 std::string TranslateUIDelegate::GetPageHost() { 364 std::string TranslateUIDelegate::GetPageHost() {
332 if (!translate_driver_->HasCurrentPage()) 365 if (!translate_driver_->HasCurrentPage())
333 return std::string(); 366 return std::string();
334 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); 367 return translate_driver_->GetLastCommittedURL().HostNoBrackets();
335 } 368 }
336 369
337 } // namespace translate 370 } // namespace translate
OLDNEW
« no previous file with comments | « components/translate/core/browser/translate_ranker.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698