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[] = |
| 26 "translate_whitelists"; | 26 "translate_whitelists"; |
| 27 const char TranslatePrefs::kPrefTranslateDeniedCount[] = | 27 const char TranslatePrefs::kPrefTranslateDeniedCount[] = |
| 28 "translate_denied_count_for_language"; | 28 "translate_denied_count_for_language"; |
| 29 const char TranslatePrefs::kPrefTranslateIgnoredCount[] = | |
| 30 "translate_ignored_count_for_language"; | |
| 29 const char TranslatePrefs::kPrefTranslateAcceptedCount[] = | 31 const char TranslatePrefs::kPrefTranslateAcceptedCount[] = |
| 30 "translate_accepted_count"; | 32 "translate_accepted_count"; |
| 31 const char TranslatePrefs::kPrefTranslateBlockedLanguages[] = | 33 const char TranslatePrefs::kPrefTranslateBlockedLanguages[] = |
| 32 "translate_blocked_languages"; | 34 "translate_blocked_languages"; |
| 33 const char TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage[] = | 35 const char TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage[] = |
| 34 "translate_last_denied_time_for_language"; | 36 "translate_last_denied_time_for_language"; |
| 35 const char TranslatePrefs::kPrefTranslateTooOftenDeniedForLanguage[] = | 37 const char TranslatePrefs::kPrefTranslateTooOftenDeniedForLanguage[] = |
| 36 "translate_too_often_denied_for_language"; | 38 "translate_too_often_denied_for_language"; |
| 37 | 39 |
| 38 // This property is deprecated but there is still some usages. Don't use this | 40 // This property is deprecated but there is still some usages. Don't use this |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 89 const std::string& main_part = tokens[0]; | 91 const std::string& main_part = tokens[0]; |
| 90 if (seen.find(main_part) == seen.end()) { | 92 if (seen.find(main_part) == seen.end()) { |
| 91 expanded_languages->push_back(main_part); | 93 expanded_languages->push_back(main_part); |
| 92 seen.insert(main_part); | 94 seen.insert(main_part); |
| 93 } | 95 } |
| 94 } | 96 } |
| 95 } | 97 } |
| 96 | 98 |
| 97 } // namespace | 99 } // namespace |
| 98 | 100 |
| 101 const base::Feature kTranslateUI2016Q2{ | |
| 102 "TranslateUI2016Q2", base::FEATURE_DISABLED_BY_DEFAULT}; | |
| 103 | |
|
msw
2016/04/29 20:00:02
nit remove extra blank line
ftang
2016/04/29 22:37:02
Done.
| |
| 104 | |
| 99 DenialTimeUpdate::DenialTimeUpdate(PrefService* prefs, | 105 DenialTimeUpdate::DenialTimeUpdate(PrefService* prefs, |
| 100 const std::string& language, | 106 const std::string& language, |
| 101 size_t max_denial_count) | 107 size_t max_denial_count) |
| 102 : denial_time_dict_update_( | 108 : denial_time_dict_update_( |
| 103 prefs, | 109 prefs, |
| 104 TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage), | 110 TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage), |
| 105 language_(language), | 111 language_(language), |
| 106 max_denial_count_(max_denial_count), | 112 max_denial_count_(max_denial_count), |
| 107 time_list_(nullptr) {} | 113 time_list_(nullptr) {} |
| 108 | 114 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 175 ClearBlacklistedSites(); | 181 ClearBlacklistedSites(); |
| 176 ClearWhitelistedLanguagePairs(); | 182 ClearWhitelistedLanguagePairs(); |
| 177 | 183 |
| 178 std::vector<std::string> languages; | 184 std::vector<std::string> languages; |
| 179 GetLanguageList(&languages); | 185 GetLanguageList(&languages); |
| 180 for (std::vector<std::string>::const_iterator it = languages.begin(); | 186 for (std::vector<std::string>::const_iterator it = languages.begin(); |
| 181 it != languages.end(); ++it) { | 187 it != languages.end(); ++it) { |
| 182 const std::string& language = *it; | 188 const std::string& language = *it; |
| 183 ResetTranslationAcceptedCount(language); | 189 ResetTranslationAcceptedCount(language); |
| 184 ResetTranslationDeniedCount(language); | 190 ResetTranslationDeniedCount(language); |
| 191 ResetTranslationIgnoredCount(language); | |
| 185 } | 192 } |
| 186 | 193 |
| 187 prefs_->ClearPref(kPrefTranslateLastDeniedTimeForLanguage); | 194 prefs_->ClearPref(kPrefTranslateLastDeniedTimeForLanguage); |
| 188 prefs_->ClearPref(kPrefTranslateTooOftenDeniedForLanguage); | 195 prefs_->ClearPref(kPrefTranslateTooOftenDeniedForLanguage); |
| 189 } | 196 } |
| 190 | 197 |
| 191 bool TranslatePrefs::IsBlockedLanguage( | 198 bool TranslatePrefs::IsBlockedLanguage( |
| 192 const std::string& original_language) const { | 199 const std::string& original_language) const { |
| 193 return IsValueBlacklisted(kPrefTranslateBlockedLanguages, | 200 return IsValueBlacklisted(kPrefTranslateBlockedLanguages, |
| 194 original_language); | 201 original_language); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 309 int count = 0; | 316 int count = 0; |
| 310 dict->GetInteger(language, &count); | 317 dict->GetInteger(language, &count); |
| 311 dict->SetInteger(language, count + 1); | 318 dict->SetInteger(language, count + 1); |
| 312 } | 319 } |
| 313 | 320 |
| 314 void TranslatePrefs::ResetTranslationDeniedCount(const std::string& language) { | 321 void TranslatePrefs::ResetTranslationDeniedCount(const std::string& language) { |
| 315 DictionaryPrefUpdate update(prefs_, kPrefTranslateDeniedCount); | 322 DictionaryPrefUpdate update(prefs_, kPrefTranslateDeniedCount); |
| 316 update.Get()->SetInteger(language, 0); | 323 update.Get()->SetInteger(language, 0); |
| 317 } | 324 } |
| 318 | 325 |
| 326 int TranslatePrefs::GetTranslationIgnoredCount( | |
| 327 const std::string& language) const { | |
| 328 const base::DictionaryValue* dict = | |
| 329 prefs_->GetDictionary(kPrefTranslateIgnoredCount); | |
| 330 int count = 0; | |
| 331 return dict->GetInteger(language, &count) ? count : 0; | |
| 332 } | |
| 333 | |
| 334 void TranslatePrefs::IncrementTranslationIgnoredCount( | |
| 335 const std::string& language) { | |
| 336 DictionaryPrefUpdate update(prefs_, kPrefTranslateIgnoredCount); | |
| 337 base::DictionaryValue* dict = update.Get(); | |
| 338 | |
| 339 int count = 0; | |
| 340 dict->GetInteger(language, &count); | |
| 341 dict->SetInteger(language, count + 1); | |
| 342 } | |
| 343 | |
| 344 void TranslatePrefs::ResetTranslationIgnoredCount(const std::string& language) { | |
| 345 DictionaryPrefUpdate update(prefs_, kPrefTranslateIgnoredCount); | |
| 346 update.Get()->SetInteger(language, 0); | |
|
msw
2016/04/29 20:00:02
Perhaps you can actually clear the pref value here
ftang
2016/04/29 22:37:02
Acknowledged.
| |
| 347 } | |
| 348 | |
| 319 int TranslatePrefs::GetTranslationAcceptedCount(const std::string& language) { | 349 int TranslatePrefs::GetTranslationAcceptedCount(const std::string& language) { |
| 320 const base::DictionaryValue* dict = | 350 const base::DictionaryValue* dict = |
| 321 prefs_->GetDictionary(kPrefTranslateAcceptedCount); | 351 prefs_->GetDictionary(kPrefTranslateAcceptedCount); |
| 322 int count = 0; | 352 int count = 0; |
| 323 return dict->GetInteger(language, &count) ? count : 0; | 353 return dict->GetInteger(language, &count) ? count : 0; |
| 324 } | 354 } |
| 325 | 355 |
| 326 void TranslatePrefs::IncrementTranslationAcceptedCount( | 356 void TranslatePrefs::IncrementTranslationAcceptedCount( |
| 327 const std::string& language) { | 357 const std::string& language) { |
| 328 DictionaryPrefUpdate update(prefs_, kPrefTranslateAcceptedCount); | 358 DictionaryPrefUpdate update(prefs_, kPrefTranslateAcceptedCount); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 351 return; | 381 return; |
| 352 | 382 |
| 353 if (now - oldest_denial_time <= base::TimeDelta::FromDays(1)) { | 383 if (now - oldest_denial_time <= base::TimeDelta::FromDays(1)) { |
| 354 DictionaryPrefUpdate update(prefs_, | 384 DictionaryPrefUpdate update(prefs_, |
| 355 kPrefTranslateTooOftenDeniedForLanguage); | 385 kPrefTranslateTooOftenDeniedForLanguage); |
| 356 update.Get()->SetBoolean(language, true); | 386 update.Get()->SetBoolean(language, true); |
| 357 } | 387 } |
| 358 } | 388 } |
| 359 | 389 |
| 360 bool TranslatePrefs::IsTooOftenDenied(const std::string& language) const { | 390 bool TranslatePrefs::IsTooOftenDenied(const std::string& language) const { |
| 361 const base::DictionaryValue* dict = | 391 if (base::FeatureList::IsEnabled(kTranslateUI2016Q2)) { |
| 362 prefs_->GetDictionary(kPrefTranslateTooOftenDeniedForLanguage); | 392 // In the new logic, we only hide the Bubble if user denied for more than |
|
msw
2016/04/29 20:00:02
nit: no caps for 'bubble'; 'if the user denied it
ftang
2016/04/29 22:37:02
Done.
| |
| 363 bool result = false; | 393 // 3 times or user ignored more than 10 times. |
| 364 return dict->GetBoolean(language, &result) ? result : false; | 394 return (GetTranslationDeniedCount(language) > 3) || |
|
msw
2016/04/29 20:00:02
Should this ever propagate to kPrefTranslateTooOft
ftang
2016/04/29 22:37:02
No
msw
2016/04/29 23:43:39
I'm not really sure how this is supposed to work,
| |
| 395 (GetTranslationIgnoredCount(language) > 10); | |
| 396 } else { | |
| 397 const base::DictionaryValue* dict = | |
| 398 prefs_->GetDictionary(kPrefTranslateTooOftenDeniedForLanguage); | |
| 399 bool result = false; | |
| 400 return dict->GetBoolean(language, &result) ? result : false; | |
| 401 } | |
| 365 } | 402 } |
| 366 | 403 |
| 367 void TranslatePrefs::ResetDenialState() { | 404 void TranslatePrefs::ResetDenialState() { |
|
msw
2016/04/29 20:00:02
Shouldn't this also have some effect on the new UI
ftang
2016/04/29 22:37:02
no
msw
2016/04/29 23:43:39
Ditto, I don't know understand why 'reset denial s
| |
| 368 prefs_->ClearPref(kPrefTranslateLastDeniedTimeForLanguage); | 405 prefs_->ClearPref(kPrefTranslateLastDeniedTimeForLanguage); |
| 369 prefs_->ClearPref(kPrefTranslateTooOftenDeniedForLanguage); | 406 prefs_->ClearPref(kPrefTranslateTooOftenDeniedForLanguage); |
| 370 } | 407 } |
| 371 | 408 |
| 372 void TranslatePrefs::GetLanguageList( | 409 void TranslatePrefs::GetLanguageList( |
| 373 std::vector<std::string>* languages) const { | 410 std::vector<std::string>* languages) const { |
| 374 DCHECK(languages); | 411 DCHECK(languages); |
| 375 DCHECK(languages->empty()); | 412 DCHECK(languages->empty()); |
| 376 | 413 |
| 377 #if defined(OS_CHROMEOS) | 414 #if defined(OS_CHROMEOS) |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 446 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 483 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 447 registry->RegisterListPref(kPrefTranslateSiteBlacklist, | 484 registry->RegisterListPref(kPrefTranslateSiteBlacklist, |
| 448 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 485 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 449 registry->RegisterDictionaryPref( | 486 registry->RegisterDictionaryPref( |
| 450 kPrefTranslateWhitelists, | 487 kPrefTranslateWhitelists, |
| 451 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 488 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 452 registry->RegisterDictionaryPref( | 489 registry->RegisterDictionaryPref( |
| 453 kPrefTranslateDeniedCount, | 490 kPrefTranslateDeniedCount, |
| 454 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 491 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 455 registry->RegisterDictionaryPref( | 492 registry->RegisterDictionaryPref( |
| 493 kPrefTranslateIgnoredCount, | |
| 494 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | |
| 495 registry->RegisterDictionaryPref( | |
| 456 kPrefTranslateAcceptedCount, | 496 kPrefTranslateAcceptedCount, |
| 457 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 497 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 458 registry->RegisterListPref(kPrefTranslateBlockedLanguages, | 498 registry->RegisterListPref(kPrefTranslateBlockedLanguages, |
| 459 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 499 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 460 registry->RegisterDictionaryPref(kPrefTranslateLastDeniedTimeForLanguage); | 500 registry->RegisterDictionaryPref(kPrefTranslateLastDeniedTimeForLanguage); |
| 461 registry->RegisterDictionaryPref( | 501 registry->RegisterDictionaryPref( |
| 462 kPrefTranslateTooOftenDeniedForLanguage, | 502 kPrefTranslateTooOftenDeniedForLanguage, |
| 463 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 503 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 464 } | 504 } |
| 465 | 505 |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 643 const base::ListValue* blacklist = prefs_->GetList(pref_id); | 683 const base::ListValue* blacklist = prefs_->GetList(pref_id); |
| 644 return (blacklist == NULL || blacklist->empty()); | 684 return (blacklist == NULL || blacklist->empty()); |
| 645 } | 685 } |
| 646 | 686 |
| 647 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { | 687 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { |
| 648 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id); | 688 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id); |
| 649 return (dict == NULL || dict->empty()); | 689 return (dict == NULL || dict->empty()); |
| 650 } | 690 } |
| 651 | 691 |
| 652 } // namespace translate | 692 } // namespace translate |
| OLD | NEW |