OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/translate/translate_prefs.h" | 5 #include "chrome/browser/translate/translate_prefs.h" |
6 | 6 |
7 #include "base/command_line.h" | |
8 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
9 #include "base/strings/string_split.h" | 8 #include "base/strings/string_split.h" |
10 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
11 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
12 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 11 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
13 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
14 #include "chrome/browser/translate/translate_accept_languages.h" | 13 #include "chrome/browser/translate/translate_accept_languages.h" |
15 #include "chrome/browser/translate/translate_manager.h" | 14 #include "chrome/browser/translate/translate_manager.h" |
16 #include "chrome/common/chrome_switches.h" | |
17 #include "chrome/common/pref_names.h" | 15 #include "chrome/common/pref_names.h" |
18 #include "chrome/common/translate/translate_util.h" | 16 #include "chrome/common/translate/translate_util.h" |
19 #include "components/user_prefs/pref_registry_syncable.h" | 17 #include "components/user_prefs/pref_registry_syncable.h" |
20 | 18 |
21 const char TranslatePrefs::kPrefTranslateLanguageBlacklist[] = | 19 const char TranslatePrefs::kPrefTranslateLanguageBlacklist[] = |
22 "translate_language_blacklist"; | 20 "translate_language_blacklist"; |
23 const char TranslatePrefs::kPrefTranslateSiteBlacklist[] = | 21 const char TranslatePrefs::kPrefTranslateSiteBlacklist[] = |
24 "translate_site_blacklist"; | 22 "translate_site_blacklist"; |
25 const char TranslatePrefs::kPrefTranslateWhitelists[] = | 23 const char TranslatePrefs::kPrefTranslateWhitelists[] = |
26 "translate_whitelists"; | 24 "translate_whitelists"; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 } // namespace | 71 } // namespace |
74 | 72 |
75 // TranslatePrefs: public: ----------------------------------------------------- | 73 // TranslatePrefs: public: ----------------------------------------------------- |
76 | 74 |
77 TranslatePrefs::TranslatePrefs(PrefService* user_prefs) | 75 TranslatePrefs::TranslatePrefs(PrefService* user_prefs) |
78 : prefs_(user_prefs) { | 76 : prefs_(user_prefs) { |
79 } | 77 } |
80 | 78 |
81 bool TranslatePrefs::IsBlockedLanguage( | 79 bool TranslatePrefs::IsBlockedLanguage( |
82 const std::string& original_language) const { | 80 const std::string& original_language) const { |
83 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 81 return IsValueBlacklisted(kPrefTranslateBlockedLanguages, |
84 if (command_line->HasSwitch(switches::kEnableTranslateSettings)) { | 82 original_language); |
85 return IsValueBlacklisted(kPrefTranslateBlockedLanguages, | |
86 original_language); | |
87 } else { | |
88 return IsValueBlacklisted(kPrefTranslateLanguageBlacklist, | |
89 original_language); | |
90 } | |
91 } | 83 } |
92 | 84 |
93 void TranslatePrefs::BlockLanguage( | 85 void TranslatePrefs::BlockLanguage( |
94 const std::string& original_language) { | 86 const std::string& original_language) { |
95 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 87 BlacklistValue(kPrefTranslateBlockedLanguages, original_language); |
96 if (command_line->HasSwitch(switches::kEnableTranslateSettings)) { | 88 AppendLanguageToAcceptLanguages(prefs_, original_language); |
97 BlacklistValue(kPrefTranslateBlockedLanguages, original_language); | |
98 AppendLanguageToAcceptLanguages(prefs_, original_language); | |
99 } else { | |
100 BlacklistValue(kPrefTranslateLanguageBlacklist, original_language); | |
101 } | |
102 } | 89 } |
103 | 90 |
104 void TranslatePrefs::UnblockLanguage( | 91 void TranslatePrefs::UnblockLanguage( |
105 const std::string& original_language) { | 92 const std::string& original_language) { |
106 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 93 RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages, |
107 if (command_line->HasSwitch(switches::kEnableTranslateSettings)) { | 94 original_language); |
108 RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages, | |
109 original_language); | |
110 } else { | |
111 RemoveValueFromBlacklist(kPrefTranslateLanguageBlacklist, | |
112 original_language); | |
113 } | |
114 } | 95 } |
115 | 96 |
116 void TranslatePrefs::RemoveLanguageFromLegacyBlacklist( | 97 void TranslatePrefs::RemoveLanguageFromLegacyBlacklist( |
117 const std::string& original_language) { | 98 const std::string& original_language) { |
118 RemoveValueFromBlacklist(kPrefTranslateLanguageBlacklist, | 99 RemoveValueFromBlacklist(kPrefTranslateLanguageBlacklist, |
119 original_language); | 100 original_language); |
120 } | 101 } |
121 | 102 |
122 bool TranslatePrefs::IsSiteBlacklisted(const std::string& site) const { | 103 bool TranslatePrefs::IsSiteBlacklisted(const std::string& site) const { |
123 return IsValueBlacklisted(kPrefTranslateSiteBlacklist, site); | 104 return IsValueBlacklisted(kPrefTranslateSiteBlacklist, site); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 DictionaryPrefUpdate update(prefs_, kPrefTranslateWhitelists); | 143 DictionaryPrefUpdate update(prefs_, kPrefTranslateWhitelists); |
163 DictionaryValue* dict = update.Get(); | 144 DictionaryValue* dict = update.Get(); |
164 if (!dict) { | 145 if (!dict) { |
165 NOTREACHED() << "Unregistered translate whitelist pref"; | 146 NOTREACHED() << "Unregistered translate whitelist pref"; |
166 return; | 147 return; |
167 } | 148 } |
168 dict->Remove(original_language, NULL); | 149 dict->Remove(original_language, NULL); |
169 } | 150 } |
170 | 151 |
171 bool TranslatePrefs::HasBlacklistedLanguages() const { | 152 bool TranslatePrefs::HasBlacklistedLanguages() const { |
172 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 153 return !IsListEmpty(kPrefTranslateBlockedLanguages); |
173 if (command_line->HasSwitch(switches::kEnableTranslateSettings)) | |
174 return !IsListEmpty(kPrefTranslateBlockedLanguages); | |
175 else | |
176 return !IsListEmpty(kPrefTranslateLanguageBlacklist); | |
177 } | 154 } |
178 | 155 |
179 void TranslatePrefs::ClearBlacklistedLanguages() { | 156 void TranslatePrefs::ClearBlacklistedLanguages() { |
180 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 157 prefs_->ClearPref(kPrefTranslateBlockedLanguages); |
181 if (command_line->HasSwitch(switches::kEnableTranslateSettings)) | |
182 prefs_->ClearPref(kPrefTranslateBlockedLanguages); | |
183 else | |
184 prefs_->ClearPref(kPrefTranslateLanguageBlacklist); | |
185 } | 158 } |
186 | 159 |
187 bool TranslatePrefs::HasBlacklistedSites() const { | 160 bool TranslatePrefs::HasBlacklistedSites() const { |
188 return !IsListEmpty(kPrefTranslateSiteBlacklist); | 161 return !IsListEmpty(kPrefTranslateSiteBlacklist); |
189 } | 162 } |
190 | 163 |
191 void TranslatePrefs::ClearBlacklistedSites() { | 164 void TranslatePrefs::ClearBlacklistedSites() { |
192 prefs_->ClearPref(kPrefTranslateSiteBlacklist); | 165 prefs_->ClearPref(kPrefTranslateSiteBlacklist); |
193 } | 166 } |
194 | 167 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 } | 219 } |
247 | 220 |
248 // TranslatePrefs: public, static: --------------------------------------------- | 221 // TranslatePrefs: public, static: --------------------------------------------- |
249 | 222 |
250 // static | 223 // static |
251 bool TranslatePrefs::CanTranslateLanguage(Profile* profile, | 224 bool TranslatePrefs::CanTranslateLanguage(Profile* profile, |
252 const std::string& language) { | 225 const std::string& language) { |
253 TranslatePrefs translate_prefs(profile->GetPrefs()); | 226 TranslatePrefs translate_prefs(profile->GetPrefs()); |
254 bool blocked = translate_prefs.IsBlockedLanguage(language); | 227 bool blocked = translate_prefs.IsBlockedLanguage(language); |
255 | 228 |
256 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 229 bool is_accept_language = |
257 if (command_line->HasSwitch(switches::kEnableTranslateSettings)) { | 230 TranslateManager::IsAcceptLanguage(profile, language); |
258 bool is_accept_language = | 231 bool can_be_accept_language = |
259 TranslateManager::IsAcceptLanguage(profile, language); | 232 TranslateAcceptLanguages::CanBeAcceptLanguage(language); |
260 bool can_be_accept_language = | |
261 TranslateAcceptLanguages::CanBeAcceptLanguage(language); | |
262 | 233 |
263 // Don't translate any user black-listed languages. Checking | 234 // Don't translate any user black-listed languages. Checking |
264 // |is_accept_language| is necessary because if the user eliminates the | 235 // |is_accept_language| is necessary because if the user eliminates the |
265 // language from the preference, it is natural to forget whether or not | 236 // language from the preference, it is natural to forget whether or not |
266 // the language should be translated. Checking |cannot_be_accept_language| | 237 // the language should be translated. Checking |cannot_be_accept_language| |
267 // is also necessary because some minor languages can't be selected in the | 238 // is also necessary because some minor languages can't be selected in the |
268 // language preference even though the language is available in Translate | 239 // language preference even though the language is available in Translate |
269 // server. | 240 // server. |
270 if (blocked && (is_accept_language || !can_be_accept_language)) | 241 if (blocked && (is_accept_language || !can_be_accept_language)) |
271 return false; | 242 return false; |
272 } else { | |
273 // Don't translate any user user selected language. | |
274 if (blocked) | |
275 return false; | |
276 } | |
277 | 243 |
278 return true; | 244 return true; |
279 } | 245 } |
280 | 246 |
281 // static | 247 // static |
282 bool TranslatePrefs::ShouldAutoTranslate(PrefService* user_prefs, | 248 bool TranslatePrefs::ShouldAutoTranslate(PrefService* user_prefs, |
283 const std::string& original_language, std::string* target_language) { | 249 const std::string& original_language, std::string* target_language) { |
284 TranslatePrefs prefs(user_prefs); | 250 TranslatePrefs prefs(user_prefs); |
285 return prefs.IsLanguageWhitelisted(original_language, target_language); | 251 return prefs.IsLanguageWhitelisted(original_language, target_language); |
286 } | 252 } |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 | 313 |
348 // Get the union of the blacklist and the Accept languages, and set this to | 314 // Get the union of the blacklist and the Accept languages, and set this to |
349 // the new language set 'translate_blocked_languages'. This is used for the | 315 // the new language set 'translate_blocked_languages'. This is used for the |
350 // settings UI for Translate and configration to determine which langauage | 316 // settings UI for Translate and configration to determine which langauage |
351 // should be translated instead of the blacklist. The blacklist is no longer | 317 // should be translated instead of the blacklist. The blacklist is no longer |
352 // used after launching the settings UI. | 318 // used after launching the settings UI. |
353 // After that, Set 'translate_languages_not_translate' to Accept languages to | 319 // After that, Set 'translate_languages_not_translate' to Accept languages to |
354 // enable settings for users. | 320 // enable settings for users. |
355 bool merged = user_prefs->HasPrefPath(kPrefTranslateBlockedLanguages); | 321 bool merged = user_prefs->HasPrefPath(kPrefTranslateBlockedLanguages); |
356 | 322 |
357 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 323 if (!merged) { |
358 bool enabled_translate_settings = | |
359 command_line.HasSwitch(switches::kEnableTranslateSettings); | |
360 | |
361 if (!merged && enabled_translate_settings) { | |
362 std::vector<std::string> blacklisted_languages; | 324 std::vector<std::string> blacklisted_languages; |
363 GetBlacklistedLanguages(user_prefs, &blacklisted_languages); | 325 GetBlacklistedLanguages(user_prefs, &blacklisted_languages); |
364 | 326 |
365 std::string accept_languages_str = | 327 std::string accept_languages_str = |
366 user_prefs->GetString(prefs::kAcceptLanguages); | 328 user_prefs->GetString(prefs::kAcceptLanguages); |
367 std::vector<std::string> accept_languages; | 329 std::vector<std::string> accept_languages; |
368 base::SplitString(accept_languages_str, ',', &accept_languages); | 330 base::SplitString(accept_languages_str, ',', &accept_languages); |
369 | 331 |
370 std::vector<std::string> blocked_languages; | 332 std::vector<std::string> blocked_languages; |
371 CreateBlockedLanguages(&blocked_languages, | 333 CreateBlockedLanguages(&blocked_languages, |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 | 458 |
497 bool TranslatePrefs::IsListEmpty(const char* pref_id) const { | 459 bool TranslatePrefs::IsListEmpty(const char* pref_id) const { |
498 const ListValue* blacklist = prefs_->GetList(pref_id); | 460 const ListValue* blacklist = prefs_->GetList(pref_id); |
499 return (blacklist == NULL || blacklist->empty()); | 461 return (blacklist == NULL || blacklist->empty()); |
500 } | 462 } |
501 | 463 |
502 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { | 464 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { |
503 const DictionaryValue* dict = prefs_->GetDictionary(pref_id); | 465 const DictionaryValue* dict = prefs_->GetDictionary(pref_id); |
504 return (dict == NULL || dict->empty()); | 466 return (dict == NULL || dict->empty()); |
505 } | 467 } |
OLD | NEW |