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_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" |
| 11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
| 12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
| 13 #include "components/pref_registry/pref_registry_syncable.h" | 13 #include "components/pref_registry/pref_registry_syncable.h" |
| 14 #include "components/prefs/pref_service.h" | 14 #include "components/prefs/pref_service.h" |
| 15 #include "components/prefs/scoped_user_pref_update.h" | 15 #include "components/prefs/scoped_user_pref_update.h" |
| 16 #include "components/translate/core/browser/translate_accept_languages.h" | 16 #include "components/translate/core/browser/translate_accept_languages.h" |
| 17 #include "components/translate/core/browser/translate_download_manager.h" | 17 #include "components/translate/core/browser/translate_download_manager.h" |
| 18 #include "components/translate/core/browser/translate_experiment.h" | 18 #include "components/translate/core/browser/translate_experiment.h" |
| 19 #include "components/translate/core/common/translate_util.h" | 19 #include "components/translate/core/common/translate_util.h" |
| 20 | 20 |
| 21 namespace translate { | 21 namespace translate { |
| 22 | 22 |
| 23 const char TranslatePrefs::kPrefTranslateSiteBlacklist[] = | 23 const char TranslatePrefs::kPrefTranslateSiteBlacklist[] = |
| 24 "translate_site_blacklist"; | 24 "translate_site_blacklist"; |
| 25 const char TranslatePrefs::kPrefTranslateWhitelists[] = | 25 const char TranslatePrefs::kPrefTranslateWhitelists[] = "translate_whitelists"; |
| 26 "translate_whitelists"; | |
| 27 const char TranslatePrefs::kPrefTranslateDeniedCount[] = | 26 const char TranslatePrefs::kPrefTranslateDeniedCount[] = |
| 28 "translate_denied_count_for_language"; | 27 "translate_denied_count_for_language"; |
| 28 const char TranslatePrefs::kPrefTranslateIgnoredCount[] = | |
| 29 "translate_ignored_count_for_language"; | |
| 29 const char TranslatePrefs::kPrefTranslateAcceptedCount[] = | 30 const char TranslatePrefs::kPrefTranslateAcceptedCount[] = |
| 30 "translate_accepted_count"; | 31 "translate_accepted_count"; |
| 31 const char TranslatePrefs::kPrefTranslateBlockedLanguages[] = | 32 const char TranslatePrefs::kPrefTranslateBlockedLanguages[] = |
| 32 "translate_blocked_languages"; | 33 "translate_blocked_languages"; |
| 33 const char TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage[] = | 34 const char TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage[] = |
| 34 "translate_last_denied_time_for_language"; | 35 "translate_last_denied_time_for_language"; |
| 35 const char TranslatePrefs::kPrefTranslateTooOftenDeniedForLanguage[] = | 36 const char TranslatePrefs::kPrefTranslateTooOftenDeniedForLanguage[] = |
| 36 "translate_too_often_denied_for_language"; | 37 "translate_too_often_denied_for_language"; |
| 37 | 38 |
| 38 // This property is deprecated but there is still some usages. Don't use this | 39 // This property is deprecated but there is still some usages. Don't use this |
| 39 // for new code. | 40 // for new code. |
| 40 static const char kPrefTranslateLanguageBlacklist[] = | 41 static const char kPrefTranslateLanguageBlacklist[] = |
| 41 "translate_language_blacklist"; | 42 "translate_language_blacklist"; |
| 42 | 43 |
| 43 // The below properties used to be used but now are deprecated. Don't use them | 44 // The below properties used to be used but now are deprecated. Don't use them |
| 44 // since an old profile might have some values there. | 45 // since an old profile might have some values there. |
| 45 // | 46 // |
| 46 // * translate_last_denied_time | 47 // * translate_last_denied_time |
| 47 // * translate_too_often_denied | 48 // * translate_too_often_denied |
| 48 | 49 |
| 49 namespace { | 50 namespace { |
| 50 | 51 |
| 51 void GetBlacklistedLanguages(const PrefService* prefs, | 52 void GetBlacklistedLanguages(const PrefService* prefs, |
| 52 std::vector<std::string>* languages) { | 53 std::vector<std::string>* languages) { |
| 53 DCHECK(languages); | 54 DCHECK(languages); |
| 54 DCHECK(languages->empty()); | 55 DCHECK(languages->empty()); |
| 55 | 56 |
| 56 const char* key = kPrefTranslateLanguageBlacklist; | 57 const char* key = kPrefTranslateLanguageBlacklist; |
| 57 const base::ListValue* list = prefs->GetList(key); | 58 const base::ListValue* list = prefs->GetList(key); |
| 58 for (base::ListValue::const_iterator it = list->begin(); | 59 for (base::ListValue::const_iterator it = list->begin(); it != list->end(); |
| 59 it != list->end(); ++it) { | 60 ++it) { |
| 60 std::string lang; | 61 std::string lang; |
| 61 (*it)->GetAsString(&lang); | 62 (*it)->GetAsString(&lang); |
| 62 languages->push_back(lang); | 63 languages->push_back(lang); |
| 63 } | 64 } |
| 64 } | 65 } |
| 65 | 66 |
| 66 // Expands language codes to make these more suitable for Accept-Language. | 67 // Expands language codes to make these more suitable for Accept-Language. |
| 67 // Example: ['en-US', 'ja', 'en-CA'] => ['en-US', 'en', 'ja', 'en-CA']. | 68 // Example: ['en-US', 'ja', 'en-CA'] => ['en-US', 'en', 'ja', 'en-CA']. |
| 68 // 'en' won't appear twice as this function eliminates duplicates. | 69 // 'en' won't appear twice as this function eliminates duplicates. |
| 69 void ExpandLanguageCodes(const std::vector<std::string>& languages, | 70 void ExpandLanguageCodes(const std::vector<std::string>& languages, |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 89 const std::string& main_part = tokens[0]; | 90 const std::string& main_part = tokens[0]; |
| 90 if (seen.find(main_part) == seen.end()) { | 91 if (seen.find(main_part) == seen.end()) { |
| 91 expanded_languages->push_back(main_part); | 92 expanded_languages->push_back(main_part); |
| 92 seen.insert(main_part); | 93 seen.insert(main_part); |
| 93 } | 94 } |
| 94 } | 95 } |
| 95 } | 96 } |
| 96 | 97 |
| 97 } // namespace | 98 } // namespace |
| 98 | 99 |
| 100 const base::Feature kTranslateUI2016Q2{"TranslateUI2016Q2", | |
| 101 base::FEATURE_DISABLED_BY_DEFAULT}; | |
| 102 | |
| 99 DenialTimeUpdate::DenialTimeUpdate(PrefService* prefs, | 103 DenialTimeUpdate::DenialTimeUpdate(PrefService* prefs, |
| 100 const std::string& language, | 104 const std::string& language, |
| 101 size_t max_denial_count) | 105 size_t max_denial_count) |
| 102 : denial_time_dict_update_( | 106 : denial_time_dict_update_( |
| 103 prefs, | 107 prefs, |
| 104 TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage), | 108 TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage), |
| 105 language_(language), | 109 language_(language), |
| 106 max_denial_count_(max_denial_count), | 110 max_denial_count_(max_denial_count), |
| 107 time_list_(nullptr) {} | 111 time_list_(nullptr) {} |
| 108 | 112 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 146 DCHECK(GetDenialTimes()); | 150 DCHECK(GetDenialTimes()); |
| 147 GetDenialTimes()->AppendDouble(denial_time.ToJsTime()); | 151 GetDenialTimes()->AppendDouble(denial_time.ToJsTime()); |
| 148 | 152 |
| 149 while (GetDenialTimes()->GetSize() >= max_denial_count_) | 153 while (GetDenialTimes()->GetSize() >= max_denial_count_) |
| 150 GetDenialTimes()->Remove(0, nullptr); | 154 GetDenialTimes()->Remove(0, nullptr); |
| 151 } | 155 } |
| 152 | 156 |
| 153 TranslatePrefs::TranslatePrefs(PrefService* user_prefs, | 157 TranslatePrefs::TranslatePrefs(PrefService* user_prefs, |
| 154 const char* accept_languages_pref, | 158 const char* accept_languages_pref, |
| 155 const char* preferred_languages_pref) | 159 const char* preferred_languages_pref) |
| 156 : accept_languages_pref_(accept_languages_pref), | 160 : accept_languages_pref_(accept_languages_pref), prefs_(user_prefs) { |
| 157 prefs_(user_prefs) { | |
| 158 #if defined(OS_CHROMEOS) | 161 #if defined(OS_CHROMEOS) |
| 159 preferred_languages_pref_ = preferred_languages_pref; | 162 preferred_languages_pref_ = preferred_languages_pref; |
| 160 #else | 163 #else |
| 161 DCHECK(!preferred_languages_pref); | 164 DCHECK(!preferred_languages_pref); |
| 162 #endif | 165 #endif |
| 163 } | 166 } |
| 164 | 167 |
| 165 void TranslatePrefs::SetCountry(const std::string& country) { | 168 void TranslatePrefs::SetCountry(const std::string& country) { |
| 166 country_ = country; | 169 country_ = country; |
| 167 } | 170 } |
| 168 | 171 |
| 169 std::string TranslatePrefs::GetCountry() const { | 172 std::string TranslatePrefs::GetCountry() const { |
| 170 return country_; | 173 return country_; |
| 171 } | 174 } |
| 172 | 175 |
| 173 void TranslatePrefs::ResetToDefaults() { | 176 void TranslatePrefs::ResetToDefaults() { |
| 174 ClearBlockedLanguages(); | 177 ClearBlockedLanguages(); |
| 175 ClearBlacklistedSites(); | 178 ClearBlacklistedSites(); |
| 176 ClearWhitelistedLanguagePairs(); | 179 ClearWhitelistedLanguagePairs(); |
| 177 | 180 |
| 178 std::vector<std::string> languages; | 181 std::vector<std::string> languages; |
| 179 GetLanguageList(&languages); | 182 GetLanguageList(&languages); |
| 180 for (std::vector<std::string>::const_iterator it = languages.begin(); | 183 for (std::vector<std::string>::const_iterator it = languages.begin(); |
| 181 it != languages.end(); ++it) { | 184 it != languages.end(); ++it) { |
| 182 const std::string& language = *it; | 185 const std::string& language = *it; |
| 183 ResetTranslationAcceptedCount(language); | 186 ResetTranslationAcceptedCount(language); |
| 184 ResetTranslationDeniedCount(language); | 187 ResetTranslationDeniedCount(language); |
| 188 ResetTranslationIgnoredCount(language); | |
| 185 } | 189 } |
| 186 | 190 |
| 187 prefs_->ClearPref(kPrefTranslateLastDeniedTimeForLanguage); | 191 prefs_->ClearPref(kPrefTranslateLastDeniedTimeForLanguage); |
| 188 prefs_->ClearPref(kPrefTranslateTooOftenDeniedForLanguage); | 192 prefs_->ClearPref(kPrefTranslateTooOftenDeniedForLanguage); |
| 189 } | 193 } |
| 190 | 194 |
| 191 bool TranslatePrefs::IsBlockedLanguage( | 195 bool TranslatePrefs::IsBlockedLanguage( |
| 192 const std::string& original_language) const { | 196 const std::string& original_language) const { |
| 193 return IsValueBlacklisted(kPrefTranslateBlockedLanguages, | 197 return IsValueBlacklisted(kPrefTranslateBlockedLanguages, original_language); |
| 194 original_language); | |
| 195 } | 198 } |
| 196 | 199 |
| 197 void TranslatePrefs::BlockLanguage(const std::string& original_language) { | 200 void TranslatePrefs::BlockLanguage(const std::string& original_language) { |
| 198 BlacklistValue(kPrefTranslateBlockedLanguages, original_language); | 201 BlacklistValue(kPrefTranslateBlockedLanguages, original_language); |
| 199 | 202 |
| 200 // Add the language to the language list at chrome://settings/languages. | 203 // Add the language to the language list at chrome://settings/languages. |
| 201 std::string language = original_language; | 204 std::string language = original_language; |
| 202 translate::ToChromeLanguageSynonym(&language); | 205 translate::ToChromeLanguageSynonym(&language); |
| 203 | 206 |
| 204 std::vector<std::string> languages; | 207 std::vector<std::string> languages; |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 309 int count = 0; | 312 int count = 0; |
| 310 dict->GetInteger(language, &count); | 313 dict->GetInteger(language, &count); |
| 311 dict->SetInteger(language, count + 1); | 314 dict->SetInteger(language, count + 1); |
| 312 } | 315 } |
| 313 | 316 |
| 314 void TranslatePrefs::ResetTranslationDeniedCount(const std::string& language) { | 317 void TranslatePrefs::ResetTranslationDeniedCount(const std::string& language) { |
| 315 DictionaryPrefUpdate update(prefs_, kPrefTranslateDeniedCount); | 318 DictionaryPrefUpdate update(prefs_, kPrefTranslateDeniedCount); |
| 316 update.Get()->SetInteger(language, 0); | 319 update.Get()->SetInteger(language, 0); |
| 317 } | 320 } |
| 318 | 321 |
| 322 int TranslatePrefs::GetTranslationIgnoredCount( | |
| 323 const std::string& language) const { | |
| 324 const base::DictionaryValue* dict = | |
| 325 prefs_->GetDictionary(kPrefTranslateIgnoredCount); | |
| 326 int count = 0; | |
| 327 return dict->GetInteger(language, &count) ? count : 0; | |
| 328 } | |
| 329 | |
| 330 void TranslatePrefs::IncrementTranslationIgnoredCount( | |
| 331 const std::string& language) { | |
| 332 DictionaryPrefUpdate update(prefs_, kPrefTranslateIgnoredCount); | |
| 333 base::DictionaryValue* dict = update.Get(); | |
| 334 | |
| 335 int count = 0; | |
| 336 dict->GetInteger(language, &count); | |
| 337 dict->SetInteger(language, count + 1); | |
| 338 } | |
| 339 | |
| 340 void TranslatePrefs::ResetTranslationIgnoredCount(const std::string& language) { | |
| 341 DictionaryPrefUpdate update(prefs_, kPrefTranslateIgnoredCount); | |
| 342 update.Get()->SetInteger(language, 0); | |
| 343 } | |
| 344 | |
| 319 int TranslatePrefs::GetTranslationAcceptedCount(const std::string& language) { | 345 int TranslatePrefs::GetTranslationAcceptedCount(const std::string& language) { |
| 320 const base::DictionaryValue* dict = | 346 const base::DictionaryValue* dict = |
| 321 prefs_->GetDictionary(kPrefTranslateAcceptedCount); | 347 prefs_->GetDictionary(kPrefTranslateAcceptedCount); |
| 322 int count = 0; | 348 int count = 0; |
| 323 return dict->GetInteger(language, &count) ? count : 0; | 349 return dict->GetInteger(language, &count) ? count : 0; |
| 324 } | 350 } |
| 325 | 351 |
| 326 void TranslatePrefs::IncrementTranslationAcceptedCount( | 352 void TranslatePrefs::IncrementTranslationAcceptedCount( |
| 327 const std::string& language) { | 353 const std::string& language) { |
| 328 DictionaryPrefUpdate update(prefs_, kPrefTranslateAcceptedCount); | 354 DictionaryPrefUpdate update(prefs_, kPrefTranslateAcceptedCount); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 351 return; | 377 return; |
| 352 | 378 |
| 353 if (now - oldest_denial_time <= base::TimeDelta::FromDays(1)) { | 379 if (now - oldest_denial_time <= base::TimeDelta::FromDays(1)) { |
| 354 DictionaryPrefUpdate update(prefs_, | 380 DictionaryPrefUpdate update(prefs_, |
| 355 kPrefTranslateTooOftenDeniedForLanguage); | 381 kPrefTranslateTooOftenDeniedForLanguage); |
| 356 update.Get()->SetBoolean(language, true); | 382 update.Get()->SetBoolean(language, true); |
| 357 } | 383 } |
| 358 } | 384 } |
| 359 | 385 |
| 360 bool TranslatePrefs::IsTooOftenDenied(const std::string& language) const { | 386 bool TranslatePrefs::IsTooOftenDenied(const std::string& language) const { |
| 361 const base::DictionaryValue* dict = | 387 if (base::FeatureList::IsEnabled(kTranslateUI2016Q2)) { |
| 362 prefs_->GetDictionary(kPrefTranslateTooOftenDeniedForLanguage); | 388 // In the new logic, we only hide the bubble if user denied it more than |
| 363 bool result = false; | 389 // 3 times or the user ignored more than 10 times. |
|
msw
2016/04/29 23:43:40
nit: 'ignored it'
ftang
2016/04/30 01:24:50
Done.
| |
| 364 return dict->GetBoolean(language, &result) ? result : false; | 390 return (GetTranslationDeniedCount(language) > 3) || |
| 391 (GetTranslationIgnoredCount(language) > 10); | |
| 392 } else { | |
| 393 const base::DictionaryValue* dict = | |
| 394 prefs_->GetDictionary(kPrefTranslateTooOftenDeniedForLanguage); | |
| 395 bool result = false; | |
| 396 return dict->GetBoolean(language, &result) ? result : false; | |
| 397 } | |
| 365 } | 398 } |
| 366 | 399 |
| 367 void TranslatePrefs::ResetDenialState() { | 400 void TranslatePrefs::ResetDenialState() { |
| 368 prefs_->ClearPref(kPrefTranslateLastDeniedTimeForLanguage); | 401 prefs_->ClearPref(kPrefTranslateLastDeniedTimeForLanguage); |
| 369 prefs_->ClearPref(kPrefTranslateTooOftenDeniedForLanguage); | 402 prefs_->ClearPref(kPrefTranslateTooOftenDeniedForLanguage); |
| 370 } | 403 } |
| 371 | 404 |
| 372 void TranslatePrefs::GetLanguageList( | 405 void TranslatePrefs::GetLanguageList( |
| 373 std::vector<std::string>* languages) const { | 406 std::vector<std::string>* languages) const { |
| 374 DCHECK(languages); | 407 DCHECK(languages); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 446 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 479 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 447 registry->RegisterListPref(kPrefTranslateSiteBlacklist, | 480 registry->RegisterListPref(kPrefTranslateSiteBlacklist, |
| 448 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 481 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 449 registry->RegisterDictionaryPref( | 482 registry->RegisterDictionaryPref( |
| 450 kPrefTranslateWhitelists, | 483 kPrefTranslateWhitelists, |
| 451 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 484 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 452 registry->RegisterDictionaryPref( | 485 registry->RegisterDictionaryPref( |
| 453 kPrefTranslateDeniedCount, | 486 kPrefTranslateDeniedCount, |
| 454 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 487 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 455 registry->RegisterDictionaryPref( | 488 registry->RegisterDictionaryPref( |
| 489 kPrefTranslateIgnoredCount, | |
| 490 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | |
| 491 registry->RegisterDictionaryPref( | |
| 456 kPrefTranslateAcceptedCount, | 492 kPrefTranslateAcceptedCount, |
| 457 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 493 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 458 registry->RegisterListPref(kPrefTranslateBlockedLanguages, | 494 registry->RegisterListPref(kPrefTranslateBlockedLanguages, |
| 459 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 495 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 460 registry->RegisterDictionaryPref(kPrefTranslateLastDeniedTimeForLanguage); | 496 registry->RegisterDictionaryPref(kPrefTranslateLastDeniedTimeForLanguage); |
| 461 registry->RegisterDictionaryPref( | 497 registry->RegisterDictionaryPref( |
| 462 kPrefTranslateTooOftenDeniedForLanguage, | 498 kPrefTranslateTooOftenDeniedForLanguage, |
| 463 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 499 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 464 } | 500 } |
| 465 | 501 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 510 // should be translated instead of the blacklist. The blacklist is no longer | 546 // should be translated instead of the blacklist. The blacklist is no longer |
| 511 // used after launching the settings UI. | 547 // used after launching the settings UI. |
| 512 // After that, Set 'translate_languages_not_translate' to Accept languages to | 548 // After that, Set 'translate_languages_not_translate' to Accept languages to |
| 513 // enable settings for users. | 549 // enable settings for users. |
| 514 bool merged = user_prefs->HasPrefPath(kPrefTranslateBlockedLanguages); | 550 bool merged = user_prefs->HasPrefPath(kPrefTranslateBlockedLanguages); |
| 515 | 551 |
| 516 if (!merged) { | 552 if (!merged) { |
| 517 std::vector<std::string> blacklisted_languages; | 553 std::vector<std::string> blacklisted_languages; |
| 518 GetBlacklistedLanguages(user_prefs, &blacklisted_languages); | 554 GetBlacklistedLanguages(user_prefs, &blacklisted_languages); |
| 519 | 555 |
| 520 std::vector<std::string> accept_languages = base::SplitString( | 556 std::vector<std::string> accept_languages = |
| 521 user_prefs->GetString(accept_languages_pref), ",", | 557 base::SplitString(user_prefs->GetString(accept_languages_pref), ",", |
| 522 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | 558 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
| 523 | 559 |
| 524 std::vector<std::string> blocked_languages; | 560 std::vector<std::string> blocked_languages; |
| 525 CreateBlockedLanguages( | 561 CreateBlockedLanguages(&blocked_languages, blacklisted_languages, |
| 526 &blocked_languages, blacklisted_languages, accept_languages); | 562 accept_languages); |
| 527 | 563 |
| 528 // Create the new preference kPrefTranslateBlockedLanguages. | 564 // Create the new preference kPrefTranslateBlockedLanguages. |
| 529 { | 565 { |
| 530 base::ListValue blocked_languages_list; | 566 base::ListValue blocked_languages_list; |
| 531 for (std::vector<std::string>::const_iterator it = | 567 for (std::vector<std::string>::const_iterator it = |
| 532 blocked_languages.begin(); | 568 blocked_languages.begin(); |
| 533 it != blocked_languages.end(); ++it) { | 569 it != blocked_languages.end(); ++it) { |
| 534 blocked_languages_list.Append(new base::StringValue(*it)); | 570 blocked_languages_list.Append(new base::StringValue(*it)); |
| 535 } | 571 } |
| 536 ListPrefUpdate update(user_prefs, kPrefTranslateBlockedLanguages); | 572 ListPrefUpdate update(user_prefs, kPrefTranslateBlockedLanguages); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 587 translate::ToTranslateLanguageSynonym(&lang); | 623 translate::ToTranslateLanguageSynonym(&lang); |
| 588 | 624 |
| 589 // Regarding http://crbug.com/36182, even though English exists in Accept | 625 // Regarding http://crbug.com/36182, even though English exists in Accept |
| 590 // language list, English could be translated on non-English locale. | 626 // language list, English could be translated on non-English locale. |
| 591 if (lang == "en" && !is_ui_english) | 627 if (lang == "en" && !is_ui_english) |
| 592 continue; | 628 continue; |
| 593 | 629 |
| 594 result.insert(lang); | 630 result.insert(lang); |
| 595 } | 631 } |
| 596 | 632 |
| 597 blocked_languages->insert( | 633 blocked_languages->insert(blocked_languages->begin(), result.begin(), |
| 598 blocked_languages->begin(), result.begin(), result.end()); | 634 result.end()); |
| 599 } | 635 } |
| 600 | 636 |
| 601 bool TranslatePrefs::IsValueInList(const base::ListValue* list, | 637 bool TranslatePrefs::IsValueInList(const base::ListValue* list, |
| 602 const std::string& in_value) const { | 638 const std::string& in_value) const { |
| 603 for (size_t i = 0; i < list->GetSize(); ++i) { | 639 for (size_t i = 0; i < list->GetSize(); ++i) { |
| 604 std::string value; | 640 std::string value; |
| 605 if (list->GetString(i, &value) && value == in_value) | 641 if (list->GetString(i, &value) && value == in_value) |
| 606 return true; | 642 return true; |
| 607 } | 643 } |
| 608 return false; | 644 return false; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 643 const base::ListValue* blacklist = prefs_->GetList(pref_id); | 679 const base::ListValue* blacklist = prefs_->GetList(pref_id); |
| 644 return (blacklist == NULL || blacklist->empty()); | 680 return (blacklist == NULL || blacklist->empty()); |
| 645 } | 681 } |
| 646 | 682 |
| 647 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { | 683 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { |
| 648 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id); | 684 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id); |
| 649 return (dict == NULL || dict->empty()); | 685 return (dict == NULL || dict->empty()); |
| 650 } | 686 } |
| 651 | 687 |
| 652 } // namespace translate | 688 } // namespace translate |
| OLD | NEW |