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

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

Issue 2872083003: Added translation policy API. (Closed)
Patch Set: updated comments Created 3 years, 7 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/metrics/proto/translate_event.pb.h"
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
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) {
Eugene But (OOO till 7-30) 2017/05/11 15:48:58 Do you want to use std::find instead?
jzw1 2017/05/12 03:46:45 Can you check this for me? I'm not sure if it's 10
194 if (languages_[i].first == language_code) {
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
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())
Eugene But (OOO till 7-30) 2017/05/11 15:48:59 Should this be DCHECK instead? Is it reasonable fo
jzw1 2017/05/12 03:46:45 I just adapted the original implementation, so I'm
Eugene But (OOO till 7-30) 2017/05/12 14:39:19 What would be the value to accept empty strings? T
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 prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(),
317 GetTargetLanguageCode()); 342 GetTargetLanguageCode());
318 } 343 }
319 344
345 std::string TranslateUIDelegate::GetAlwaysTranslateToLanguage(
346 const std::string& from_language) {
347 std::string auto_target_lang;
348 if (prefs_->ShouldAutoTranslate(from_language, &auto_target_lang)) {
349 return auto_target_lang;
350 } else {
351 return std::string();
352 }
353 }
354
320 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() { 355 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() {
321 if (ShouldAlwaysTranslate()) 356 if (ShouldAlwaysTranslate())
322 return true; 357 return true;
323 358
324 std::map<std::string, std::string> params; 359 std::map<std::string, std::string> params;
325 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName, 360 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName,
326 &params)) 361 &params))
327 return false; 362 return false;
328 int threshold = 0; 363 int threshold = 0;
329 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold], 364 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold],
330 &threshold); 365 &threshold);
331 if (threshold <= 0) 366 if (threshold <= 0)
332 return false; 367 return false;
333 368
334 // After N clicks on Translate for the same language. 369 // After N clicks on Translate for the same language.
335 // We check for == N instead of >= N because if the user translates with the 370 // 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. 371 // "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 372 // 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, 373 // "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. 374 // we should show as it as unchecked so we only check == N instead of >= N.
340 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == 375 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) ==
341 threshold; 376 threshold;
342 } 377 }
343 378
344 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 379 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
345 const std::string& original_lang = GetOriginalLanguageCode(); 380 const std::string& original_lang = GetOriginalLanguageCode();
346 const std::string& target_lang = GetTargetLanguageCode(); 381 const std::string& target_lang = GetTargetLanguageCode();
382 SetAlwaysTranslate(value, original_lang, target_lang);
383 }
384
385 void TranslateUIDelegate::SetAlwaysTranslate(bool value,
386 const std::string& from_language,
387 const std::string& to_language) {
347 if (value) { 388 if (value) {
348 prefs_->WhitelistLanguagePair(original_lang, target_lang); 389 prefs_->WhitelistLanguagePair(from_language, to_language);
349 // A default translation mapping has been accepted for this language. 390 // 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 391 // 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 392 // unmapped... which is not the same as accepting some other translation
352 // for this language. 393 // for this language.
353 if (translate_manager_) { 394 if (translate_manager_) {
354 translate_manager_->RecordTranslateEvent( 395 translate_manager_->RecordTranslateEvent(
355 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE); 396 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE);
356 } 397 }
357 } else { 398 } else {
358 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 399 prefs_->RemoveLanguagePairFromWhitelist(from_language, to_language);
359 } 400 }
360 401
361 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value); 402 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value);
362 } 403 }
363 404
364 std::string TranslateUIDelegate::GetPageHost() { 405 std::string TranslateUIDelegate::GetPageHost() {
365 if (!translate_driver_->HasCurrentPage()) 406 if (!translate_driver_->HasCurrentPage())
366 return std::string(); 407 return std::string();
367 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); 408 return translate_driver_->GetLastCommittedURL().HostNoBrackets();
368 } 409 }
369 410
370 } // namespace translate 411 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698