ProjectingObserverChromeos: Drop DBusThreadManager dependency for better testing.
[chromium-blink-merge.git] / components / translate / core / browser / translate_prefs.h
blobc1b89c515c7aea82e8243fd06782b6b34181ece8
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_
8 #include <string>
9 #include <vector>
11 #include "base/gtest_prod_util.h"
12 #include "url/gurl.h"
14 class PrefService;
15 class Profile;
17 namespace base {
18 class DictionaryValue;
19 class ListValue;
22 namespace user_prefs {
23 class PrefRegistrySyncable;
26 namespace translate {
28 class TranslateAcceptLanguages;
30 // The wrapper of PrefService object for Translate.
32 // It is assumed that |prefs_| is alive while this instance is alive.
33 class TranslatePrefs {
34 public:
35 static const char kPrefTranslateLanguageBlacklist[];
36 static const char kPrefTranslateSiteBlacklist[];
37 static const char kPrefTranslateWhitelists[];
38 static const char kPrefTranslateDeniedCount[];
39 static const char kPrefTranslateAcceptedCount[];
40 static const char kPrefTranslateBlockedLanguages[];
41 static const char kPrefTranslateLastDeniedTime[];
42 static const char kPrefTranslateTooOftenDenied[];
44 // |preferred_languages_pref| is only used on Chrome OS, other platforms must
45 // pass NULL.
46 TranslatePrefs(PrefService* user_prefs,
47 const char* accept_languages_pref,
48 const char* preferred_languages_pref);
50 // Resets the blocked languages list, the sites blacklist, the languages
51 // whitelist, and the accepted/denied counts.
52 void ResetToDefaults();
54 bool IsBlockedLanguage(const std::string& original_language) const;
55 void BlockLanguage(const std::string& original_language);
56 void UnblockLanguage(const std::string& original_language);
58 // Removes a language from the old blacklist. Only used internally for
59 // diagnostics. Don't use this if there is no special reason.
60 void RemoveLanguageFromLegacyBlacklist(const std::string& original_language);
62 bool IsSiteBlacklisted(const std::string& site) const;
63 void BlacklistSite(const std::string& site);
64 void RemoveSiteFromBlacklist(const std::string& site);
66 bool HasWhitelistedLanguagePairs() const;
68 bool IsLanguagePairWhitelisted(const std::string& original_language,
69 const std::string& target_language);
70 void WhitelistLanguagePair(const std::string& original_language,
71 const std::string& target_language);
72 void RemoveLanguagePairFromWhitelist(const std::string& original_language,
73 const std::string& target_language);
75 // Will return true if at least one language has been blacklisted.
76 bool HasBlockedLanguages() const;
78 // Will return true if at least one site has been blacklisted.
79 bool HasBlacklistedSites() const;
81 // These methods are used to track how many times the user has denied the
82 // translation for a specific language. (So we can present a UI to black-list
83 // that language if the user keeps denying translations).
84 int GetTranslationDeniedCount(const std::string& language) const;
85 void IncrementTranslationDeniedCount(const std::string& language);
86 void ResetTranslationDeniedCount(const std::string& language);
88 // These methods are used to track how many times the user has accepted the
89 // translation for a specific language. (So we can present a UI to white-list
90 // that language if the user keeps accepting translations).
91 int GetTranslationAcceptedCount(const std::string& language);
92 void IncrementTranslationAcceptedCount(const std::string& language);
93 void ResetTranslationAcceptedCount(const std::string& language);
95 // Update the last time on closing the Translate UI without translation.
96 void UpdateLastDeniedTime();
98 // Returns true if translation is denied too often.
99 bool IsTooOftenDenied() const;
101 // Resets the prefs of denial state. Only used internally for diagnostics.
102 void ResetDenialState();
104 // Gets the language list of the language settings.
105 void GetLanguageList(std::vector<std::string>* languages);
107 // Updates the language list of the language settings.
108 void UpdateLanguageList(const std::vector<std::string>& languages);
110 bool CanTranslateLanguage(TranslateAcceptLanguages* accept_languages,
111 const std::string& language);
112 bool ShouldAutoTranslate(const std::string& original_language,
113 std::string* target_language);
114 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
115 static void MigrateUserPrefs(PrefService* user_prefs,
116 const char* accept_languages_pref);
118 // Converts the language code for Translate. This removes the sub code (like
119 // -US) except for Chinese, and converts the synonyms.
120 // The same logic exists at language_options.js, and please keep consistency
121 // with the JavaScript file.
122 static std::string ConvertLangCodeForTranslation(const std::string& lang);
124 private:
125 friend class TranslatePrefsTest;
126 FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest, CreateBlockedLanguages);
127 FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest,
128 CreateBlockedLanguagesNonEnglishUI);
130 // Merges two language sets to migrate to the language setting UI.
131 static void CreateBlockedLanguages(
132 std::vector<std::string>* blocked_languages,
133 const std::vector<std::string>& blacklisted_languages,
134 const std::vector<std::string>& accept_languages);
136 void ClearBlockedLanguages();
137 void ClearBlacklistedSites();
138 void ClearWhitelistedLanguagePairs();
139 bool IsValueBlacklisted(const char* pref_id, const std::string& value) const;
140 void BlacklistValue(const char* pref_id, const std::string& value);
141 void RemoveValueFromBlacklist(const char* pref_id, const std::string& value);
142 bool IsValueInList(const base::ListValue* list,
143 const std::string& value) const;
144 bool IsListEmpty(const char* pref_id) const;
145 bool IsDictionaryEmpty(const char* pref_id) const;
147 // Path to the preference storing the accept languages.
148 const std::string accept_languages_pref_;
149 #if defined(OS_CHROMEOS)
150 // Path to the preference storing the preferred languages.
151 // Only used on ChromeOS.
152 std::string preferred_languages_pref_;
153 #endif
155 // Retrieves the dictionary mapping the number of times translation has been
156 // denied for a language, creating it if necessary.
157 base::DictionaryValue* GetTranslationDeniedCountDictionary();
159 // Retrieves the dictionary mapping the number of times translation has been
160 // accepted for a language, creating it if necessary.
161 base::DictionaryValue* GetTranslationAcceptedCountDictionary() const;
163 PrefService* prefs_; // Weak.
165 DISALLOW_COPY_AND_ASSIGN(TranslatePrefs);
168 } // namespace translate
170 #endif // COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_PREFS_H_