Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |