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

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

Issue 2400503002: [Translate] Integrate TranslateEventProto UMA logging into TranslateManager. (Closed)
Patch Set: hamelphi@'s comments 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/translate/core/browser/language_state.h" 10 #include "components/translate/core/browser/language_state.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 142
143 UMA_HISTOGRAM_BOOLEAN(kModifyOriginalLang, true); 143 UMA_HISTOGRAM_BOOLEAN(kModifyOriginalLang, true);
144 original_language_index_ = language_index; 144 original_language_index_ = language_index;
145 } 145 }
146 146
147 void TranslateUIDelegate::UpdateOriginalLanguage( 147 void TranslateUIDelegate::UpdateOriginalLanguage(
148 const std::string& language_code) { 148 const std::string& language_code) {
149 for (size_t i = 0; i < languages_.size(); ++i) { 149 for (size_t i = 0; i < languages_.size(); ++i) {
150 if (languages_[i].first.compare(language_code) == 0) { 150 if (languages_[i].first.compare(language_code) == 0) {
151 UpdateOriginalLanguageIndex(i); 151 UpdateOriginalLanguageIndex(i);
152 if (translate_manager_) {
groby-ooo-7-16 2016/10/25 18:53:11 Looks like it's an invariant as well - no need for
Roger McFarlane (Chromium) 2016/10/25 20:07:56 Acknowledged.
153 translate_manager_->mutable_translate_event()
154 ->set_modified_source_language(language_code);
groby-ooo-7-16 2016/10/25 18:53:11 Do you really want to call this every time the lan
Roger McFarlane (Chromium) 2016/10/25 20:07:56 This just tracks the state. We only record once th
groby-ooo-7-16 2016/10/25 23:17:21 You still could pull that at decision time instead
155 }
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) {
172 for (size_t i = 0; i < languages_.size(); ++i) { 176 for (size_t i = 0; i < languages_.size(); ++i) {
173 if (languages_[i].first.compare(language_code) == 0) { 177 if (languages_[i].first.compare(language_code) == 0) {
174 UpdateTargetLanguageIndex(i); 178 UpdateTargetLanguageIndex(i);
179 if (translate_manager_) {
180 translate_manager_->mutable_translate_event()
groby-ooo-7-16 2016/10/25 18:53:11 see above
Roger McFarlane (Chromium) 2016/10/25 20:07:56 Acknowledged.
181 ->set_modified_target_language(language_code);
182 }
175 return; 183 return;
176 } 184 }
177 } 185 }
178 } 186 }
179 187
180 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const { 188 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const {
181 DCHECK_LT(index, GetNumberOfLanguages()); 189 DCHECK_LT(index, GetNumberOfLanguages());
182 return languages_[index].first; 190 return languages_[index].first;
183 } 191 }
184 192
(...skipping 17 matching lines...) Expand all
202 } 210 }
203 211
204 void TranslateUIDelegate::Translate() { 212 void TranslateUIDelegate::Translate() {
205 if (!translate_driver_->IsOffTheRecord()) { 213 if (!translate_driver_->IsOffTheRecord()) {
206 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); 214 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode());
207 prefs_->ResetTranslationIgnoredCount(GetOriginalLanguageCode()); 215 prefs_->ResetTranslationIgnoredCount(GetOriginalLanguageCode());
208 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); 216 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode());
209 } 217 }
210 218
211 if (translate_manager_) { 219 if (translate_manager_) {
220 translate_manager_->RecordTranslateEvent(
221 metrics::TranslateEventProto::USER_ACCEPT);
212 translate_manager_->TranslatePage(GetOriginalLanguageCode(), 222 translate_manager_->TranslatePage(GetOriginalLanguageCode(),
213 GetTargetLanguageCode(), false); 223 GetTargetLanguageCode(), false);
214 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); 224 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true);
215 } 225 }
216 } 226 }
217 227
218 void TranslateUIDelegate::RevertTranslation() { 228 void TranslateUIDelegate::RevertTranslation() {
219 if (translate_manager_) { 229 if (translate_manager_) {
220 translate_manager_->RevertTranslation(); 230 translate_manager_->RevertTranslation();
221 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); 231 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true);
(...skipping 10 matching lines...) Expand all
232 } else { 242 } else {
233 prefs_->IncrementTranslationIgnoredCount(language); 243 prefs_->IncrementTranslationIgnoredCount(language);
234 } 244 }
235 } 245 }
236 246
237 // Remember that the user declined the translation so as to prevent showing a 247 // Remember that the user declined the translation so as to prevent showing a
238 // translate UI for that page again. (TranslateManager initiates translations 248 // translate UI for that page again. (TranslateManager initiates translations
239 // when getting a LANGUAGE_DETERMINED from the page, which happens when a load 249 // 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 250 // stops. That could happen multiple times, including after the user already
241 // declined the translation.) 251 // declined the translation.)
242 if (explicitly_closed && translate_manager_) { 252 if (translate_manager_) {
243 translate_manager_->GetLanguageState().set_translation_declined(true); 253 translate_manager_->RecordTranslateEvent(
244 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); 254 explicitly_closed ? metrics::TranslateEventProto::USER_DECLINE
255 : metrics::TranslateEventProto::USER_IGNORE);
256 if (explicitly_closed)
257 translate_manager_->GetLanguageState().set_translation_declined(true);
245 } 258 }
246 259
247 if (!explicitly_closed) { 260 if (explicitly_closed) {
261 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
262 } else {
248 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); 263 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true);
249 } 264 }
250 } 265 }
251 266
252 bool TranslateUIDelegate::IsLanguageBlocked() { 267 bool TranslateUIDelegate::IsLanguageBlocked() {
253 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); 268 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode());
254 } 269 }
255 270
256 void TranslateUIDelegate::SetLanguageBlocked(bool value) { 271 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
257 if (value) { 272 if (value) {
258 prefs_->BlockLanguage(GetOriginalLanguageCode()); 273 prefs_->BlockLanguage(GetOriginalLanguageCode());
259 if (translate_manager_) { 274 if (translate_manager_) {
260 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 275 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
276 // Translation has been blocked for this language. Capture that in the
277 // metrics. Note that we don't capture a language being unblocked... which
278 // is not the same as accepting a given translation for this language.
279 translate_manager_->RecordTranslateEvent(
280 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE);
261 } 281 }
262 } else { 282 } else {
263 prefs_->UnblockLanguage(GetOriginalLanguageCode()); 283 prefs_->UnblockLanguage(GetOriginalLanguageCode());
264 } 284 }
265 285
266 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value); 286 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value);
267 } 287 }
268 288
269 bool TranslateUIDelegate::IsSiteBlacklisted() { 289 bool TranslateUIDelegate::IsSiteBlacklisted() {
270 std::string host = GetPageHost(); 290 std::string host = GetPageHost();
271 return !host.empty() && prefs_->IsSiteBlacklisted(host); 291 return !host.empty() && prefs_->IsSiteBlacklisted(host);
272 } 292 }
273 293
274 void TranslateUIDelegate::SetSiteBlacklist(bool value) { 294 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
275 std::string host = GetPageHost(); 295 std::string host = GetPageHost();
276 if (host.empty()) 296 if (host.empty())
277 return; 297 return;
278 298
279 if (value) { 299 if (value) {
280 prefs_->BlacklistSite(host); 300 prefs_->BlacklistSite(host);
281 if (translate_manager_) { 301 if (translate_manager_) {
282 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 302 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
303 // Translation has been blocked for this site. Capture that in the metrics
304 // Note that we don't capture a language being unblocked... which is not
groby-ooo-7-16 2016/10/25 18:53:11 Super-annoying nit: Usually, Chrome comments avoid
Roger McFarlane (Chromium) 2016/10/25 20:07:56 Will do, here, above and below... and will keep in
305 // the same as accepting a given translation for this site.
306 translate_manager_->RecordTranslateEvent(
307 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE);
283 } 308 }
284 } else { 309 } else {
285 prefs_->RemoveSiteFromBlacklist(host); 310 prefs_->RemoveSiteFromBlacklist(host);
286 } 311 }
287 312
288 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value); 313 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value);
289 } 314 }
290 315
291 bool TranslateUIDelegate::ShouldAlwaysTranslate() { 316 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
292 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 317 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 338 // 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, 339 // "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. 340 // we should show as it as unchecked so we only check == N instead of >= N.
316 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == 341 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) ==
317 threshold; 342 threshold;
318 } 343 }
319 344
320 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 345 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
321 const std::string& original_lang = GetOriginalLanguageCode(); 346 const std::string& original_lang = GetOriginalLanguageCode();
322 const std::string& target_lang = GetTargetLanguageCode(); 347 const std::string& target_lang = GetTargetLanguageCode();
323 if (value) 348 if (value) {
324 prefs_->WhitelistLanguagePair(original_lang, target_lang); 349 prefs_->WhitelistLanguagePair(original_lang, target_lang);
325 else 350 // A default translation mapping has been accepted for this language.
351 // Capture that in the metrics. Note that we don't capture a language being
groby-ooo-7-16 2016/10/25 18:53:11 see above re: "we"
Roger McFarlane (Chromium) 2016/10/25 20:07:56 Acknowledged.
352 // unmapped... which is not the same as accepting some other translation
353 // for this language.
354 if (translate_manager_) {
355 translate_manager_->RecordTranslateEvent(
356 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE);
357 }
358 } else {
326 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 359 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang);
360 }
327 361
328 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value); 362 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value);
329 } 363 }
330 364
331 std::string TranslateUIDelegate::GetPageHost() { 365 std::string TranslateUIDelegate::GetPageHost() {
332 if (!translate_driver_->HasCurrentPage()) 366 if (!translate_driver_->HasCurrentPage())
333 return std::string(); 367 return std::string();
334 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); 368 return translate_driver_->GetLastCommittedURL().HostNoBrackets();
335 } 369 }
336 370
337 } // namespace translate 371 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698