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
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_PREFS_H_
6 #define COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_PREFS_H_
11 #include "base/gtest_prod_util.h"
16 class TranslateAcceptLanguages;
19 class DictionaryValue;
23 namespace user_prefs {
24 class PrefRegistrySyncable;
27 // The wrapper of PrefService object for Translate.
29 // It is assumed that |prefs_| is alive while this instance is alive.
30 class TranslatePrefs {
32 static const char kPrefTranslateLanguageBlacklist[];
33 static const char kPrefTranslateSiteBlacklist[];
34 static const char kPrefTranslateWhitelists[];
35 static const char kPrefTranslateDeniedCount[];
36 static const char kPrefTranslateAcceptedCount[];
37 static const char kPrefTranslateBlockedLanguages[];
39 // |preferred_languages_pref| is only used on Chrome OS, other platforms must
41 TranslatePrefs(PrefService* user_prefs,
42 const char* accept_languages_pref,
43 const char* preferred_languages_pref);
45 // Resets the blocked languages list, the sites blacklist, the languages
46 // whitelist, and the accepted/denied counts.
47 void ResetToDefaults();
49 bool IsBlockedLanguage(const std::string& original_language) const;
50 void BlockLanguage(const std::string& original_language);
51 void UnblockLanguage(const std::string& original_language);
53 // Removes a language from the old blacklist. Only used internally for
54 // diagnostics. Don't use this if there is no special reason.
55 void RemoveLanguageFromLegacyBlacklist(const std::string& original_language);
57 bool IsSiteBlacklisted(const std::string& site) const;
58 void BlacklistSite(const std::string& site);
59 void RemoveSiteFromBlacklist(const std::string& site);
61 bool HasWhitelistedLanguagePairs() const;
63 bool IsLanguagePairWhitelisted(const std::string& original_language,
64 const std::string& target_language);
65 void WhitelistLanguagePair(const std::string& original_language,
66 const std::string& target_language);
67 void RemoveLanguagePairFromWhitelist(const std::string& original_language,
68 const std::string& target_language);
70 // Will return true if at least one language has been blacklisted.
71 bool HasBlockedLanguages() const;
73 // Will return true if at least one site has been blacklisted.
74 bool HasBlacklistedSites() const;
76 // These methods are used to track how many times the user has denied the
77 // translation for a specific language. (So we can present a UI to black-list
78 // that language if the user keeps denying translations).
79 int GetTranslationDeniedCount(const std::string& language) const;
80 void IncrementTranslationDeniedCount(const std::string& language);
81 void ResetTranslationDeniedCount(const std::string& language);
83 // These methods are used to track how many times the user has accepted the
84 // translation for a specific language. (So we can present a UI to white-list
85 // that language if the user keeps accepting translations).
86 int GetTranslationAcceptedCount(const std::string& language);
87 void IncrementTranslationAcceptedCount(const std::string& language);
88 void ResetTranslationAcceptedCount(const std::string& language);
90 // Gets the language list of the language settings.
91 void GetLanguageList(std::vector<std::string>* languages);
93 // Updates the language list of the language settings.
94 void UpdateLanguageList(const std::vector<std::string>& languages);
96 bool CanTranslateLanguage(TranslateAcceptLanguages* accept_languages,
97 const std::string& language);
98 bool ShouldAutoTranslate(const std::string& original_language,
99 std::string* target_language);
100 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
101 static void MigrateUserPrefs(PrefService* user_prefs,
102 const char* accept_languages_pref);
104 // Converts the language code for Translate. This removes the sub code (like
105 // -US) except for Chinese, and converts the synonyms.
106 // The same logic exists at language_options.js, and please keep consistency
107 // with the JavaScript file.
108 static std::string ConvertLangCodeForTranslation(const std::string& lang);
111 friend class TranslatePrefsTest;
112 FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest, CreateBlockedLanguages);
113 FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest,
114 CreateBlockedLanguagesNonEnglishUI);
116 // Merges two language sets to migrate to the language setting UI.
117 static void CreateBlockedLanguages(
118 std::vector<std::string>* blocked_languages,
119 const std::vector<std::string>& blacklisted_languages,
120 const std::vector<std::string>& accept_languages);
122 void ClearBlockedLanguages();
123 void ClearBlacklistedSites();
124 void ClearWhitelistedLanguagePairs();
125 bool IsValueBlacklisted(const char* pref_id, const std::string& value) const;
126 void BlacklistValue(const char* pref_id, const std::string& value);
127 void RemoveValueFromBlacklist(const char* pref_id, const std::string& value);
128 bool IsValueInList(const base::ListValue* list,
129 const std::string& value) const;
130 bool IsListEmpty(const char* pref_id) const;
131 bool IsDictionaryEmpty(const char* pref_id) const;
133 // Path to the preference storing the accept languages.
134 const std::string accept_languages_pref_;
135 #if defined(OS_CHROMEOS)
136 // Path to the preference storing the preferred languages.
137 // Only used on ChromeOS.
138 std::string preferred_languages_pref_;
141 // Retrieves the dictionary mapping the number of times translation has been
142 // denied for a language, creating it if necessary.
143 base::DictionaryValue* GetTranslationDeniedCountDictionary();
145 // Retrieves the dictionary mapping the number of times translation has been
146 // accepted for a language, creating it if necessary.
147 base::DictionaryValue* GetTranslationAcceptedCountDictionary() const;
149 PrefService* prefs_; // Weak.
151 DISALLOW_COPY_AND_ASSIGN(TranslatePrefs);
154 #endif // COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_PREFS_H_