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

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

Issue 6249010: Cleanup: de-inline a bunch of classes, rename and move "PluginInstaller" to "... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "chrome/browser/browser_process.h" 11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/tab_contents/tab_contents.h" 13 #include "chrome/browser/tab_contents/tab_contents.h"
14 #include "chrome/browser/translate/translate_infobar_view.h" 14 #include "chrome/browser/translate/translate_infobar_view.h"
15 #include "chrome/browser/translate/translate_manager.h" 15 #include "chrome/browser/translate/translate_manager.h"
16 #include "chrome/common/chrome_constants.h" 16 #include "chrome/common/chrome_constants.h"
17 #include "grit/generated_resources.h" 17 #include "grit/generated_resources.h"
18 #include "grit/theme_resources.h" 18 #include "grit/theme_resources.h"
19 #include "ui/base/resource/resource_bundle.h" 19 #include "ui/base/resource/resource_bundle.h"
20 20
21 // static 21 // static
22 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateDelegate( 22 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateDelegate(
23 Type type, 23 Type type,
24 TabContents* tab_contents, 24 TabContents* tab_contents,
25 const std::string& original_language, 25 const std::string& original_language,
26 const std::string& target_language) { 26 const std::string& target_language) {
27 DCHECK(type != TRANSLATION_ERROR); 27 DCHECK_NE(TRANSLATION_ERROR, type);
28 // The original language can only be "unknown" for the "translating" 28 // The original language can only be "unknown" for the "translating"
29 // infobar, which is the case when the user started a translation from the 29 // infobar, which is the case when the user started a translation from the
30 // context menu. 30 // context menu.
31 DCHECK(type == TRANSLATING || 31 DCHECK(type == TRANSLATING ||
32 original_language != chrome::kUnknownLanguageCode); 32 original_language != chrome::kUnknownLanguageCode);
33 if ((original_language != chrome::kUnknownLanguageCode && 33 if ((original_language != chrome::kUnknownLanguageCode &&
34 !TranslateManager::IsSupportedLanguage(original_language)) || 34 !TranslateManager::IsSupportedLanguage(original_language)) ||
35 !TranslateManager::IsSupportedLanguage(target_language)) { 35 !TranslateManager::IsSupportedLanguage(target_language))
36 return NULL; 36 return NULL;
37 }
38 TranslateInfoBarDelegate* delegate = 37 TranslateInfoBarDelegate* delegate =
39 new TranslateInfoBarDelegate(type, TranslateErrors::NONE, 38 new TranslateInfoBarDelegate(type, TranslateErrors::NONE, tab_contents,
40 tab_contents,
41 original_language, target_language); 39 original_language, target_language);
42 DCHECK(delegate->target_language_index() != -1); 40 DCHECK_NE(-1, delegate->target_language_index());
43 return delegate; 41 return delegate;
44 } 42 }
45 43
46 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateErrorDelegate( 44 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateErrorDelegate(
47 TranslateErrors::Type error, 45 TranslateErrors::Type error,
48 TabContents* tab_contents, 46 TabContents* tab_contents,
49 const std::string& original_language, 47 const std::string& original_language,
50 const std::string& target_language) { 48 const std::string& target_language) {
51 return new TranslateInfoBarDelegate(TRANSLATION_ERROR, error, tab_contents, 49 return new TranslateInfoBarDelegate(TRANSLATION_ERROR, error, tab_contents,
52 original_language, target_language); 50 original_language, target_language);
53 } 51 }
54 52
55 TranslateInfoBarDelegate::TranslateInfoBarDelegate( 53 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
56 Type type,
57 TranslateErrors::Type error,
58 TabContents* tab_contents,
59 const std::string& original_language,
60 const std::string& target_language)
61 : InfoBarDelegate(tab_contents),
62 type_(type),
63 background_animation_(NONE),
64 tab_contents_(tab_contents),
65 original_language_index_(-1),
66 initial_original_language_index_(-1),
67 target_language_index_(-1),
68 error_(error),
69 infobar_view_(NULL),
70 prefs_(tab_contents_->profile()->GetPrefs()) {
71 DCHECK((type_ != TRANSLATION_ERROR && error == TranslateErrors::NONE) ||
72 (type_ == TRANSLATION_ERROR && error != TranslateErrors::NONE));
73
74 std::vector<std::string> language_codes;
75 TranslateManager::GetSupportedLanguages(&language_codes);
76
77 languages_.reserve(language_codes.size());
78 for (std::vector<std::string>::const_iterator iter = language_codes.begin();
79 iter != language_codes.end(); ++iter) {
80 std::string language_code = *iter;
81
82 string16 language_name = GetLanguageDisplayableName(language_code);
83 // Insert the language in languages_ in alphabetical order.
84 std::vector<LanguageNamePair>::iterator iter2;
85 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) {
86 if (language_name.compare(iter2->second) < 0)
87 break;
88 }
89 languages_.insert(iter2, LanguageNamePair(language_code, language_name));
90 }
91 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
92 iter != languages_.end(); ++iter) {
93 std::string language_code = iter->first;
94 if (language_code == original_language) {
95 original_language_index_ = iter - languages_.begin();
96 initial_original_language_index_ = original_language_index_;
97 }
98 if (language_code == target_language)
99 target_language_index_ = iter - languages_.begin();
100 }
101 } 54 }
102 55
103 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {} 56 std::string TranslateInfoBarDelegate::GetLanguageCodeAt(int index) const {
104 57 DCHECK(index >= 0 && index < GetLanguageCount());
105 int TranslateInfoBarDelegate::GetLanguageCount() const {
106 return static_cast<int>(languages_.size());
107 }
108
109 std::string TranslateInfoBarDelegate::GetLanguageCodeAt(
110 int index) const {
111 DCHECK(index >=0 && index < GetLanguageCount());
112 return languages_[index].first; 58 return languages_[index].first;
113 } 59 }
114 60
115 string16 TranslateInfoBarDelegate::GetLanguageDisplayableNameAt( 61 string16 TranslateInfoBarDelegate::GetLanguageDisplayableNameAt(
116 int index) const { 62 int index) const {
117 DCHECK(index >=0 && index < GetLanguageCount()); 63 DCHECK(index >= 0 && index < GetLanguageCount());
118 return languages_[index].second; 64 return languages_[index].second;
119 } 65 }
120 66
121 std::string TranslateInfoBarDelegate::GetOriginalLanguageCode() const { 67 std::string TranslateInfoBarDelegate::GetOriginalLanguageCode() const {
122 if (original_language_index() == -1) 68 return (original_language_index() == -1) ?
123 return chrome::kUnknownLanguageCode; 69 chrome::kUnknownLanguageCode :
124 return GetLanguageCodeAt(original_language_index()); 70 GetLanguageCodeAt(original_language_index());
125 } 71 }
126 72
127 std::string TranslateInfoBarDelegate::GetTargetLanguageCode() const { 73 std::string TranslateInfoBarDelegate::GetTargetLanguageCode() const {
128 return GetLanguageCodeAt(target_language_index()); 74 return GetLanguageCodeAt(target_language_index());
129 } 75 }
130 76
131 void TranslateInfoBarDelegate::SetOriginalLanguage(int language_index) { 77 void TranslateInfoBarDelegate::SetOriginalLanguage(int language_index) {
132 DCHECK(language_index < static_cast<int>(languages_.size())); 78 DCHECK_LT(language_index, GetLanguageCount());
133 original_language_index_ = language_index; 79 original_language_index_ = language_index;
134 if (infobar_view_) 80 if (infobar_view_)
135 infobar_view_->OriginalLanguageChanged(); 81 infobar_view_->OriginalLanguageChanged();
136 if (type_ == AFTER_TRANSLATE) 82 if (type_ == AFTER_TRANSLATE)
137 Translate(); 83 Translate();
138 } 84 }
139 85
140 void TranslateInfoBarDelegate::SetTargetLanguage(int language_index) { 86 void TranslateInfoBarDelegate::SetTargetLanguage(int language_index) {
141 DCHECK(language_index < static_cast<int>(languages_.size())); 87 DCHECK_LT(language_index, GetLanguageCount());
142 target_language_index_ = language_index; 88 target_language_index_ = language_index;
143 if (infobar_view_) 89 if (infobar_view_)
144 infobar_view_->TargetLanguageChanged(); 90 infobar_view_->TargetLanguageChanged();
145 if (type_ == AFTER_TRANSLATE) 91 if (type_ == AFTER_TRANSLATE)
146 Translate(); 92 Translate();
147 } 93 }
148 94
149 bool TranslateInfoBarDelegate::IsError() {
150 return type_ == TRANSLATION_ERROR;
151 }
152
153 void TranslateInfoBarDelegate::Translate() { 95 void TranslateInfoBarDelegate::Translate() {
154 const std::string& original_language_code = GetOriginalLanguageCode(); 96 const std::string& original_language_code = GetOriginalLanguageCode();
155 if (!tab_contents()->profile()->IsOffTheRecord()) { 97 if (!tab_contents()->profile()->IsOffTheRecord()) {
156 prefs_.ResetTranslationDeniedCount(original_language_code); 98 prefs_.ResetTranslationDeniedCount(original_language_code);
157 prefs_.IncrementTranslationAcceptedCount(original_language_code); 99 prefs_.IncrementTranslationAcceptedCount(original_language_code);
158 } 100 }
159 101
160 TranslateManager::GetInstance()->TranslatePage( 102 TranslateManager::GetInstance()->TranslatePage(tab_contents_,
161 tab_contents_,
162 GetLanguageCodeAt(original_language_index()), 103 GetLanguageCodeAt(original_language_index()),
163 GetLanguageCodeAt(target_language_index())); 104 GetLanguageCodeAt(target_language_index()));
164 } 105 }
165 106
166 void TranslateInfoBarDelegate::RevertTranslation() { 107 void TranslateInfoBarDelegate::RevertTranslation() {
167 TranslateManager::GetInstance()->RevertTranslation(tab_contents_); 108 TranslateManager::GetInstance()->RevertTranslation(tab_contents_);
168 tab_contents_->RemoveInfoBar(this); 109 tab_contents_->RemoveInfoBar(this);
169 } 110 }
170 111
171 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { 112 void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
172 TranslateManager::GetInstance()-> 113 TranslateManager::GetInstance()->ReportLanguageDetectionError(tab_contents_);
173 ReportLanguageDetectionError(tab_contents_);
174 } 114 }
175 115
176 void TranslateInfoBarDelegate::TranslationDeclined() { 116 void TranslateInfoBarDelegate::TranslationDeclined() {
177 const std::string& original_language_code = GetOriginalLanguageCode(); 117 const std::string& original_language_code = GetOriginalLanguageCode();
178 if (!tab_contents()->profile()->IsOffTheRecord()) { 118 if (!tab_contents()->profile()->IsOffTheRecord()) {
179 prefs_.ResetTranslationAcceptedCount(original_language_code); 119 prefs_.ResetTranslationAcceptedCount(original_language_code);
180 prefs_.IncrementTranslationDeniedCount(original_language_code); 120 prefs_.IncrementTranslationDeniedCount(original_language_code);
181 } 121 }
182 122
183 // Remember that the user declined the translation so as to prevent showing a 123 // Remember that the user declined the translation so as to prevent showing a
184 // translate infobar for that page again. (TranslateManager initiates 124 // translate infobar for that page again. (TranslateManager initiates
185 // translations when getting a LANGUAGE_DETERMINED from the page, which 125 // translations when getting a LANGUAGE_DETERMINED from the page, which
186 // happens when a load stops. That could happen multiple times, including 126 // happens when a load stops. That could happen multiple times, including
187 // after the user already declined the translation.) 127 // after the user already declined the translation.)
188 tab_contents_->language_state().set_translation_declined(true); 128 tab_contents_->language_state().set_translation_declined(true);
189 } 129 }
190 130
191 void TranslateInfoBarDelegate::InfoBarDismissed() {
192 if (type_ != BEFORE_TRANSLATE)
193 return;
194
195 // The user closed the infobar without clicking the translate button.
196 TranslationDeclined();
197 UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslateCloseInfobar", 1);
198 }
199
200 void TranslateInfoBarDelegate::InfoBarClosed() {
201 delete this;
202 }
203
204 SkBitmap* TranslateInfoBarDelegate::GetIcon() const {
205 return ResourceBundle::GetSharedInstance().GetBitmapNamed(
206 IDR_INFOBAR_TRANSLATE);
207 }
208
209 InfoBarDelegate::Type TranslateInfoBarDelegate::GetInfoBarType() {
210 return InfoBarDelegate::PAGE_ACTION_TYPE;
211 }
212
213 TranslateInfoBarDelegate*
214 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
215 return this;
216 }
217
218
219 bool TranslateInfoBarDelegate::IsLanguageBlacklisted() { 131 bool TranslateInfoBarDelegate::IsLanguageBlacklisted() {
220 return prefs_.IsLanguageBlacklisted(GetOriginalLanguageCode()); 132 return prefs_.IsLanguageBlacklisted(GetOriginalLanguageCode());
221 } 133 }
222 134
223 void TranslateInfoBarDelegate::ToggleLanguageBlacklist() { 135 void TranslateInfoBarDelegate::ToggleLanguageBlacklist() {
224 const std::string& original_lang = GetOriginalLanguageCode(); 136 const std::string& original_lang = GetOriginalLanguageCode();
225 if (prefs_.IsLanguageBlacklisted(original_lang)) { 137 if (prefs_.IsLanguageBlacklisted(original_lang)) {
226 prefs_.RemoveLanguageFromBlacklist(original_lang); 138 prefs_.RemoveLanguageFromBlacklist(original_lang);
227 } else { 139 } else {
228 prefs_.BlacklistLanguage(original_lang); 140 prefs_.BlacklistLanguage(original_lang);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 } 183 }
272 184
273 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { 185 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() {
274 std::string original_lang = GetOriginalLanguageCode(); 186 std::string original_lang = GetOriginalLanguageCode();
275 DCHECK(!prefs_.IsLanguageBlacklisted(original_lang)); 187 DCHECK(!prefs_.IsLanguageBlacklisted(original_lang));
276 prefs_.BlacklistLanguage(original_lang); 188 prefs_.BlacklistLanguage(original_lang);
277 tab_contents_->RemoveInfoBar(this); 189 tab_contents_->RemoveInfoBar(this);
278 } 190 }
279 191
280 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { 192 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
281 switch (type_) { 193 if (type_ == TRANSLATING) {
282 case TRANSLATING: 194 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO,
195 GetLanguageDisplayableNameAt(target_language_index_));
196 }
197
198 DCHECK_EQ(TRANSLATION_ERROR, type_);
199 switch (error_) {
200 case TranslateErrors::NETWORK:
201 return l10n_util::GetStringUTF16(
202 IDS_TRANSLATE_INFOBAR_ERROR_CANT_CONNECT);
203 case TranslateErrors::INITIALIZATION_ERROR:
204 case TranslateErrors::TRANSLATION_ERROR:
205 return l10n_util::GetStringUTF16(
206 IDS_TRANSLATE_INFOBAR_ERROR_CANT_TRANSLATE);
207 case TranslateErrors::UNKNOWN_LANGUAGE:
208 return l10n_util::GetStringUTF16(
209 IDS_TRANSLATE_INFOBAR_UNKNOWN_PAGE_LANGUAGE);
210 case TranslateErrors::UNSUPPORTED_LANGUAGE:
283 return l10n_util::GetStringFUTF16( 211 return l10n_util::GetStringFUTF16(
284 IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, 212 IDS_TRANSLATE_INFOBAR_UNSUPPORTED_PAGE_LANGUAGE,
285 GetLanguageDisplayableNameAt(target_language_index_)); 213 GetLanguageDisplayableNameAt(target_language_index_));
286 case TRANSLATION_ERROR: 214 case TranslateErrors::IDENTICAL_LANGUAGES:
287 switch (error_) { 215 return l10n_util::GetStringFUTF16(
288 case TranslateErrors::NETWORK: 216 IDS_TRANSLATE_INFOBAR_ERROR_SAME_LANGUAGE,
289 return l10n_util::GetStringUTF16( 217 GetLanguageDisplayableNameAt(target_language_index_));
290 IDS_TRANSLATE_INFOBAR_ERROR_CANT_CONNECT);
291 case TranslateErrors::INITIALIZATION_ERROR:
292 case TranslateErrors::TRANSLATION_ERROR:
293 return l10n_util::GetStringUTF16(
294 IDS_TRANSLATE_INFOBAR_ERROR_CANT_TRANSLATE);
295 case TranslateErrors::UNKNOWN_LANGUAGE:
296 return l10n_util::GetStringUTF16(
297 IDS_TRANSLATE_INFOBAR_UNKNOWN_PAGE_LANGUAGE);
298 case TranslateErrors::UNSUPPORTED_LANGUAGE:
299 return l10n_util::GetStringFUTF16(
300 IDS_TRANSLATE_INFOBAR_UNSUPPORTED_PAGE_LANGUAGE,
301 GetLanguageDisplayableNameAt(target_language_index_));
302 case TranslateErrors::IDENTICAL_LANGUAGES:
303 return l10n_util::GetStringFUTF16(
304 IDS_TRANSLATE_INFOBAR_ERROR_SAME_LANGUAGE,
305 GetLanguageDisplayableNameAt(target_language_index_));
306 default:
307 NOTREACHED();
308 return string16();
309 }
310 default: 218 default:
311 NOTREACHED(); 219 NOTREACHED();
312 return string16(); 220 return string16();
313 } 221 }
314 } 222 }
315 223
316 string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() { 224 string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() {
317 switch (type_) { 225 if (type_ != TRANSLATION_ERROR) {
318 case TRANSLATING: 226 DCHECK_EQ(TRANSLATING, type_);
319 return string16(); 227 } else if ((error_ != TranslateErrors::IDENTICAL_LANGUAGES) &&
320 case TRANSLATION_ERROR: 228 (error_ != TranslateErrors::UNKNOWN_LANGUAGE)) {
321 if (error_ == TranslateErrors::IDENTICAL_LANGUAGES || 229 return l10n_util::GetStringUTF16(
322 error_ == TranslateErrors::UNKNOWN_LANGUAGE) { 230 (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) ?
323 // No retry button, we would fail again with the same error. 231 IDS_TRANSLATE_INFOBAR_REVERT : IDS_TRANSLATE_INFOBAR_RETRY);
324 return string16();
325 }
326 if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE)
327 return l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT);
328 return l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_RETRY);
329 default:
330 NOTREACHED();
331 return string16();
332 } 232 }
233 return string16();
333 } 234 }
334 235
335 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() { 236 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() {
336 DCHECK(type_ == TRANSLATION_ERROR); 237 DCHECK_EQ(TRANSLATION_ERROR, type_);
337 if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) { 238 if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) {
338 RevertTranslation(); 239 RevertTranslation();
339 return; 240 return;
340 } 241 }
341 // This is the "Try again..." case. 242 // This is the "Try again..." case.
342 TranslateManager::GetInstance()->TranslatePage( 243 TranslateManager::GetInstance()->TranslatePage(tab_contents_,
343 tab_contents_, GetOriginalLanguageCode(), GetTargetLanguageCode()); 244 GetOriginalLanguageCode(), GetTargetLanguageCode());
344 } 245 }
345 246
346 bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() { 247 bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() {
347 return !GetMessageInfoBarButtonText().empty(); 248 return !GetMessageInfoBarButtonText().empty();
348 } 249 }
349 250
350 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateButton() { 251 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateButton() {
351 DCHECK(type_ == BEFORE_TRANSLATE); 252 DCHECK_EQ(BEFORE_TRANSLATE, type_);
352 if (tab_contents()->profile()->IsOffTheRecord()) 253 return !tab_contents()->profile()->IsOffTheRecord() &&
353 return false; 254 (prefs_.GetTranslationDeniedCount(GetOriginalLanguageCode()) >= 3);
354 return prefs_.GetTranslationDeniedCount(GetOriginalLanguageCode()) >= 3;
355 } 255 }
356 256
357 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateButton() { 257 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateButton() {
358 DCHECK(type_ == BEFORE_TRANSLATE); 258 DCHECK_EQ(BEFORE_TRANSLATE, type_);
359 if (tab_contents()->profile()->IsOffTheRecord()) 259 return !tab_contents()->profile()->IsOffTheRecord() &&
360 return false; 260 (prefs_.GetTranslationAcceptedCount(GetOriginalLanguageCode()) >= 3);
361 return prefs_.GetTranslationAcceptedCount(GetOriginalLanguageCode()) >= 3;
362 } 261 }
363 262
364 void TranslateInfoBarDelegate::UpdateBackgroundAnimation( 263 void TranslateInfoBarDelegate::UpdateBackgroundAnimation(
365 TranslateInfoBarDelegate* previous_infobar) { 264 TranslateInfoBarDelegate* previous_infobar) {
366 if (!previous_infobar || previous_infobar->IsError() == IsError()) { 265 if (!previous_infobar || previous_infobar->IsError() == IsError())
367 background_animation_ = NONE; 266 background_animation_ = NONE;
368 return; 267 else
369 } 268 background_animation_ = IsError() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
370 background_animation_ = IsError() ? NORMAL_TO_ERROR: ERROR_TO_NORMAL;
371 }
372
373 std::string TranslateInfoBarDelegate::GetPageHost() {
374 NavigationEntry* entry = tab_contents_->controller().GetActiveEntry();
375 return entry ? entry->url().HostNoBrackets() : std::string();
376 } 269 }
377 270
378 // static 271 // static
379 string16 TranslateInfoBarDelegate::GetLanguageDisplayableName( 272 string16 TranslateInfoBarDelegate::GetLanguageDisplayableName(
380 const std::string& language_code) { 273 const std::string& language_code) {
381 return l10n_util::GetDisplayNameForLocale( 274 return l10n_util::GetDisplayNameForLocale(
382 language_code, g_browser_process->GetApplicationLocale(), true); 275 language_code, g_browser_process->GetApplicationLocale(), true);
383 } 276 }
384 277
385 // static 278 // static
386 void TranslateInfoBarDelegate::GetAfterTranslateStrings( 279 void TranslateInfoBarDelegate::GetAfterTranslateStrings(
387 std::vector<string16>* strings, bool* swap_languages) { 280 std::vector<string16>* strings, bool* swap_languages) {
388 DCHECK(strings); 281 DCHECK(strings);
389 DCHECK(swap_languages); 282 DCHECK(swap_languages);
390 283
391 std::vector<size_t> offsets; 284 std::vector<size_t> offsets;
392 string16 text = 285 string16 text =
393 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_AFTER_MESSAGE, 286 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_AFTER_MESSAGE,
394 string16(), string16(), &offsets); 287 string16(), string16(), &offsets);
395 DCHECK(offsets.size() == 2U); 288 DCHECK_EQ(2U, offsets.size());
396 289
397 if (offsets[0] > offsets[1]) { 290 *swap_languages = (offsets[0] > offsets[1]);
398 // Target language comes before source. 291 if (*swap_languages)
399 std::swap(offsets[0], offsets[1]); 292 std::swap(offsets[0], offsets[1]);
400 *swap_languages = true;
401 } else {
402 *swap_languages = false;
403 }
404 293
405 strings->push_back(text.substr(0, offsets[0])); 294 strings->push_back(text.substr(0, offsets[0]));
406 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0])); 295 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0]));
407 strings->push_back(text.substr(offsets[1])); 296 strings->push_back(text.substr(offsets[1]));
408 } 297 }
298
299 TranslateInfoBarDelegate::TranslateInfoBarDelegate(
300 Type type,
301 TranslateErrors::Type error,
302 TabContents* tab_contents,
303 const std::string& original_language,
304 const std::string& target_language)
305 : InfoBarDelegate(tab_contents),
306 type_(type),
307 background_animation_(NONE),
308 tab_contents_(tab_contents),
309 original_language_index_(-1),
310 initial_original_language_index_(-1),
311 target_language_index_(-1),
312 error_(error),
313 infobar_view_(NULL),
314 prefs_(tab_contents_->profile()->GetPrefs()) {
315 DCHECK_NE((type_ == TRANSLATION_ERROR), (error == TranslateErrors::NONE));
316
317 std::vector<std::string> language_codes;
318 TranslateManager::GetSupportedLanguages(&language_codes);
319
320 languages_.reserve(language_codes.size());
321 for (std::vector<std::string>::const_iterator iter = language_codes.begin();
322 iter != language_codes.end(); ++iter) {
323 std::string language_code = *iter;
324
325 string16 language_name = GetLanguageDisplayableName(language_code);
326 // Insert the language in languages_ in alphabetical order.
327 std::vector<LanguageNamePair>::iterator iter2;
328 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) {
329 if (language_name.compare(iter2->second) < 0)
330 break;
331 }
332 languages_.insert(iter2, LanguageNamePair(language_code, language_name));
333 }
334 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
335 iter != languages_.end(); ++iter) {
336 std::string language_code = iter->first;
337 if (language_code == original_language) {
338 original_language_index_ = iter - languages_.begin();
339 initial_original_language_index_ = original_language_index_;
340 }
341 if (language_code == target_language)
342 target_language_index_ = iter - languages_.begin();
343 }
344 }
345
346 void TranslateInfoBarDelegate::InfoBarDismissed() {
347 if (type_ != BEFORE_TRANSLATE)
348 return;
349
350 // The user closed the infobar without clicking the translate button.
351 TranslationDeclined();
352 UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslateCloseInfobar", 1);
353 }
354
355 void TranslateInfoBarDelegate::InfoBarClosed() {
356 delete this;
357 }
358
359 SkBitmap* TranslateInfoBarDelegate::GetIcon() const {
360 return ResourceBundle::GetSharedInstance().GetBitmapNamed(
361 IDR_INFOBAR_TRANSLATE);
362 }
363
364 InfoBarDelegate::Type TranslateInfoBarDelegate::GetInfoBarType() const {
365 return InfoBarDelegate::PAGE_ACTION_TYPE;
366 }
367
368 TranslateInfoBarDelegate*
369 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
370 return this;
371 }
372
373 std::string TranslateInfoBarDelegate::GetPageHost() {
374 NavigationEntry* entry = tab_contents_->controller().GetActiveEntry();
375 return entry ? entry->url().HostNoBrackets() : std::string();
376 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_infobar_delegate.h ('k') | chrome/browser/translate/translate_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698