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

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

Issue 107303002: Make the TranslateInfoBarDelegate once again use the TranslateUIDelegate. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 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_ui_delegate.h" 5 #include "chrome/browser/translate/translate_ui_delegate.h"
6 6
7 #include "base/i18n/string_compare.h" 7 #include "base/i18n/string_compare.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "chrome/browser/browser_process.h" 9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/translate/translate_browser_metrics.h"
12 #include "chrome/browser/translate/translate_manager.h" 11 #include "chrome/browser/translate/translate_manager.h"
13 #include "chrome/browser/translate/translate_prefs.h" 12 #include "chrome/browser/translate/translate_prefs.h"
14 #include "chrome/browser/translate/translate_tab_helper.h" 13 #include "chrome/browser/translate/translate_tab_helper.h"
15 #include "components/translate/common/translate_constants.h" 14 #include "components/translate/common/translate_constants.h"
16 #include "content/public/browser/browser_context.h" 15 #include "content/public/browser/browser_context.h"
17 #include "content/public/browser/navigation_entry.h" 16 #include "content/public/browser/navigation_entry.h"
18 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
19 #include "third_party/icu/source/i18n/unicode/coll.h" 18 #include "third_party/icu/source/i18n/unicode/coll.h"
20 #include "ui/base/l10n/l10n_util.h" 19 #include "ui/base/l10n/l10n_util.h"
21 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 const char kModifyOriginalLang[] = "Translate.ModifyOriginalLang";
30 const char kModifyTargetLang[] = "Translate.ModifyTargetLang";
31
32 } // namespace
33
22 TranslateUIDelegate::TranslateUIDelegate(content::WebContents* web_contents, 34 TranslateUIDelegate::TranslateUIDelegate(content::WebContents* web_contents,
23 const std::string& original_language, 35 const std::string& original_language,
24 const std::string& target_language, 36 const std::string& target_language,
25 TranslateErrors::Type error_type) 37 TranslateErrors::Type error_type)
26 : web_contents_(web_contents), 38 : web_contents_(web_contents),
27 original_language_index_(NO_INDEX), 39 original_language_index_(NO_INDEX),
40 initial_original_language_index_(NO_INDEX),
28 target_language_index_(NO_INDEX), 41 target_language_index_(NO_INDEX),
29 error_type_(error_type) { 42 error_type_(error_type) {
30 DCHECK(web_contents_); 43 DCHECK(web_contents_);
31 44
32 languages_ = 45 std::vector<std::string> language_codes;
33 GetSortedLanguageNames(g_browser_process->GetApplicationLocale()); 46 TranslateManager::GetSupportedLanguages(&language_codes);
34 47
48 // Preparing for the alphabetical order in the locale.
49 UErrorCode error = U_ZERO_ERROR;
50 std::string locale = g_browser_process->GetApplicationLocale();
51 icu::Locale loc(locale.c_str());
52 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error));
53 collator->setStrength(icu::Collator::PRIMARY);
54
55 languages_.reserve(language_codes.size());
56 for (std::vector<std::string>::const_iterator iter = language_codes.begin();
57 iter != language_codes.end(); ++iter) {
58 std::string language_code = *iter;
59
60 string16 language_name = l10n_util::GetDisplayNameForLocale(
61 language_code, g_browser_process->GetApplicationLocale(), true);
62 // Insert the language in languages_ in alphabetical order.
63 std::vector<LanguageNamePair>::iterator iter2;
64 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) {
65 if (base::i18n::CompareString16WithCollator(collator.get(),
66 language_name, iter2->second) == UCOL_LESS) {
67 break;
68 }
69 }
70 languages_.insert(iter2, LanguageNamePair(language_code, language_name));
71 }
35 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin(); 72 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
36 iter != languages_.end(); ++iter) { 73 iter != languages_.end(); ++iter) {
37 std::string language_code = iter->first; 74 std::string language_code = iter->first;
38 if (language_code == original_language) 75 if (language_code == original_language) {
39 original_language_index_ = iter - languages_.begin(); 76 original_language_index_ = iter - languages_.begin();
77 initial_original_language_index_ = original_language_index_;
78 }
40 if (language_code == target_language) 79 if (language_code == target_language)
41 target_language_index_ = iter - languages_.begin(); 80 target_language_index_ = iter - languages_.begin();
42 } 81 }
43 82
44 Profile* profile = 83 Profile* profile =
45 Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 84 Profile::FromBrowserContext(web_contents_->GetBrowserContext());
46 prefs_.reset(new TranslatePrefs(profile->GetPrefs())); 85 prefs_.reset(new TranslatePrefs(profile->GetPrefs()));
47 } 86 }
48 87
49 TranslateUIDelegate::~TranslateUIDelegate() { 88 TranslateUIDelegate::~TranslateUIDelegate() {
50 } 89 }
51 90
52 // static
53 std::vector<TranslateUIDelegate::LanguageNamePair>
54 TranslateUIDelegate::GetSortedLanguageNames(const std::string& locale) {
55 std::vector<std::string> language_codes;
56 TranslateManager::GetSupportedLanguages(&language_codes);
57
58 // Preparing for the alphabetical order in the locale.
59 UErrorCode error = U_ZERO_ERROR;
60 icu::Locale loc(locale.c_str());
61 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error));
62 collator->setStrength(icu::Collator::PRIMARY);
63
64 std::vector<LanguageNamePair> language_names;
65 language_names.reserve(language_codes.size());
66 for (std::vector<std::string>::const_iterator iter = language_codes.begin();
67 iter != language_codes.end(); ++iter) {
68 std::string language_code = *iter;
69
70 string16 language_name = l10n_util::GetDisplayNameForLocale(
71 language_code, locale, true);
72 // Insert the language in |language_names| in alphabetical order.
73 std::vector<LanguageNamePair>::iterator iter2;
74 for (iter2 = language_names.begin(); iter2 != language_names.end();
75 ++iter2) {
76 if (base::i18n::CompareString16WithCollator(collator.get(),
77 language_name, iter2->second) == UCOL_LESS) {
78 break;
79 }
80 }
81 language_names.insert(iter2,
82 LanguageNamePair(language_code, language_name));
83 }
84
85 return language_names;
86 }
87
88 // static
89 std::string TranslateUIDelegate::GetPageHost(
90 content::WebContents* web_contents) {
91 content::NavigationEntry* entry =
92 web_contents->GetController().GetActiveEntry();
93 return entry ? entry->GetURL().HostNoBrackets() : std::string();
94 }
95
96 size_t TranslateUIDelegate::GetNumberOfLanguages() const { 91 size_t TranslateUIDelegate::GetNumberOfLanguages() const {
97 return languages_.size(); 92 return languages_.size();
98 } 93 }
99 94
100 size_t TranslateUIDelegate::GetOriginalLanguageIndex() const { 95 size_t TranslateUIDelegate::GetOriginalLanguageIndex() const {
101 return original_language_index_; 96 return original_language_index_;
102 } 97 }
103 98
104 void TranslateUIDelegate::UpdateOriginalLanguageIndex(size_t language_index) { 99 void TranslateUIDelegate::UpdateOriginalLanguageIndex(size_t language_index) {
105 if (original_language_index_ == language_index) 100 if (original_language_index_ == language_index)
106 return; 101 return;
107 102
108 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 103 UMA_HISTOGRAM_BOOLEAN(kModifyOriginalLang, true);
109 TranslateBrowserMetrics::UMA_MODIFY_ORIGINAL_LANG), true);
110 original_language_index_ = language_index; 104 original_language_index_ = language_index;
111 } 105 }
112 106
113 size_t TranslateUIDelegate::GetTargetLanguageIndex() const { 107 size_t TranslateUIDelegate::GetTargetLanguageIndex() const {
114 return target_language_index_; 108 return target_language_index_;
115 } 109 }
116 110
117 void TranslateUIDelegate::UpdateTargetLanguageIndex(size_t language_index) { 111 void TranslateUIDelegate::UpdateTargetLanguageIndex(size_t language_index) {
118 if (target_language_index_ == language_index) 112 if (target_language_index_ == language_index)
119 return; 113 return;
120 114
121 DCHECK_LT(language_index, GetNumberOfLanguages()); 115 DCHECK_LT(language_index, GetNumberOfLanguages());
122 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 116 UMA_HISTOGRAM_BOOLEAN(kModifyTargetLang, true);
123 TranslateBrowserMetrics::UMA_MODIFY_TARGET_LANG), true);
124 target_language_index_ = language_index; 117 target_language_index_ = language_index;
125 } 118 }
126 119
127 120
128 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const { 121 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const {
129 DCHECK_LT(index, GetNumberOfLanguages()); 122 DCHECK_LT(index, GetNumberOfLanguages());
130 return languages_[index].first; 123 return languages_[index].first;
131 } 124 }
132 125
133 string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const { 126 string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const {
(...skipping 15 matching lines...) Expand all
149 142
150 void TranslateUIDelegate::Translate() { 143 void TranslateUIDelegate::Translate() {
151 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) { 144 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
152 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); 145 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode());
153 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); 146 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode());
154 } 147 }
155 TranslateManager::GetInstance()->TranslatePage(web_contents(), 148 TranslateManager::GetInstance()->TranslatePage(web_contents(),
156 GetOriginalLanguageCode(), 149 GetOriginalLanguageCode(),
157 GetTargetLanguageCode()); 150 GetTargetLanguageCode());
158 151
159 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 152 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true);
160 TranslateBrowserMetrics::UMA_PERFORM_TRANSLATE), true);
161 } 153 }
162 154
163 void TranslateUIDelegate::RevertTranslation() { 155 void TranslateUIDelegate::RevertTranslation() {
164 TranslateManager::GetInstance()->RevertTranslation(web_contents()); 156 TranslateManager::GetInstance()->RevertTranslation(web_contents());
165 157
166 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 158 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true);
167 TranslateBrowserMetrics::UMA_REVERT_TRANSLATION), true);
168 } 159 }
169 160
170 void TranslateUIDelegate::TranslationDeclined() { 161 void TranslateUIDelegate::TranslationDeclined() {
171 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) { 162 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
172 prefs_->ResetTranslationAcceptedCount(GetOriginalLanguageCode()); 163 prefs_->ResetTranslationAcceptedCount(GetOriginalLanguageCode());
173 prefs_->IncrementTranslationDeniedCount(GetOriginalLanguageCode()); 164 prefs_->IncrementTranslationDeniedCount(GetOriginalLanguageCode());
174 } 165 }
175 166
176 // Remember that the user declined the translation so as to prevent showing a 167 // Remember that the user declined the translation so as to prevent showing a
177 // translate infobar for that page again. (TranslateManager initiates 168 // translate infobar for that page again. (TranslateManager initiates
178 // translations when getting a LANGUAGE_DETERMINED from the page, which 169 // translations when getting a LANGUAGE_DETERMINED from the page, which
179 // happens when a load stops. That could happen multiple times, including 170 // happens when a load stops. That could happen multiple times, including
180 // after the user already declined the translation.) 171 // after the user already declined the translation.)
181 TranslateTabHelper::FromWebContents(web_contents())-> 172 TranslateTabHelper::FromWebContents(web_contents())->
182 language_state().set_translation_declined(true); 173 language_state().set_translation_declined(true);
183 174
184 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 175 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
185 TranslateBrowserMetrics::UMA_DECLINE_TRANSLATE), true);
186 } 176 }
187 177
188 bool TranslateUIDelegate::IsLanguageBlocked() { 178 bool TranslateUIDelegate::IsLanguageBlocked() {
189 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); 179 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode());
190 } 180 }
191 181
192 void TranslateUIDelegate::SetLanguageBlocked(bool value) { 182 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
193 if (value) { 183 if (value) {
194 prefs_->BlockLanguage(GetOriginalLanguageCode()); 184 prefs_->BlockLanguage(GetOriginalLanguageCode());
195 TranslateTabHelper* translate_tab_helper = 185 TranslateTabHelper* translate_tab_helper =
196 TranslateTabHelper::FromWebContents(web_contents()); 186 TranslateTabHelper::FromWebContents(web_contents());
197 DCHECK(translate_tab_helper); 187 DCHECK(translate_tab_helper);
198 translate_tab_helper->language_state().SetTranslateEnabled(false); 188 translate_tab_helper->language_state().SetTranslateEnabled(false);
199 } else { 189 } else {
200 prefs_->UnblockLanguage(GetOriginalLanguageCode()); 190 prefs_->UnblockLanguage(GetOriginalLanguageCode());
201 } 191 }
202 192
203 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 193 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true);
204 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
205 } 194 }
206 195
207 bool TranslateUIDelegate::IsSiteBlacklisted() { 196 bool TranslateUIDelegate::IsSiteBlacklisted() {
208 std::string host = GetPageHost(web_contents()); 197 std::string host = GetPageHost();
209 return !host.empty() && prefs_->IsSiteBlacklisted(host); 198 return !host.empty() && prefs_->IsSiteBlacklisted(host);
210 } 199 }
211 200
212 void TranslateUIDelegate::SetSiteBlacklist(bool value) { 201 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
213 std::string host = GetPageHost(web_contents()); 202 std::string host = GetPageHost();
214 if (host.empty()) 203 if (host.empty())
215 return; 204 return;
216 205
217 if (value) { 206 if (value) {
218 prefs_->BlacklistSite(host); 207 prefs_->BlacklistSite(host);
219 TranslateTabHelper* translate_tab_helper = 208 TranslateTabHelper* translate_tab_helper =
220 TranslateTabHelper::FromWebContents(web_contents()); 209 TranslateTabHelper::FromWebContents(web_contents());
221 DCHECK(translate_tab_helper); 210 DCHECK(translate_tab_helper);
222 translate_tab_helper->language_state().SetTranslateEnabled(false); 211 translate_tab_helper->language_state().SetTranslateEnabled(false);
223 } else { 212 } else {
224 prefs_->RemoveSiteFromBlacklist(host); 213 prefs_->RemoveSiteFromBlacklist(host);
225 } 214 }
226 215
227 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 216 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true);
228 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_SITE), true);
229 } 217 }
230 218
231 bool TranslateUIDelegate::ShouldAlwaysTranslate() { 219 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
232 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 220 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(),
233 GetTargetLanguageCode()); 221 GetTargetLanguageCode());
234 } 222 }
235 223
236 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 224 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
237 const std::string& original_lang = GetOriginalLanguageCode(); 225 const std::string& original_lang = GetOriginalLanguageCode();
238 const std::string& target_lang = GetTargetLanguageCode(); 226 const std::string& target_lang = GetTargetLanguageCode();
239 if (value) 227 if (value)
240 prefs_->WhitelistLanguagePair(original_lang, target_lang); 228 prefs_->WhitelistLanguagePair(original_lang, target_lang);
241 else 229 else
242 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 230 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang);
243 231
244 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 232 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true);
245 TranslateBrowserMetrics::UMA_ALWAYS_TRANSLATE_LANG), true);
246 } 233 }
234
235 std::string TranslateUIDelegate::GetPageHost() {
236 content::NavigationEntry* entry =
237 web_contents()->GetController().GetActiveEntry();
238 return entry ? entry->GetURL().HostNoBrackets() : std::string();
239 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_ui_delegate.h ('k') | chrome/browser/ui/cocoa/infobars/translate_infobar_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698