Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: chrome/browser/translate/translate_ui_delegate.cc

Issue 23708029: Translate: Refactoring: Create TranslateUIDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: (rebasing) Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/translate/translate_ui_delegate.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 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 #include "chrome/browser/translate/translate_ui_delegate.h"
6
7 #include "base/i18n/string_compare.h"
8 #include "base/metrics/histogram.h"
9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/translate/translate_manager.h"
12 #include "chrome/browser/translate/translate_prefs.h"
13 #include "chrome/browser/translate/translate_tab_helper.h"
14 #include "components/translate/common/translate_constants.h"
15 #include "content/public/browser/browser_context.h"
16 #include "content/public/browser/navigation_entry.h"
17 #include "content/public/browser/web_contents.h"
18 #include "third_party/icu/source/i18n/unicode/coll.h"
19 #include "ui/base/l10n/l10n_util.h"
20
21 namespace {
22
23 const char kDeclineTranslate[] = "Translate.DeclineTranslate";
24 const char kRevertTranslation[] = "Translate.RevertTranslation";
25 const char kPerformTranslate[] = "Translate.Translate";
26 const char kNeverTranslateLang[] = "Translate.NeverTranslateLang";
27 const char kNeverTranslateSite[] = "Translate.NeverTranslateSite";
28 const char kAlwaysTranslateLang[] = "Translate.AlwaysTranslateLang";
29
30 }
31
32 TranslateUIDelegate::TranslateUIDelegate(content::WebContents* web_contents,
33 const std::string& original_language,
34 const std::string& target_language)
35 : web_contents_(web_contents),
36 original_language_index_(NO_INDEX),
37 initial_original_language_index_(NO_INDEX),
38 target_language_index_(NO_INDEX) {
39 std::vector<std::string> language_codes;
40 TranslateManager::GetSupportedLanguages(&language_codes);
41
42 // Preparing for the alphabetical order in the locale.
43 UErrorCode error = U_ZERO_ERROR;
44 std::string locale = g_browser_process->GetApplicationLocale();
45 icu::Locale loc(locale.c_str());
46 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error));
47 collator->setStrength(icu::Collator::PRIMARY);
48
49 languages_.reserve(language_codes.size());
50 for (std::vector<std::string>::const_iterator iter = language_codes.begin();
51 iter != language_codes.end(); ++iter) {
52 std::string language_code = *iter;
53
54 string16 language_name = l10n_util::GetDisplayNameForLocale(
55 language_code, g_browser_process->GetApplicationLocale(), true);
56 // Insert the language in languages_ in alphabetical order.
57 std::vector<LanguageNamePair>::iterator iter2;
58 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) {
59 if (base::i18n::CompareString16WithCollator(collator.get(),
60 language_name, iter2->second) == UCOL_LESS) {
61 break;
62 }
63 }
64 languages_.insert(iter2, LanguageNamePair(language_code, language_name));
65 }
66 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
67 iter != languages_.end(); ++iter) {
68 std::string language_code = iter->first;
69 if (language_code == original_language) {
70 original_language_index_ = iter - languages_.begin();
71 initial_original_language_index_ = original_language_index_;
72 }
73 if (language_code == target_language)
74 target_language_index_ = iter - languages_.begin();
75 }
76
77 Profile* profile =
78 Profile::FromBrowserContext(web_contents->GetBrowserContext());
79 prefs_.reset(new TranslatePrefs(profile->GetPrefs()));
80 }
81
82 TranslateUIDelegate::~TranslateUIDelegate() {
83 }
84
85 size_t TranslateUIDelegate::GetNumberOfLanguages() const {
86 return languages_.size();
87 }
88
89 size_t TranslateUIDelegate::GetOriginalLanguageIndex() const {
90 return original_language_index_;
91 }
92
93 void TranslateUIDelegate::SetOriginalLanguageIndex(size_t language_index) {
94 DCHECK_LT(language_index, GetNumberOfLanguages());
95 original_language_index_ = language_index;
96 }
97
98 size_t TranslateUIDelegate::GetTargetLanguageIndex() const {
99 return target_language_index_;
100 }
101
102 void TranslateUIDelegate::SetTargetLanguageIndex(size_t language_index) {
103 DCHECK_LT(language_index, GetNumberOfLanguages());
104 target_language_index_ = language_index;
105 }
106
107
108 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const {
109 DCHECK_LT(index, GetNumberOfLanguages());
110 return languages_[index].first;
111 }
112
113 string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const {
114 if (index == static_cast<size_t>(NO_INDEX))
115 return string16();
116 DCHECK_LT(index, GetNumberOfLanguages());
117 return languages_[index].second;
118 }
119
120 std::string TranslateUIDelegate::GetOriginalLanguageCode() const {
121 return (GetOriginalLanguageIndex() == static_cast<size_t>(NO_INDEX)) ?
122 translate::kUnknownLanguageCode :
123 GetLanguageCodeAt(GetOriginalLanguageIndex());
124 }
125
126 std::string TranslateUIDelegate::GetTargetLanguageCode() const {
127 return GetLanguageCodeAt(GetTargetLanguageIndex());
128 }
129
130 void TranslateUIDelegate::Translate() {
131 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
132 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode());
133 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode());
134 }
135 TranslateManager::GetInstance()->TranslatePage(web_contents(),
136 GetOriginalLanguageCode(),
137 GetTargetLanguageCode());
138
139 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true);
140 }
141
142 void TranslateUIDelegate::RevertTranslation() {
143 TranslateManager::GetInstance()->RevertTranslation(web_contents());
144
145 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true);
146 }
147
148 void TranslateUIDelegate::TranslationDeclined() {
149 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
150 prefs_->ResetTranslationAcceptedCount(GetOriginalLanguageCode());
151 prefs_->IncrementTranslationDeniedCount(GetOriginalLanguageCode());
152 }
153
154 // Remember that the user declined the translation so as to prevent showing a
155 // translate infobar for that page again. (TranslateManager initiates
156 // translations when getting a LANGUAGE_DETERMINED from the page, which
157 // happens when a load stops. That could happen multiple times, including
158 // after the user already declined the translation.)
159 TranslateTabHelper::FromWebContents(web_contents())->
160 language_state().set_translation_declined(true);
161
162 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
163 }
164
165 bool TranslateUIDelegate::IsLanguageBlocked() {
166 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode());
167 }
168
169 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
170 if (value)
171 prefs_->BlockLanguage(GetOriginalLanguageCode());
172 else
173 prefs_->UnblockLanguage(GetOriginalLanguageCode());
174
175 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true);
176 }
177
178 bool TranslateUIDelegate::IsSiteBlacklisted() {
179 std::string host = GetPageHost();
180 return !host.empty() && prefs_->IsSiteBlacklisted(host);
181 }
182
183 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
184 std::string host = GetPageHost();
185 if (host.empty())
186 return;
187
188 if (value)
189 prefs_->BlacklistSite(host);
190 else
191 prefs_->RemoveSiteFromBlacklist(host);
192
193 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true);
194 }
195
196 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
197 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(),
198 GetTargetLanguageCode());
199 }
200
201 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
202 const std::string& original_lang = GetOriginalLanguageCode();
203 const std::string& target_lang = GetTargetLanguageCode();
204 if (value)
205 prefs_->WhitelistLanguagePair(original_lang, target_lang);
206 else
207 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang);
208
209 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true);
210 }
211
212 std::string TranslateUIDelegate::GetPageHost() {
213 content::NavigationEntry* entry =
214 web_contents()->GetController().GetActiveEntry();
215 return entry ? entry->GetURL().HostNoBrackets() : std::string();
216 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_ui_delegate.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698