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

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

Issue 10952016: Simplify the translate infobar code some. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_infobar_delegate.h" 5 #include "chrome/browser/translate/translate_infobar_delegate.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/infobars/infobar_tab_helper.h" 11 #include "chrome/browser/infobars/infobar_tab_helper.h"
12 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/translate/translate_infobar_view.h"
14 #include "chrome/browser/translate/translate_manager.h" 13 #include "chrome/browser/translate/translate_manager.h"
15 #include "chrome/browser/translate/translate_tab_helper.h" 14 #include "chrome/browser/translate/translate_tab_helper.h"
16 #include "chrome/browser/ui/tab_contents/tab_contents.h" 15 #include "chrome/browser/ui/tab_contents/tab_contents.h"
17 #include "chrome/common/chrome_constants.h"
18 #include "content/public/browser/navigation_details.h" 16 #include "content/public/browser/navigation_details.h"
19 #include "content/public/browser/navigation_entry.h" 17 #include "content/public/browser/navigation_entry.h"
20 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
21 #include "grit/generated_resources.h" 19 #include "grit/generated_resources.h"
22 #include "grit/theme_resources.h" 20 #include "grit/theme_resources.h"
23 #include "ui/base/l10n/l10n_util.h" 21 #include "ui/base/l10n/l10n_util.h"
24 #include "ui/base/resource/resource_bundle.h" 22 #include "ui/base/resource/resource_bundle.h"
25 23
26 using content::NavigationEntry; 24 using content::NavigationEntry;
27 25
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 error, 63 error,
66 infobar_helper, 64 infobar_helper,
67 prefs, 65 prefs,
68 original_language, 66 original_language,
69 target_language); 67 target_language);
70 } 68 }
71 69
72 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() { 70 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
73 } 71 }
74 72
75 std::string TranslateInfoBarDelegate::GetLanguageCodeAt(size_t index) const {
76 DCHECK_LT(index, GetLanguageCount());
77 return languages_[index].first;
78 }
79
80 string16 TranslateInfoBarDelegate::GetLanguageDisplayableNameAt(
81 size_t index) const {
82 DCHECK_LT(index, GetLanguageCount());
83 return languages_[index].second;
84 }
85
86 std::string TranslateInfoBarDelegate::GetOriginalLanguageCode() const {
87 return (original_language_index() == kNoIndex) ?
88 chrome::kUnknownLanguageCode :
89 GetLanguageCodeAt(original_language_index());
90 }
91
92 std::string TranslateInfoBarDelegate::GetTargetLanguageCode() const {
93 return GetLanguageCodeAt(target_language_index());
94 }
95
96 void TranslateInfoBarDelegate::SetOriginalLanguage(size_t language_index) {
97 DCHECK_LT(language_index, GetLanguageCount());
98 original_language_index_ = language_index;
99 if (infobar_view_)
100 infobar_view_->OriginalLanguageChanged();
101 if (type_ == AFTER_TRANSLATE)
102 Translate();
103 }
104
105 void TranslateInfoBarDelegate::SetTargetLanguage(size_t language_index) {
106 DCHECK_LT(language_index, GetLanguageCount());
107 DCHECK_GE(language_index, 0U);
108 target_language_index_ = language_index;
109 if (infobar_view_)
110 infobar_view_->TargetLanguageChanged();
111 if (type_ == AFTER_TRANSLATE)
112 Translate();
113 }
114
115 void TranslateInfoBarDelegate::Translate() { 73 void TranslateInfoBarDelegate::Translate() {
116 const std::string& original_language_code = GetOriginalLanguageCode();
117 if (!owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord()) { 74 if (!owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord()) {
118 prefs_.ResetTranslationDeniedCount(original_language_code); 75 prefs_.ResetTranslationDeniedCount(original_language_code());
119 prefs_.IncrementTranslationAcceptedCount(original_language_code); 76 prefs_.IncrementTranslationAcceptedCount(original_language_code());
120 } 77 }
121 78
122 TranslateManager::GetInstance()->TranslatePage(owner()->GetWebContents(), 79 TranslateManager::GetInstance()->TranslatePage(owner()->GetWebContents(),
123 GetLanguageCodeAt(original_language_index()), 80 original_language_code(),
124 GetLanguageCodeAt(target_language_index())); 81 target_language_code());
125 } 82 }
126 83
127 void TranslateInfoBarDelegate::RevertTranslation() { 84 void TranslateInfoBarDelegate::RevertTranslation() {
128 TranslateManager::GetInstance()->RevertTranslation(owner()->GetWebContents()); 85 TranslateManager::GetInstance()->RevertTranslation(owner()->GetWebContents());
129 RemoveSelf(); 86 RemoveSelf();
130 } 87 }
131 88
132 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { 89 void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
133 TranslateManager::GetInstance()-> 90 TranslateManager::GetInstance()->
134 ReportLanguageDetectionError(owner()->GetWebContents()); 91 ReportLanguageDetectionError(owner()->GetWebContents());
135 } 92 }
136 93
137 void TranslateInfoBarDelegate::TranslationDeclined() { 94 void TranslateInfoBarDelegate::TranslationDeclined() {
138 const std::string& original_language_code = GetOriginalLanguageCode();
139 if (!owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord()) { 95 if (!owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord()) {
140 prefs_.ResetTranslationAcceptedCount(original_language_code); 96 prefs_.ResetTranslationAcceptedCount(original_language_code());
141 prefs_.IncrementTranslationDeniedCount(original_language_code); 97 prefs_.IncrementTranslationDeniedCount(original_language_code());
142 } 98 }
143 99
144 // Remember that the user declined the translation so as to prevent showing a 100 // Remember that the user declined the translation so as to prevent showing a
145 // translate infobar for that page again. (TranslateManager initiates 101 // translate infobar for that page again. (TranslateManager initiates
146 // translations when getting a LANGUAGE_DETERMINED from the page, which 102 // translations when getting a LANGUAGE_DETERMINED from the page, which
147 // happens when a load stops. That could happen multiple times, including 103 // happens when a load stops. That could happen multiple times, including
148 // after the user already declined the translation.) 104 // after the user already declined the translation.)
149 TranslateTabHelper* helper = TabContents::FromWebContents( 105 TranslateTabHelper* helper = TabContents::FromWebContents(
150 owner()->GetWebContents())->translate_tab_helper(); 106 owner()->GetWebContents())->translate_tab_helper();
151 helper->language_state().set_translation_declined(true); 107 helper->language_state().set_translation_declined(true);
152 } 108 }
153 109
154 bool TranslateInfoBarDelegate::IsLanguageBlacklisted() { 110 bool TranslateInfoBarDelegate::IsLanguageBlacklisted() {
155 return prefs_.IsLanguageBlacklisted(GetOriginalLanguageCode()); 111 return prefs_.IsLanguageBlacklisted(original_language_code());
156 } 112 }
157 113
158 void TranslateInfoBarDelegate::ToggleLanguageBlacklist() { 114 void TranslateInfoBarDelegate::ToggleLanguageBlacklist() {
159 const std::string& original_lang = GetOriginalLanguageCode(); 115 const std::string& original_lang = original_language_code();
160 if (prefs_.IsLanguageBlacklisted(original_lang)) { 116 if (prefs_.IsLanguageBlacklisted(original_lang)) {
161 prefs_.RemoveLanguageFromBlacklist(original_lang); 117 prefs_.RemoveLanguageFromBlacklist(original_lang);
162 } else { 118 } else {
163 prefs_.BlacklistLanguage(original_lang); 119 prefs_.BlacklistLanguage(original_lang);
164 RemoveSelf(); 120 RemoveSelf();
165 } 121 }
166 } 122 }
167 123
168 bool TranslateInfoBarDelegate::IsSiteBlacklisted() { 124 bool TranslateInfoBarDelegate::IsSiteBlacklisted() {
169 std::string host = GetPageHost(); 125 std::string host = GetPageHost();
170 return !host.empty() && prefs_.IsSiteBlacklisted(host); 126 return !host.empty() && prefs_.IsSiteBlacklisted(host);
171 } 127 }
172 128
173 void TranslateInfoBarDelegate::ToggleSiteBlacklist() { 129 void TranslateInfoBarDelegate::ToggleSiteBlacklist() {
174 std::string host = GetPageHost(); 130 std::string host = GetPageHost();
175 if (host.empty()) 131 if (host.empty())
176 return; 132 return;
177 133
178 if (prefs_.IsSiteBlacklisted(host)) { 134 if (prefs_.IsSiteBlacklisted(host)) {
179 prefs_.RemoveSiteFromBlacklist(host); 135 prefs_.RemoveSiteFromBlacklist(host);
180 } else { 136 } else {
181 prefs_.BlacklistSite(host); 137 prefs_.BlacklistSite(host);
182 RemoveSelf(); 138 RemoveSelf();
183 } 139 }
184 } 140 }
185 141
186 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() { 142 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() {
187 return prefs_.IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 143 return prefs_.IsLanguagePairWhitelisted(original_language_code(),
188 GetTargetLanguageCode()); 144 target_language_code());
189 } 145 }
190 146
191 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() { 147 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() {
192 const std::string& original_lang = GetOriginalLanguageCode(); 148 const std::string& original_lang = original_language_code();
193 const std::string& target_lang = GetTargetLanguageCode(); 149 const std::string& target_lang = target_language_code();
194 if (prefs_.IsLanguagePairWhitelisted(original_lang, target_lang)) 150 if (prefs_.IsLanguagePairWhitelisted(original_lang, target_lang))
195 prefs_.RemoveLanguagePairFromWhitelist(original_lang, target_lang); 151 prefs_.RemoveLanguagePairFromWhitelist(original_lang, target_lang);
196 else 152 else
197 prefs_.WhitelistLanguagePair(original_lang, target_lang); 153 prefs_.WhitelistLanguagePair(original_lang, target_lang);
198 } 154 }
199 155
200 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() { 156 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() {
201 const std::string& original_lang = GetOriginalLanguageCode(); 157 const std::string& original_lang = original_language_code();
202 const std::string& target_lang = GetTargetLanguageCode(); 158 const std::string& target_lang = target_language_code();
203 DCHECK(!prefs_.IsLanguagePairWhitelisted(original_lang, target_lang)); 159 DCHECK(!prefs_.IsLanguagePairWhitelisted(original_lang, target_lang));
204 prefs_.WhitelistLanguagePair(original_lang, target_lang); 160 prefs_.WhitelistLanguagePair(original_lang, target_lang);
205 Translate(); 161 Translate();
206 } 162 }
207 163
208 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { 164 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() {
209 std::string original_lang = GetOriginalLanguageCode(); 165 std::string original_lang = original_language_code();
210 DCHECK(!prefs_.IsLanguageBlacklisted(original_lang)); 166 DCHECK(!prefs_.IsLanguageBlacklisted(original_lang));
211 prefs_.BlacklistLanguage(original_lang); 167 prefs_.BlacklistLanguage(original_lang);
212 RemoveSelf(); 168 RemoveSelf();
213 } 169 }
214 170
215 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { 171 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
216 if (type_ == TRANSLATING) { 172 if (type_ == TRANSLATING) {
217 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, 173 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO,
218 GetLanguageDisplayableNameAt(target_language_index_)); 174 language_name_at(target_language_index_));
219 } 175 }
220 176
221 DCHECK_EQ(TRANSLATION_ERROR, type_); 177 DCHECK_EQ(TRANSLATION_ERROR, type_);
222 switch (error_) { 178 switch (error_) {
223 case TranslateErrors::NETWORK: 179 case TranslateErrors::NETWORK:
224 return l10n_util::GetStringUTF16( 180 return l10n_util::GetStringUTF16(
225 IDS_TRANSLATE_INFOBAR_ERROR_CANT_CONNECT); 181 IDS_TRANSLATE_INFOBAR_ERROR_CANT_CONNECT);
226 case TranslateErrors::INITIALIZATION_ERROR: 182 case TranslateErrors::INITIALIZATION_ERROR:
227 case TranslateErrors::TRANSLATION_ERROR: 183 case TranslateErrors::TRANSLATION_ERROR:
228 return l10n_util::GetStringUTF16( 184 return l10n_util::GetStringUTF16(
229 IDS_TRANSLATE_INFOBAR_ERROR_CANT_TRANSLATE); 185 IDS_TRANSLATE_INFOBAR_ERROR_CANT_TRANSLATE);
230 case TranslateErrors::UNKNOWN_LANGUAGE: 186 case TranslateErrors::UNKNOWN_LANGUAGE:
231 return l10n_util::GetStringUTF16( 187 return l10n_util::GetStringUTF16(
232 IDS_TRANSLATE_INFOBAR_UNKNOWN_PAGE_LANGUAGE); 188 IDS_TRANSLATE_INFOBAR_UNKNOWN_PAGE_LANGUAGE);
233 case TranslateErrors::UNSUPPORTED_LANGUAGE: 189 case TranslateErrors::UNSUPPORTED_LANGUAGE:
234 return l10n_util::GetStringFUTF16( 190 return l10n_util::GetStringFUTF16(
235 IDS_TRANSLATE_INFOBAR_UNSUPPORTED_PAGE_LANGUAGE, 191 IDS_TRANSLATE_INFOBAR_UNSUPPORTED_PAGE_LANGUAGE,
236 GetLanguageDisplayableNameAt(target_language_index_)); 192 language_name_at(target_language_index_));
237 case TranslateErrors::IDENTICAL_LANGUAGES: 193 case TranslateErrors::IDENTICAL_LANGUAGES:
238 return l10n_util::GetStringFUTF16( 194 return l10n_util::GetStringFUTF16(
239 IDS_TRANSLATE_INFOBAR_ERROR_SAME_LANGUAGE, 195 IDS_TRANSLATE_INFOBAR_ERROR_SAME_LANGUAGE,
240 GetLanguageDisplayableNameAt(target_language_index_)); 196 language_name_at(target_language_index_));
241 default: 197 default:
242 NOTREACHED(); 198 NOTREACHED();
243 return string16(); 199 return string16();
244 } 200 }
245 } 201 }
246 202
247 string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() { 203 string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() {
248 if (type_ != TRANSLATION_ERROR) { 204 if (type_ != TRANSLATION_ERROR) {
249 DCHECK_EQ(TRANSLATING, type_); 205 DCHECK_EQ(TRANSLATING, type_);
250 } else if ((error_ != TranslateErrors::IDENTICAL_LANGUAGES) && 206 } else if ((error_ != TranslateErrors::IDENTICAL_LANGUAGES) &&
251 (error_ != TranslateErrors::UNKNOWN_LANGUAGE)) { 207 (error_ != TranslateErrors::UNKNOWN_LANGUAGE)) {
252 return l10n_util::GetStringUTF16( 208 return l10n_util::GetStringUTF16(
253 (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) ? 209 (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) ?
254 IDS_TRANSLATE_INFOBAR_REVERT : IDS_TRANSLATE_INFOBAR_RETRY); 210 IDS_TRANSLATE_INFOBAR_REVERT : IDS_TRANSLATE_INFOBAR_RETRY);
255 } 211 }
256 return string16(); 212 return string16();
257 } 213 }
258 214
259 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() { 215 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() {
260 DCHECK_EQ(TRANSLATION_ERROR, type_); 216 DCHECK_EQ(TRANSLATION_ERROR, type_);
261 if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) { 217 if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) {
262 RevertTranslation(); 218 RevertTranslation();
263 return; 219 return;
264 } 220 }
265 // This is the "Try again..." case. 221 // This is the "Try again..." case.
266 TranslateManager::GetInstance()->TranslatePage(owner()->GetWebContents(), 222 TranslateManager::GetInstance()->TranslatePage(owner()->GetWebContents(),
267 GetOriginalLanguageCode(), GetTargetLanguageCode()); 223 original_language_code(), target_language_code());
268 } 224 }
269 225
270 bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() { 226 bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() {
271 return !GetMessageInfoBarButtonText().empty(); 227 return !GetMessageInfoBarButtonText().empty();
272 } 228 }
273 229
274 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateButton() { 230 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateButton() {
275 DCHECK_EQ(BEFORE_TRANSLATE, type_); 231 DCHECK_EQ(BEFORE_TRANSLATE, type_);
276 return !owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord() && 232 return !owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord() &&
277 (prefs_.GetTranslationDeniedCount(GetOriginalLanguageCode()) >= 3); 233 (prefs_.GetTranslationDeniedCount(original_language_code()) >= 3);
278 } 234 }
279 235
280 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateButton() { 236 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateButton() {
281 DCHECK_EQ(BEFORE_TRANSLATE, type_); 237 DCHECK_EQ(BEFORE_TRANSLATE, type_);
282 return !owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord() && 238 return !owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord() &&
283 (prefs_.GetTranslationAcceptedCount(GetOriginalLanguageCode()) >= 3); 239 (prefs_.GetTranslationAcceptedCount(original_language_code()) >= 3);
284 } 240 }
285 241
286 void TranslateInfoBarDelegate::UpdateBackgroundAnimation( 242 void TranslateInfoBarDelegate::UpdateBackgroundAnimation(
287 TranslateInfoBarDelegate* previous_infobar) { 243 TranslateInfoBarDelegate* previous_infobar) {
288 if (!previous_infobar || previous_infobar->IsError() == IsError()) 244 if (!previous_infobar || previous_infobar->IsError() == IsError())
289 background_animation_ = NONE; 245 background_animation_ = NONE;
290 else 246 else
291 background_animation_ = IsError() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; 247 background_animation_ = IsError() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
292 } 248 }
293 249
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 PrefService* prefs, 282 PrefService* prefs,
327 const std::string& original_language, 283 const std::string& original_language,
328 const std::string& target_language) 284 const std::string& target_language)
329 : InfoBarDelegate(infobar_helper), 285 : InfoBarDelegate(infobar_helper),
330 type_(type), 286 type_(type),
331 background_animation_(NONE), 287 background_animation_(NONE),
332 original_language_index_(kNoIndex), 288 original_language_index_(kNoIndex),
333 initial_original_language_index_(kNoIndex), 289 initial_original_language_index_(kNoIndex),
334 target_language_index_(kNoIndex), 290 target_language_index_(kNoIndex),
335 error_(error), 291 error_(error),
336 infobar_view_(NULL),
337 prefs_(prefs) { 292 prefs_(prefs) {
338 DCHECK_NE((type_ == TRANSLATION_ERROR), (error == TranslateErrors::NONE)); 293 DCHECK_NE((type_ == TRANSLATION_ERROR), (error == TranslateErrors::NONE));
339 294
340 std::vector<std::string> language_codes; 295 std::vector<std::string> language_codes;
341 TranslateManager::GetSupportedLanguages(&language_codes); 296 TranslateManager::GetSupportedLanguages(&language_codes);
342 297
343 languages_.reserve(language_codes.size()); 298 languages_.reserve(language_codes.size());
344 for (std::vector<std::string>::const_iterator iter = language_codes.begin(); 299 for (std::vector<std::string>::const_iterator iter = language_codes.begin();
345 iter != language_codes.end(); ++iter) { 300 iter != language_codes.end(); ++iter) {
346 std::string language_code = *iter; 301 std::string language_code = *iter;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 TranslateInfoBarDelegate* 353 TranslateInfoBarDelegate*
399 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { 354 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
400 return this; 355 return this;
401 } 356 }
402 357
403 std::string TranslateInfoBarDelegate::GetPageHost() { 358 std::string TranslateInfoBarDelegate::GetPageHost() {
404 NavigationEntry* entry = 359 NavigationEntry* entry =
405 owner()->GetWebContents()->GetController().GetActiveEntry(); 360 owner()->GetWebContents()->GetController().GetActiveEntry();
406 return entry ? entry->GetURL().HostNoBrackets() : std::string(); 361 return entry ? entry->GetURL().HostNoBrackets() : std::string();
407 } 362 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698