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

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

Issue 1978203002: Translate: Remove the legacy pref 'translate_language_blacklist' (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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_prefs.h" 5 #include "components/translate/core/browser/translate_prefs.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/strings/string_split.h" 10 #include "base/strings/string_split.h"
(...skipping 18 matching lines...) Expand all
29 "translate_ignored_count_for_language"; 29 "translate_ignored_count_for_language";
30 const char TranslatePrefs::kPrefTranslateAcceptedCount[] = 30 const char TranslatePrefs::kPrefTranslateAcceptedCount[] =
31 "translate_accepted_count"; 31 "translate_accepted_count";
32 const char TranslatePrefs::kPrefTranslateBlockedLanguages[] = 32 const char TranslatePrefs::kPrefTranslateBlockedLanguages[] =
33 "translate_blocked_languages"; 33 "translate_blocked_languages";
34 const char TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage[] = 34 const char TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage[] =
35 "translate_last_denied_time_for_language"; 35 "translate_last_denied_time_for_language";
36 const char TranslatePrefs::kPrefTranslateTooOftenDeniedForLanguage[] = 36 const char TranslatePrefs::kPrefTranslateTooOftenDeniedForLanguage[] =
37 "translate_too_often_denied_for_language"; 37 "translate_too_often_denied_for_language";
38 38
39 // This property is deprecated but there is still some usages. Don't use this
40 // for new code.
41 static const char kPrefTranslateLanguageBlacklist[] =
42 "translate_language_blacklist";
43
44 // The below properties used to be used but now are deprecated. Don't use them 39 // The below properties used to be used but now are deprecated. Don't use them
45 // since an old profile might have some values there. 40 // since an old profile might have some values there.
46 // 41 //
47 // * translate_last_denied_time 42 // * translate_last_denied_time
48 // * translate_too_often_denied 43 // * translate_too_often_denied
44 // * translate_language_blacklist
49 45
50 namespace { 46 namespace {
51 47
52 void GetBlacklistedLanguages(const PrefService* prefs,
53 std::vector<std::string>* languages) {
54 DCHECK(languages);
55 DCHECK(languages->empty());
56
57 const char* key = kPrefTranslateLanguageBlacklist;
58 const base::ListValue* list = prefs->GetList(key);
59 for (base::ListValue::const_iterator it = list->begin(); it != list->end();
60 ++it) {
61 std::string lang;
62 (*it)->GetAsString(&lang);
63 languages->push_back(lang);
64 }
65 }
66
67 // Expands language codes to make these more suitable for Accept-Language. 48 // Expands language codes to make these more suitable for Accept-Language.
68 // Example: ['en-US', 'ja', 'en-CA'] => ['en-US', 'en', 'ja', 'en-CA']. 49 // Example: ['en-US', 'ja', 'en-CA'] => ['en-US', 'en', 'ja', 'en-CA'].
69 // 'en' won't appear twice as this function eliminates duplicates. 50 // 'en' won't appear twice as this function eliminates duplicates.
70 void ExpandLanguageCodes(const std::vector<std::string>& languages, 51 void ExpandLanguageCodes(const std::vector<std::string>& languages,
71 std::vector<std::string>* expanded_languages) { 52 std::vector<std::string>* expanded_languages) {
72 DCHECK(expanded_languages); 53 DCHECK(expanded_languages);
73 DCHECK(expanded_languages->empty()); 54 DCHECK(expanded_languages->empty());
74 55
75 // used to eliminate duplicates. 56 // used to eliminate duplicates.
76 std::set<std::string> seen; 57 std::set<std::string> seen;
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 languages.end()) { 192 languages.end()) {
212 languages.push_back(language); 193 languages.push_back(language);
213 UpdateLanguageList(languages); 194 UpdateLanguageList(languages);
214 } 195 }
215 } 196 }
216 197
217 void TranslatePrefs::UnblockLanguage(const std::string& original_language) { 198 void TranslatePrefs::UnblockLanguage(const std::string& original_language) {
218 RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages, original_language); 199 RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages, original_language);
219 } 200 }
220 201
221 void TranslatePrefs::RemoveLanguageFromLegacyBlacklist(
222 const std::string& original_language) {
223 RemoveValueFromBlacklist(kPrefTranslateLanguageBlacklist, original_language);
224 }
225
226 bool TranslatePrefs::IsSiteBlacklisted(const std::string& site) const { 202 bool TranslatePrefs::IsSiteBlacklisted(const std::string& site) const {
227 return IsValueBlacklisted(kPrefTranslateSiteBlacklist, site); 203 return IsValueBlacklisted(kPrefTranslateSiteBlacklist, site);
228 } 204 }
229 205
230 void TranslatePrefs::BlacklistSite(const std::string& site) { 206 void TranslatePrefs::BlacklistSite(const std::string& site) {
231 BlacklistValue(kPrefTranslateSiteBlacklist, site); 207 BlacklistValue(kPrefTranslateSiteBlacklist, site);
232 } 208 }
233 209
234 void TranslatePrefs::RemoveSiteFromBlacklist(const std::string& site) { 210 void TranslatePrefs::RemoveSiteFromBlacklist(const std::string& site) {
235 RemoveValueFromBlacklist(kPrefTranslateSiteBlacklist, site); 211 RemoveValueFromBlacklist(kPrefTranslateSiteBlacklist, site);
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 if (dict && dict->GetString(original_language, target_language)) { 444 if (dict && dict->GetString(original_language, target_language)) {
469 DCHECK(!target_language->empty()); 445 DCHECK(!target_language->empty());
470 return !target_language->empty(); 446 return !target_language->empty();
471 } 447 }
472 return false; 448 return false;
473 } 449 }
474 450
475 // static 451 // static
476 void TranslatePrefs::RegisterProfilePrefs( 452 void TranslatePrefs::RegisterProfilePrefs(
477 user_prefs::PrefRegistrySyncable* registry) { 453 user_prefs::PrefRegistrySyncable* registry) {
478 registry->RegisterListPref(kPrefTranslateLanguageBlacklist,
479 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
480 registry->RegisterListPref(kPrefTranslateSiteBlacklist, 454 registry->RegisterListPref(kPrefTranslateSiteBlacklist,
481 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 455 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
482 registry->RegisterDictionaryPref( 456 registry->RegisterDictionaryPref(
483 kPrefTranslateWhitelists, 457 kPrefTranslateWhitelists,
484 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 458 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
485 registry->RegisterDictionaryPref( 459 registry->RegisterDictionaryPref(
486 kPrefTranslateDeniedCount, 460 kPrefTranslateDeniedCount,
487 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 461 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
488 registry->RegisterDictionaryPref( 462 registry->RegisterDictionaryPref(
489 kPrefTranslateIgnoredCount, 463 kPrefTranslateIgnoredCount,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 std::string target_lang; 506 std::string target_lang;
533 if (list->empty() || 507 if (list->empty() ||
534 !list->GetString(list->GetSize() - 1, &target_lang) || 508 !list->GetString(list->GetSize() - 1, &target_lang) ||
535 target_lang.empty()) { 509 target_lang.empty()) {
536 dict->Remove(key, NULL); 510 dict->Remove(key, NULL);
537 } else { 511 } else {
538 dict->SetString(key, target_lang); 512 dict->SetString(key, target_lang);
539 } 513 }
540 } 514 }
541 } 515 }
542
543 // Get the union of the blacklist and the Accept languages, and set this to
544 // the new language set 'translate_blocked_languages'. This is used for the
545 // settings UI for Translate and configration to determine which langauage
546 // should be translated instead of the blacklist. The blacklist is no longer
547 // used after launching the settings UI.
548 // After that, Set 'translate_languages_not_translate' to Accept languages to
549 // enable settings for users.
550 bool merged = user_prefs->HasPrefPath(kPrefTranslateBlockedLanguages);
551
552 if (!merged) {
553 std::vector<std::string> blacklisted_languages;
554 GetBlacklistedLanguages(user_prefs, &blacklisted_languages);
555
556 std::vector<std::string> accept_languages =
557 base::SplitString(user_prefs->GetString(accept_languages_pref), ",",
558 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
559
560 std::vector<std::string> blocked_languages;
561 CreateBlockedLanguages(&blocked_languages, blacklisted_languages,
562 accept_languages);
563
564 // Create the new preference kPrefTranslateBlockedLanguages.
565 {
566 base::ListValue blocked_languages_list;
567 for (std::vector<std::string>::const_iterator it =
568 blocked_languages.begin();
569 it != blocked_languages.end(); ++it) {
570 blocked_languages_list.Append(new base::StringValue(*it));
571 }
572 ListPrefUpdate update(user_prefs, kPrefTranslateBlockedLanguages);
573 base::ListValue* list = update.Get();
574 DCHECK(list != NULL);
575 list->Swap(&blocked_languages_list);
576 }
577
578 // Update kAcceptLanguages
579 for (std::vector<std::string>::const_iterator it =
580 blocked_languages.begin();
581 it != blocked_languages.end(); ++it) {
582 std::string lang = *it;
583 translate::ToChromeLanguageSynonym(&lang);
584 bool not_found =
585 std::find(accept_languages.begin(), accept_languages.end(), lang) ==
586 accept_languages.end();
587 if (not_found)
588 accept_languages.push_back(lang);
589 }
590
591 std::string new_accept_languages_str =
592 base::JoinString(accept_languages, ",");
593 user_prefs->SetString(accept_languages_pref, new_accept_languages_str);
594 }
595 }
596
597 // static
598 void TranslatePrefs::CreateBlockedLanguages(
599 std::vector<std::string>* blocked_languages,
600 const std::vector<std::string>& blacklisted_languages,
601 const std::vector<std::string>& accept_languages) {
602 DCHECK(blocked_languages);
603 DCHECK(blocked_languages->empty());
604
605 std::set<std::string> result;
606
607 for (std::vector<std::string>::const_iterator it =
608 blacklisted_languages.begin();
609 it != blacklisted_languages.end(); ++it) {
610 result.insert(*it);
611 }
612
613 const std::string& app_locale =
614 TranslateDownloadManager::GetInstance()->application_locale();
615 std::string ui_lang = TranslateDownloadManager::GetLanguageCode(app_locale);
616 bool is_ui_english =
617 ui_lang == "en" ||
618 base::StartsWith(ui_lang, "en-", base::CompareCase::INSENSITIVE_ASCII);
619
620 for (std::vector<std::string>::const_iterator it = accept_languages.begin();
621 it != accept_languages.end(); ++it) {
622 std::string lang = *it;
623 translate::ToTranslateLanguageSynonym(&lang);
624
625 // Regarding http://crbug.com/36182, even though English exists in Accept
626 // language list, English could be translated on non-English locale.
627 if (lang == "en" && !is_ui_english)
628 continue;
629
630 result.insert(lang);
631 }
632
633 blocked_languages->insert(blocked_languages->begin(), result.begin(),
634 result.end());
635 } 516 }
636 517
637 bool TranslatePrefs::IsValueInList(const base::ListValue* list, 518 bool TranslatePrefs::IsValueInList(const base::ListValue* list,
638 const std::string& in_value) const { 519 const std::string& in_value) const {
639 for (size_t i = 0; i < list->GetSize(); ++i) { 520 for (size_t i = 0; i < list->GetSize(); ++i) {
640 std::string value; 521 std::string value;
641 if (list->GetString(i, &value) && value == in_value) 522 if (list->GetString(i, &value) && value == in_value)
642 return true; 523 return true;
643 } 524 }
644 return false; 525 return false;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 const base::ListValue* blacklist = prefs_->GetList(pref_id); 560 const base::ListValue* blacklist = prefs_->GetList(pref_id);
680 return (blacklist == NULL || blacklist->empty()); 561 return (blacklist == NULL || blacklist->empty());
681 } 562 }
682 563
683 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { 564 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const {
684 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id); 565 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id);
685 return (dict == NULL || dict->empty()); 566 return (dict == NULL || dict->empty());
686 } 567 }
687 568
688 } // namespace translate 569 } // namespace translate
OLDNEW
« no previous file with comments | « components/translate/core/browser/translate_prefs.h ('k') | components/translate/core/browser/translate_prefs_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698