Home | History | Annotate | Download | only in translate
      1 // Copyright (c) 2010 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.
      4 
      5 #ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_PREFS_H_
      6 #define CHROME_BROWSER_TRANSLATE_TRANSLATE_PREFS_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/gtest_prod_util.h"
     12 #include "url/gurl.h"
     13 
     14 class PrefService;
     15 class Profile;
     16 
     17 namespace base {
     18 class DictionaryValue;
     19 class ListValue;
     20 }
     21 
     22 namespace user_prefs {
     23 class PrefRegistrySyncable;
     24 }
     25 
     26 // The wrapper of PrefService object for Translate.
     27 //
     28 // It is assumed that |prefs_| is alive while this instance is alive.
     29 class TranslatePrefs {
     30  public:
     31   static const char kPrefTranslateLanguageBlacklist[];
     32   static const char kPrefTranslateSiteBlacklist[];
     33   static const char kPrefTranslateWhitelists[];
     34   static const char kPrefTranslateDeniedCount[];
     35   static const char kPrefTranslateAcceptedCount[];
     36   static const char kPrefTranslateBlockedLanguages[];
     37 
     38   explicit TranslatePrefs(PrefService* user_prefs);
     39 
     40   // Resets the blocked languages list, the sites blacklist, the languages
     41   // whitelist, and the accepted/denied counts.
     42   void ResetToDefaults();
     43 
     44   bool IsBlockedLanguage(const std::string& original_language) const;
     45   void BlockLanguage(const std::string& original_language);
     46   void UnblockLanguage(const std::string& original_language);
     47 
     48   // Removes a language from the old blacklist. This method is for
     49   // chrome://translate-internals/.  Don't use this if there is no special
     50   // reason.
     51   void RemoveLanguageFromLegacyBlacklist(const std::string& original_language);
     52 
     53   bool IsSiteBlacklisted(const std::string& site) const;
     54   void BlacklistSite(const std::string& site);
     55   void RemoveSiteFromBlacklist(const std::string& site);
     56 
     57   bool HasWhitelistedLanguagePairs() const;
     58 
     59   bool IsLanguagePairWhitelisted(const std::string& original_language,
     60       const std::string& target_language);
     61   void WhitelistLanguagePair(const std::string& original_language,
     62       const std::string& target_language);
     63   void RemoveLanguagePairFromWhitelist(const std::string& original_language,
     64       const std::string& target_language);
     65 
     66   // Will return true if at least one language has been blacklisted.
     67   bool HasBlockedLanguages() const;
     68 
     69   // Will return true if at least one site has been blacklisted.
     70   bool HasBlacklistedSites() const;
     71 
     72   // These methods are used to track how many times the user has denied the
     73   // translation for a specific language. (So we can present a UI to black-list
     74   // that language if the user keeps denying translations).
     75   int GetTranslationDeniedCount(const std::string& language) const;
     76   void IncrementTranslationDeniedCount(const std::string& language);
     77   void ResetTranslationDeniedCount(const std::string& language);
     78 
     79   // These methods are used to track how many times the user has accepted the
     80   // translation for a specific language. (So we can present a UI to white-list
     81   // that language if the user keeps accepting translations).
     82   int GetTranslationAcceptedCount(const std::string& language);
     83   void IncrementTranslationAcceptedCount(const std::string& language);
     84   void ResetTranslationAcceptedCount(const std::string& language);
     85 
     86   // Sets the language list of chrome://settings/languages.
     87   void GetLanguageList(std::vector<std::string>* languages);
     88 
     89   // Updates the language list of chrome://settings/languages.
     90   void UpdateLanguageList(const std::vector<std::string>& languages);
     91 
     92   static bool CanTranslateLanguage(
     93       Profile* profile, const std::string& language);
     94   static bool ShouldAutoTranslate(PrefService* user_prefs,
     95       const std::string& original_language, std::string* target_language);
     96   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
     97   static void MigrateUserPrefs(PrefService* user_prefs);
     98 
     99   // Converts the language code for Translate. This removes the sub code (like
    100   // -US) except for Chinese, and converts the synonyms.
    101   // The same logic exists at language_options.js, and please keep consistency
    102   // with the JavaScript file.
    103   static std::string ConvertLangCodeForTranslation(const std::string &lang);
    104 
    105  private:
    106   friend class TranslatePrefsTest;
    107   FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest, CreateBlockedLanguages);
    108   FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest,
    109                            CreateBlockedLanguagesNonEnglishUI);
    110 
    111   // Merges two language sets to migrate to the language setting UI.
    112   static void CreateBlockedLanguages(
    113       std::vector<std::string>* blocked_languages,
    114       const std::vector<std::string>& blacklisted_languages,
    115       const std::vector<std::string>& accept_languages);
    116 
    117   void ClearBlockedLanguages();
    118   void ClearBlacklistedSites();
    119   void ClearWhitelistedLanguagePairs();
    120   bool IsValueBlacklisted(const char* pref_id, const std::string& value) const;
    121   void BlacklistValue(const char* pref_id, const std::string& value);
    122   void RemoveValueFromBlacklist(const char* pref_id, const std::string& value);
    123   bool IsValueInList(
    124       const base::ListValue* list, const std::string& value) const;
    125   bool IsLanguageWhitelisted(const std::string& original_language,
    126       std::string* target_language) const;
    127   bool IsListEmpty(const char* pref_id) const;
    128   bool IsDictionaryEmpty(const char* pref_id) const;
    129 
    130   // Retrieves the dictionary mapping the number of times translation has been
    131   // denied for a language, creating it if necessary.
    132   base::DictionaryValue* GetTranslationDeniedCountDictionary();
    133 
    134   // Retrieves the dictionary mapping the number of times translation has been
    135   // accepted for a language, creating it if necessary.
    136   base::DictionaryValue* GetTranslationAcceptedCountDictionary() const;
    137 
    138   PrefService* prefs_;  // Weak.
    139 
    140   DISALLOW_COPY_AND_ASSIGN(TranslatePrefs);
    141 };
    142 
    143 #endif  // CHROME_BROWSER_TRANSLATE_TRANSLATE_PREFS_H_
    144