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

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

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

Powered by Google App Engine
This is Rietveld 408576698