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/metrics/proto/translate_event.pb.h" | 10 #include "components/metrics/proto/translate_event.pb.h" |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
182 return; | 182 return; |
183 } | 183 } |
184 } | 184 } |
185 } | 185 } |
186 | 186 |
187 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const { | 187 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const { |
188 DCHECK_LT(index, GetNumberOfLanguages()); | 188 DCHECK_LT(index, GetNumberOfLanguages()); |
189 return languages_[index].first; | 189 return languages_[index].first; |
190 } | 190 } |
191 | 191 |
192 size_t TranslateUIDelegate::GetLanguageIndex(const std::string& language_code) { | |
193 for (size_t i = 0; i < languages_.size(); ++i) { | |
194 if (languages_[i].first.compare(language_code) == 0) { | |
Hiroshi Ichikawa
2017/05/10 08:36:55
How about simplifying this to languages_[i] == lan
jzw1
2017/05/11 03:03:17
Wouldn't I need to do langauges_[i].first == langu
Hiroshi Ichikawa
2017/05/11 04:14:15
Oops sorry, that's what I tried to mean.
| |
195 return i; | |
196 } | |
197 } | |
198 return kNoIndex; | |
199 } | |
200 | |
192 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const { | 201 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const { |
193 if (index == kNoIndex) | 202 if (index == kNoIndex) |
194 return base::string16(); | 203 return base::string16(); |
195 DCHECK_LT(index, GetNumberOfLanguages()); | 204 DCHECK_LT(index, GetNumberOfLanguages()); |
196 return languages_[index].second; | 205 return languages_[index].second; |
197 } | 206 } |
198 | 207 |
199 std::string TranslateUIDelegate::GetOriginalLanguageCode() const { | 208 std::string TranslateUIDelegate::GetOriginalLanguageCode() const { |
200 return (GetOriginalLanguageIndex() == kNoIndex) | 209 return (GetOriginalLanguageIndex() == kNoIndex) |
201 ? translate::kUnknownLanguageCode | 210 ? translate::kUnknownLanguageCode |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
257 } | 266 } |
258 | 267 |
259 if (explicitly_closed) { | 268 if (explicitly_closed) { |
260 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); | 269 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); |
261 } else { | 270 } else { |
262 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); | 271 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); |
263 } | 272 } |
264 } | 273 } |
265 | 274 |
266 bool TranslateUIDelegate::IsLanguageBlocked() { | 275 bool TranslateUIDelegate::IsLanguageBlocked() { |
267 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); | 276 return IsLanguageBlocked(GetOriginalLanguageCode()); |
277 } | |
278 | |
279 bool TranslateUIDelegate::IsLanguageBlocked(const std::string& language_code) { | |
280 return prefs_->IsBlockedLanguage(language_code); | |
268 } | 281 } |
269 | 282 |
270 void TranslateUIDelegate::SetLanguageBlocked(bool value) { | 283 void TranslateUIDelegate::SetLanguageBlocked(bool value) { |
284 SetLanguageBlocked(value, GetOriginalLanguageCode()); | |
285 } | |
286 | |
287 void TranslateUIDelegate::SetLanguageBlocked(bool value, | |
288 const std::string& language_code) { | |
271 if (value) { | 289 if (value) { |
272 prefs_->BlockLanguage(GetOriginalLanguageCode()); | 290 prefs_->BlockLanguage(language_code); |
273 if (translate_manager_) { | 291 if (translate_manager_) { |
274 translate_manager_->GetLanguageState().SetTranslateEnabled(false); | 292 translate_manager_->GetLanguageState().SetTranslateEnabled(false); |
275 // Translation has been blocked for this language. Capture that in the | 293 // Translation has been blocked for this language. Capture that in the |
276 // metrics. Note that we don't capture a language being unblocked... which | 294 // 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. | 295 // is not the same as accepting a given translation for this language. |
278 translate_manager_->RecordTranslateEvent( | 296 translate_manager_->RecordTranslateEvent( |
279 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE); | 297 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE); |
280 } | 298 } |
281 } else { | 299 } else { |
282 prefs_->UnblockLanguage(GetOriginalLanguageCode()); | 300 prefs_->UnblockLanguage(language_code); |
283 } | 301 } |
284 | 302 |
285 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value); | 303 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value); |
286 } | 304 } |
287 | 305 |
288 bool TranslateUIDelegate::IsSiteBlacklisted() { | 306 bool TranslateUIDelegate::IsSiteBlacklisted() { |
289 std::string host = GetPageHost(); | 307 return IsSiteBlacklisted(GetPageHost()); |
290 return !host.empty() && prefs_->IsSiteBlacklisted(host); | 308 } |
309 | |
310 bool TranslateUIDelegate::IsSiteBlacklisted(const std::string& page_host) { | |
311 return !page_host.empty() && prefs_->IsSiteBlacklisted(page_host); | |
291 } | 312 } |
292 | 313 |
293 void TranslateUIDelegate::SetSiteBlacklist(bool value) { | 314 void TranslateUIDelegate::SetSiteBlacklist(bool value) { |
294 std::string host = GetPageHost(); | 315 SetSiteBlacklist(value, GetPageHost()); |
295 if (host.empty()) | 316 } |
317 | |
318 void TranslateUIDelegate::SetSiteBlacklist(bool value, | |
319 const std::string& page_host) { | |
320 if (page_host.empty()) | |
296 return; | 321 return; |
297 | 322 |
298 if (value) { | 323 if (value) { |
299 prefs_->BlacklistSite(host); | 324 prefs_->BlacklistSite(page_host); |
300 if (translate_manager_) { | 325 if (translate_manager_) { |
301 translate_manager_->GetLanguageState().SetTranslateEnabled(false); | 326 translate_manager_->GetLanguageState().SetTranslateEnabled(false); |
302 // Translation has been blocked for this site. Capture that in the metrics | 327 // 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 | 328 // Note that we don't capture a language being unblocked... which is not |
304 // the same as accepting a given translation for this site. | 329 // the same as accepting a given translation for this site. |
305 translate_manager_->RecordTranslateEvent( | 330 translate_manager_->RecordTranslateEvent( |
306 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE); | 331 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE); |
307 } | 332 } |
308 } else { | 333 } else { |
309 prefs_->RemoveSiteFromBlacklist(host); | 334 prefs_->RemoveSiteFromBlacklist(page_host); |
310 } | 335 } |
311 | 336 |
312 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value); | 337 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value); |
313 } | 338 } |
314 | 339 |
315 bool TranslateUIDelegate::ShouldAlwaysTranslate() { | 340 bool TranslateUIDelegate::ShouldAlwaysTranslate() { |
316 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), | 341 return ShouldAlwaysTranslate(GetOriginalLanguageCode(), |
317 GetTargetLanguageCode()); | 342 GetTargetLanguageCode()); |
343 } | |
344 | |
345 bool TranslateUIDelegate::ShouldAlwaysTranslate( | |
346 const std::string& from_language, | |
347 const std::string& to_language) { | |
348 return prefs_->IsLanguagePairWhitelisted(from_language, to_language); | |
349 } | |
350 | |
351 std::string TranslateUIDelegate::GetAlwaysTranslateToLanguage( | |
352 const std::string& from_language) { | |
353 std::string auto_target_lang; | |
354 if (prefs_->ShouldAutoTranslate(from_language, &auto_target_lang)) { | |
355 return auto_target_lang; | |
356 } else { | |
357 return std::string(); | |
358 } | |
318 } | 359 } |
319 | 360 |
320 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() { | 361 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() { |
321 if (ShouldAlwaysTranslate()) | 362 if (ShouldAlwaysTranslate()) |
322 return true; | 363 return true; |
323 | 364 |
324 std::map<std::string, std::string> params; | 365 std::map<std::string, std::string> params; |
325 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName, | 366 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName, |
326 ¶ms)) | 367 ¶ms)) |
327 return false; | 368 return false; |
328 int threshold = 0; | 369 int threshold = 0; |
329 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold], | 370 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold], |
330 &threshold); | 371 &threshold); |
331 if (threshold <= 0) | 372 if (threshold <= 0) |
332 return false; | 373 return false; |
333 | 374 |
334 // After N clicks on Translate for the same language. | 375 // After N clicks on Translate for the same language. |
335 // We check for == N instead of >= N because if the user translates with the | 376 // We check for == N instead of >= N because if the user translates with the |
336 // "Always do this?" on, then the next time the bubble won't show up. | 377 // "Always do this?" on, then the next time the bubble won't show up. |
337 // The only chance the bubble will show up is after the user manually unchecks | 378 // The only chance the bubble will show up is after the user manually unchecks |
338 // "Always do this?". In that case, since it is after user explictly unchecks, | 379 // "Always do this?". In that case, since it is after user explictly unchecks, |
339 // we should show as it as unchecked so we only check == N instead of >= N. | 380 // we should show as it as unchecked so we only check == N instead of >= N. |
340 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == | 381 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == |
341 threshold; | 382 threshold; |
342 } | 383 } |
343 | 384 |
344 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { | 385 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { |
345 const std::string& original_lang = GetOriginalLanguageCode(); | 386 const std::string& original_lang = GetOriginalLanguageCode(); |
346 const std::string& target_lang = GetTargetLanguageCode(); | 387 const std::string& target_lang = GetTargetLanguageCode(); |
388 SetAlwaysTranslate(value, original_lang, target_lang); | |
389 } | |
390 | |
391 void TranslateUIDelegate::SetAlwaysTranslate(bool value, | |
392 const std::string& from_language, | |
393 const std::string& to_language) { | |
347 if (value) { | 394 if (value) { |
348 prefs_->WhitelistLanguagePair(original_lang, target_lang); | 395 prefs_->WhitelistLanguagePair(from_language, to_language); |
349 // A default translation mapping has been accepted for this language. | 396 // 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 | 397 // 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 | 398 // unmapped... which is not the same as accepting some other translation |
352 // for this language. | 399 // for this language. |
353 if (translate_manager_) { | 400 if (translate_manager_) { |
354 translate_manager_->RecordTranslateEvent( | 401 translate_manager_->RecordTranslateEvent( |
355 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE); | 402 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE); |
356 } | 403 } |
357 } else { | 404 } else { |
358 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); | 405 prefs_->RemoveLanguagePairFromWhitelist(from_language, to_language); |
359 } | 406 } |
360 | 407 |
361 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value); | 408 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value); |
362 } | 409 } |
363 | 410 |
364 std::string TranslateUIDelegate::GetPageHost() { | 411 std::string TranslateUIDelegate::GetPageHost() { |
365 if (!translate_driver_->HasCurrentPage()) | 412 if (!translate_driver_->HasCurrentPage()) |
366 return std::string(); | 413 return std::string(); |
367 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); | 414 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); |
368 } | 415 } |
369 | 416 |
370 } // namespace translate | 417 } // namespace translate |
OLD | NEW |