| 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/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
| 10 #include "base/prefs/scoped_user_pref_update.h" | 10 #include "base/prefs/scoped_user_pref_update.h" |
| 11 #include "base/strings/string_split.h" | 11 #include "base/strings/string_split.h" |
| 12 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
| 13 #include "components/pref_registry/pref_registry_syncable.h" | 13 #include "components/pref_registry/pref_registry_syncable.h" |
| 14 #include "components/translate/core/browser/translate_accept_languages.h" | 14 #include "components/translate/core/browser/translate_accept_languages.h" |
| 15 #include "components/translate/core/browser/translate_download_manager.h" | 15 #include "components/translate/core/browser/translate_download_manager.h" |
| 16 #include "components/translate/core/common/translate_util.h" | 16 #include "components/translate/core/common/translate_util.h" |
| 17 | 17 |
| 18 const char TranslatePrefs::kPrefTranslateLanguageBlacklist[] = | 18 const char TranslatePrefs::kPrefTranslateLanguageBlacklist[] = |
| 19 "translate_language_blacklist"; | 19 "translate_language_blacklist"; |
| 20 const char TranslatePrefs::kPrefTranslateSiteBlacklist[] = | 20 const char TranslatePrefs::kPrefTranslateSiteBlacklist[] = |
| 21 "translate_site_blacklist"; | 21 "translate_site_blacklist"; |
| 22 const char TranslatePrefs::kPrefTranslateWhitelists[] = | 22 const char TranslatePrefs::kPrefTranslateWhitelists[] = |
| 23 "translate_whitelists"; | 23 "translate_whitelists"; |
| 24 const char TranslatePrefs::kPrefTranslateDeniedCount[] = | 24 const char TranslatePrefs::kPrefTranslateDeniedCount[] = |
| 25 "translate_denied_count"; | 25 "translate_denied_count"; |
| 26 const char TranslatePrefs::kPrefTranslateAcceptedCount[] = | 26 const char TranslatePrefs::kPrefTranslateAcceptedCount[] = |
| 27 "translate_accepted_count"; | 27 "translate_accepted_count"; |
| 28 const char TranslatePrefs::kPrefTranslateBlockedLanguages[] = | 28 const char TranslatePrefs::kPrefTranslateBlockedLanguages[] = |
| 29 "translate_blocked_languages"; | 29 "translate_blocked_languages"; |
| 30 const char TranslatePrefs::kPrefTranslateLastDeniedTime[] = |
| 31 "translate_last_denied_time"; |
| 32 const char TranslatePrefs::kPrefTranslateTooOftenDenied[] = |
| 33 "translate_too_often_denied"; |
| 30 | 34 |
| 31 namespace { | 35 namespace { |
| 32 | 36 |
| 33 void GetBlacklistedLanguages(const PrefService* prefs, | 37 void GetBlacklistedLanguages(const PrefService* prefs, |
| 34 std::vector<std::string>* languages) { | 38 std::vector<std::string>* languages) { |
| 35 DCHECK(languages); | 39 DCHECK(languages); |
| 36 DCHECK(languages->empty()); | 40 DCHECK(languages->empty()); |
| 37 | 41 |
| 38 const char* key = TranslatePrefs::kPrefTranslateLanguageBlacklist; | 42 const char* key = TranslatePrefs::kPrefTranslateLanguageBlacklist; |
| 39 const base::ListValue* list = prefs->GetList(key); | 43 const base::ListValue* list = prefs->GetList(key); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 ClearWhitelistedLanguagePairs(); | 100 ClearWhitelistedLanguagePairs(); |
| 97 | 101 |
| 98 std::vector<std::string> languages; | 102 std::vector<std::string> languages; |
| 99 GetLanguageList(&languages); | 103 GetLanguageList(&languages); |
| 100 for (std::vector<std::string>::const_iterator it = languages.begin(); | 104 for (std::vector<std::string>::const_iterator it = languages.begin(); |
| 101 it != languages.end(); ++it) { | 105 it != languages.end(); ++it) { |
| 102 const std::string& language = *it; | 106 const std::string& language = *it; |
| 103 ResetTranslationAcceptedCount(language); | 107 ResetTranslationAcceptedCount(language); |
| 104 ResetTranslationDeniedCount(language); | 108 ResetTranslationDeniedCount(language); |
| 105 } | 109 } |
| 110 |
| 111 prefs_->ClearPref(kPrefTranslateLastDeniedTime); |
| 112 prefs_->ClearPref(kPrefTranslateTooOftenDenied); |
| 106 } | 113 } |
| 107 | 114 |
| 108 bool TranslatePrefs::IsBlockedLanguage( | 115 bool TranslatePrefs::IsBlockedLanguage( |
| 109 const std::string& original_language) const { | 116 const std::string& original_language) const { |
| 110 return IsValueBlacklisted(kPrefTranslateBlockedLanguages, | 117 return IsValueBlacklisted(kPrefTranslateBlockedLanguages, |
| 111 original_language); | 118 original_language); |
| 112 } | 119 } |
| 113 | 120 |
| 114 void TranslatePrefs::BlockLanguage(const std::string& original_language) { | 121 void TranslatePrefs::BlockLanguage(const std::string& original_language) { |
| 115 BlacklistValue(kPrefTranslateBlockedLanguages, original_language); | 122 BlacklistValue(kPrefTranslateBlockedLanguages, original_language); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 dict->GetInteger(language, &count); | 255 dict->GetInteger(language, &count); |
| 249 dict->SetInteger(language, count + 1); | 256 dict->SetInteger(language, count + 1); |
| 250 } | 257 } |
| 251 | 258 |
| 252 void TranslatePrefs::ResetTranslationAcceptedCount( | 259 void TranslatePrefs::ResetTranslationAcceptedCount( |
| 253 const std::string& language) { | 260 const std::string& language) { |
| 254 DictionaryPrefUpdate update(prefs_, kPrefTranslateAcceptedCount); | 261 DictionaryPrefUpdate update(prefs_, kPrefTranslateAcceptedCount); |
| 255 update.Get()->SetInteger(language, 0); | 262 update.Get()->SetInteger(language, 0); |
| 256 } | 263 } |
| 257 | 264 |
| 265 void TranslatePrefs::UpdateLastDeniedTime() { |
| 266 if (IsTooOftenDenied()) |
| 267 return; |
| 268 |
| 269 double time = prefs_->GetDouble(kPrefTranslateLastDeniedTime); |
| 270 base::Time last_closed_time = base::Time::FromJsTime(time); |
| 271 base::Time now = base::Time::Now(); |
| 272 prefs_->SetDouble(kPrefTranslateLastDeniedTime, now.ToJsTime()); |
| 273 if (now - last_closed_time <= base::TimeDelta::FromDays(1)) |
| 274 prefs_->SetBoolean(kPrefTranslateTooOftenDenied, true); |
| 275 } |
| 276 |
| 277 bool TranslatePrefs::IsTooOftenDenied() const { |
| 278 return prefs_->GetBoolean(kPrefTranslateTooOftenDenied); |
| 279 } |
| 280 |
| 258 void TranslatePrefs::GetLanguageList(std::vector<std::string>* languages) { | 281 void TranslatePrefs::GetLanguageList(std::vector<std::string>* languages) { |
| 259 DCHECK(languages); | 282 DCHECK(languages); |
| 260 DCHECK(languages->empty()); | 283 DCHECK(languages->empty()); |
| 261 | 284 |
| 262 #if defined(OS_CHROMEOS) | 285 #if defined(OS_CHROMEOS) |
| 263 const char* key = preferred_languages_pref_.c_str(); | 286 const char* key = preferred_languages_pref_.c_str(); |
| 264 #else | 287 #else |
| 265 const char* key = accept_languages_pref_.c_str(); | 288 const char* key = accept_languages_pref_.c_str(); |
| 266 #endif | 289 #endif |
| 267 | 290 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 kPrefTranslateWhitelists, | 351 kPrefTranslateWhitelists, |
| 329 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 352 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 330 registry->RegisterDictionaryPref( | 353 registry->RegisterDictionaryPref( |
| 331 kPrefTranslateDeniedCount, | 354 kPrefTranslateDeniedCount, |
| 332 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 355 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 333 registry->RegisterDictionaryPref( | 356 registry->RegisterDictionaryPref( |
| 334 kPrefTranslateAcceptedCount, | 357 kPrefTranslateAcceptedCount, |
| 335 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 358 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 336 registry->RegisterListPref(kPrefTranslateBlockedLanguages, | 359 registry->RegisterListPref(kPrefTranslateBlockedLanguages, |
| 337 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 360 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 361 registry->RegisterDoublePref( |
| 362 kPrefTranslateLastDeniedTime, 0, |
| 363 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
| 364 registry->RegisterBooleanPref( |
| 365 kPrefTranslateTooOftenDenied, false, |
| 366 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 338 } | 367 } |
| 339 | 368 |
| 340 // static | 369 // static |
| 341 void TranslatePrefs::MigrateUserPrefs(PrefService* user_prefs, | 370 void TranslatePrefs::MigrateUserPrefs(PrefService* user_prefs, |
| 342 const char* accept_languages_pref) { | 371 const char* accept_languages_pref) { |
| 343 // Old format of kPrefTranslateWhitelists | 372 // Old format of kPrefTranslateWhitelists |
| 344 // - original language -> list of target langs to auto-translate | 373 // - original language -> list of target langs to auto-translate |
| 345 // - list of langs is in order of being enabled i.e. last in list is the | 374 // - list of langs is in order of being enabled i.e. last in list is the |
| 346 // most recent language that user enabled via | 375 // most recent language that user enabled via |
| 347 // Always translate |source_lang| to |target_lang|" | 376 // Always translate |source_lang| to |target_lang|" |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 | 560 |
| 532 bool TranslatePrefs::IsListEmpty(const char* pref_id) const { | 561 bool TranslatePrefs::IsListEmpty(const char* pref_id) const { |
| 533 const base::ListValue* blacklist = prefs_->GetList(pref_id); | 562 const base::ListValue* blacklist = prefs_->GetList(pref_id); |
| 534 return (blacklist == NULL || blacklist->empty()); | 563 return (blacklist == NULL || blacklist->empty()); |
| 535 } | 564 } |
| 536 | 565 |
| 537 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { | 566 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { |
| 538 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id); | 567 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id); |
| 539 return (dict == NULL || dict->empty()); | 568 return (dict == NULL || dict->empty()); |
| 540 } | 569 } |
| OLD | NEW |