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

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

Issue 1923143003: Implement the 2016Q2 Translate UI designe spec out in (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix namespace in .h and other minor review comments 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"
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698