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#pragma once
8
9#include <string>
10
11#include "googleurl/src/gurl.h"
12
13class DictionaryValue;
14class ListValue;
15class PrefService;
16
17class TranslatePrefs {
18 public:
19  static const char kPrefTranslateLanguageBlacklist[];
20  static const char kPrefTranslateSiteBlacklist[];
21  static const char kPrefTranslateWhitelists[];
22  static const char kPrefTranslateDeniedCount[];
23  static const char kPrefTranslateAcceptedCount[];
24
25  explicit TranslatePrefs(PrefService* user_prefs);
26
27  bool IsLanguageBlacklisted(const std::string& original_language);
28  void BlacklistLanguage(const std::string& original_language);
29  void RemoveLanguageFromBlacklist(const std::string& original_language);
30
31  bool IsSiteBlacklisted(const std::string& site);
32  void BlacklistSite(const std::string& site);
33  void RemoveSiteFromBlacklist(const std::string& site);
34
35  bool IsLanguagePairWhitelisted(const std::string& original_language,
36      const std::string& target_language);
37  void WhitelistLanguagePair(const std::string& original_language,
38      const std::string& target_language);
39  void RemoveLanguagePairFromWhitelist(const std::string& original_language,
40      const std::string& target_language);
41
42  // These methods are used to track how many times the user has denied the
43  // translation for a specific language. (So we can present a UI to black-list
44  // that language if the user keeps denying translations).
45  int GetTranslationDeniedCount(const std::string& language);
46  void IncrementTranslationDeniedCount(const std::string& language);
47  void ResetTranslationDeniedCount(const std::string& language);
48
49  // These methods are used to track how many times the user has accepted the
50  // translation for a specific language. (So we can present a UI to white-list
51  // that langueg if the user keeps accepting translations).
52  int GetTranslationAcceptedCount(const std::string& language);
53  void IncrementTranslationAcceptedCount(const std::string& language);
54  void ResetTranslationAcceptedCount(const std::string& language);
55
56  static bool CanTranslate(PrefService* user_prefs,
57      const std::string& original_language, const GURL& url);
58  static bool ShouldAutoTranslate(PrefService* user_prefs,
59      const std::string& original_language, std::string* target_language);
60  static void RegisterUserPrefs(PrefService* user_prefs);
61
62 private:
63  static void MigrateTranslateWhitelists(PrefService* user_prefs);
64  bool IsValueBlacklisted(const char* pref_id, const std::string& value);
65  void BlacklistValue(const char* pref_id, const std::string& value);
66  void RemoveValueFromBlacklist(const char* pref_id, const std::string& value);
67  bool IsValueInList(const ListValue* list, const std::string& value);
68  bool IsLanguageWhitelisted(const std::string& original_language,
69      std::string* target_language);
70
71  // Retrieves the dictionary mapping the number of times translation has been
72  // denied for a language, creating it if necessary.
73  DictionaryValue* GetTranslationDeniedCountDictionary();
74
75  // Retrieves the dictionary mapping the number of times translation has been
76  // accepted for a language, creating it if necessary.
77  DictionaryValue* GetTranslationAcceptedCountDictionary();
78
79  PrefService* prefs_;  // Weak.
80};
81
82#endif  // CHROME_BROWSER_TRANSLATE_TRANSLATE_PREFS_H_
83