OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "app/resource_bundle.h" | 10 #include "app/resource_bundle.h" |
11 #include "base/histogram.h" | 11 #include "base/histogram.h" |
12 #include "chrome/browser/browser_process.h" | 12 #include "chrome/browser/browser_process.h" |
13 #include "chrome/browser/profile.h" | 13 #include "chrome/browser/profile.h" |
14 #include "chrome/browser/tab_contents/tab_contents.h" | 14 #include "chrome/browser/tab_contents/tab_contents.h" |
15 #include "chrome/browser/translate/translate_infobar_view.h" | 15 #include "chrome/browser/translate/translate_infobar_view.h" |
16 #include "chrome/browser/translate/translate_manager.h" | 16 #include "chrome/browser/translate/translate_manager.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 | 19 |
20 // static | 20 // static |
21 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateDelegate( | 21 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateDelegate( |
22 Type type, | 22 Type type, |
23 TabContents* tab_contents, | 23 TabContents* tab_contents, |
24 const std::string& original_language, | 24 const std::string& original_language, |
25 const std::string& target_language) { | 25 const std::string& target_language) { |
26 DCHECK(type != kTranslationError); | 26 DCHECK(type != TRANSLATION_ERROR); |
27 if (!TranslateManager::IsSupportedLanguage(original_language) || | 27 if (!TranslateManager::IsSupportedLanguage(original_language) || |
28 !TranslateManager::IsSupportedLanguage(target_language)) { | 28 !TranslateManager::IsSupportedLanguage(target_language)) { |
29 return NULL; | 29 return NULL; |
30 } | 30 } |
31 TranslateInfoBarDelegate* delegate = | 31 TranslateInfoBarDelegate* delegate = |
32 new TranslateInfoBarDelegate(type, TranslateErrors::NONE, | 32 new TranslateInfoBarDelegate(type, TranslateErrors::NONE, |
33 tab_contents, | 33 tab_contents, |
34 original_language, target_language); | 34 original_language, target_language); |
35 DCHECK(delegate->original_language_index() != -1); | 35 DCHECK(delegate->original_language_index() != -1); |
36 DCHECK(delegate->target_language_index() != -1); | 36 DCHECK(delegate->target_language_index() != -1); |
37 return delegate; | 37 return delegate; |
38 } | 38 } |
39 | 39 |
40 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateErrorDelegate( | 40 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateErrorDelegate( |
41 TranslateErrors::Type error, | 41 TranslateErrors::Type error, |
42 TabContents* tab_contents, | 42 TabContents* tab_contents, |
43 const std::string& original_language, | 43 const std::string& original_language, |
44 const std::string& target_language) { | 44 const std::string& target_language) { |
45 return new TranslateInfoBarDelegate(kTranslationError, error, tab_contents, | 45 return new TranslateInfoBarDelegate(TRANSLATION_ERROR, error, tab_contents, |
46 original_language, target_language); | 46 original_language, target_language); |
47 } | 47 } |
48 | 48 |
49 TranslateInfoBarDelegate::TranslateInfoBarDelegate( | 49 TranslateInfoBarDelegate::TranslateInfoBarDelegate( |
50 Type type, | 50 Type type, |
51 TranslateErrors::Type error, | 51 TranslateErrors::Type error, |
52 TabContents* tab_contents, | 52 TabContents* tab_contents, |
53 const std::string& original_language, | 53 const std::string& original_language, |
54 const std::string& target_language) | 54 const std::string& target_language) |
55 : InfoBarDelegate(tab_contents), | 55 : InfoBarDelegate(tab_contents), |
56 type_(type), | 56 type_(type), |
57 background_animation_(kNone), | 57 background_animation_(NONE), |
58 tab_contents_(tab_contents), | 58 tab_contents_(tab_contents), |
59 original_language_index_(-1), | 59 original_language_index_(-1), |
60 initial_original_language_index_(-1), | 60 initial_original_language_index_(-1), |
61 target_language_index_(-1), | 61 target_language_index_(-1), |
62 error_(error), | 62 error_(error), |
63 infobar_view_(NULL), | 63 infobar_view_(NULL), |
64 prefs_(tab_contents_->profile()->GetPrefs()) { | 64 prefs_(tab_contents_->profile()->GetPrefs()) { |
65 DCHECK((type_ != kTranslationError && error == TranslateErrors::NONE) || | 65 DCHECK((type_ != TRANSLATION_ERROR && error == TranslateErrors::NONE) || |
66 (type_ == kTranslationError && error != TranslateErrors::NONE)); | 66 (type_ == TRANSLATION_ERROR && error != TranslateErrors::NONE)); |
67 | 67 |
68 std::vector<std::string> language_codes; | 68 std::vector<std::string> language_codes; |
69 TranslateManager::GetSupportedLanguages(&language_codes); | 69 TranslateManager::GetSupportedLanguages(&language_codes); |
70 | 70 |
71 languages_.reserve(language_codes.size()); | 71 languages_.reserve(language_codes.size()); |
72 for (std::vector<std::string>::const_iterator iter = language_codes.begin(); | 72 for (std::vector<std::string>::const_iterator iter = language_codes.begin(); |
73 iter != language_codes.end(); ++iter) { | 73 iter != language_codes.end(); ++iter) { |
74 std::string language_code = *iter; | 74 std::string language_code = *iter; |
75 | 75 |
76 string16 language_name = GetLanguageDisplayableName(language_code); | 76 string16 language_name = GetLanguageDisplayableName(language_code); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 | 116 |
117 std::string TranslateInfoBarDelegate::GetTargetLanguageCode() const { | 117 std::string TranslateInfoBarDelegate::GetTargetLanguageCode() const { |
118 return GetLanguageCodeAt(target_language_index()); | 118 return GetLanguageCodeAt(target_language_index()); |
119 } | 119 } |
120 | 120 |
121 void TranslateInfoBarDelegate::SetOriginalLanguage(int language_index) { | 121 void TranslateInfoBarDelegate::SetOriginalLanguage(int language_index) { |
122 DCHECK(language_index < static_cast<int>(languages_.size())); | 122 DCHECK(language_index < static_cast<int>(languages_.size())); |
123 original_language_index_ = language_index; | 123 original_language_index_ = language_index; |
124 if (infobar_view_) | 124 if (infobar_view_) |
125 infobar_view_->OriginalLanguageChanged(); | 125 infobar_view_->OriginalLanguageChanged(); |
126 if (type_ == kAfterTranslate) | 126 if (type_ == AFTER_TRANSLATE) |
127 Translate(); | 127 Translate(); |
128 } | 128 } |
129 | 129 |
130 void TranslateInfoBarDelegate::SetTargetLanguage(int language_index) { | 130 void TranslateInfoBarDelegate::SetTargetLanguage(int language_index) { |
131 DCHECK(language_index < static_cast<int>(languages_.size())); | 131 DCHECK(language_index < static_cast<int>(languages_.size())); |
132 target_language_index_ = language_index; | 132 target_language_index_ = language_index; |
133 if (infobar_view_) | 133 if (infobar_view_) |
134 infobar_view_->TargetLanguageChanged(); | 134 infobar_view_->TargetLanguageChanged(); |
135 if (type_ == kAfterTranslate) | 135 if (type_ == AFTER_TRANSLATE) |
136 Translate(); | 136 Translate(); |
137 } | 137 } |
138 | 138 |
139 bool TranslateInfoBarDelegate::IsError() { | 139 bool TranslateInfoBarDelegate::IsError() { |
140 return type_ == kTranslationError; | 140 return type_ == TRANSLATION_ERROR; |
141 } | 141 } |
142 | 142 |
143 void TranslateInfoBarDelegate::Translate() { | 143 void TranslateInfoBarDelegate::Translate() { |
144 const std::string& original_language_code = GetOriginalLanguageCode(); | 144 const std::string& original_language_code = GetOriginalLanguageCode(); |
145 prefs_.ResetTranslationDeniedCount(original_language_code); | 145 prefs_.ResetTranslationDeniedCount(original_language_code); |
146 prefs_.IncrementTranslationAcceptedCount(original_language_code); | 146 prefs_.IncrementTranslationAcceptedCount(original_language_code); |
147 | 147 |
148 Singleton<TranslateManager>::get()->TranslatePage( | 148 Singleton<TranslateManager>::get()->TranslatePage( |
149 tab_contents_, | 149 tab_contents_, |
150 GetLanguageCodeAt(original_language_index()), | 150 GetLanguageCodeAt(original_language_index()), |
(...skipping 17 matching lines...) Expand all Loading... |
168 | 168 |
169 // Remember that the user declined the translation so as to prevent showing a | 169 // Remember that the user declined the translation so as to prevent showing a |
170 // translate infobar for that page again. (TranslateManager initiates | 170 // translate infobar for that page again. (TranslateManager initiates |
171 // translations when getting a LANGUAGE_DETERMINED from the page, which | 171 // translations when getting a LANGUAGE_DETERMINED from the page, which |
172 // happens when a load stops. That could happen multiple times, including | 172 // happens when a load stops. That could happen multiple times, including |
173 // after the user already declined the translation.) | 173 // after the user already declined the translation.) |
174 tab_contents_->language_state().set_translation_declined(true); | 174 tab_contents_->language_state().set_translation_declined(true); |
175 } | 175 } |
176 | 176 |
177 void TranslateInfoBarDelegate::InfoBarDismissed() { | 177 void TranslateInfoBarDelegate::InfoBarDismissed() { |
178 if (type_ != kBeforeTranslate) | 178 if (type_ != BEFORE_TRANSLATE) |
179 return; | 179 return; |
180 | 180 |
181 // The user closed the infobar without clicking the translate button. | 181 // The user closed the infobar without clicking the translate button. |
182 TranslationDeclined(); | 182 TranslationDeclined(); |
183 UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslateCloseInfobar", 1); | 183 UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslateCloseInfobar", 1); |
184 } | 184 } |
185 | 185 |
186 void TranslateInfoBarDelegate::InfoBarClosed() { | 186 void TranslateInfoBarDelegate::InfoBarClosed() { |
187 delete this; | 187 delete this; |
188 } | 188 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 | 252 |
253 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { | 253 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { |
254 std::string original_lang = GetOriginalLanguageCode(); | 254 std::string original_lang = GetOriginalLanguageCode(); |
255 DCHECK(!prefs_.IsLanguageBlacklisted(original_lang)); | 255 DCHECK(!prefs_.IsLanguageBlacklisted(original_lang)); |
256 prefs_.BlacklistLanguage(original_lang); | 256 prefs_.BlacklistLanguage(original_lang); |
257 tab_contents_->RemoveInfoBar(this); | 257 tab_contents_->RemoveInfoBar(this); |
258 } | 258 } |
259 | 259 |
260 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { | 260 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { |
261 switch (type_) { | 261 switch (type_) { |
262 case kTranslating: | 262 case TRANSLATING: |
263 return l10n_util::GetStringFUTF16( | 263 return l10n_util::GetStringFUTF16( |
264 IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, | 264 IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, |
265 GetLanguageDisplayableNameAt(target_language_index_)); | 265 GetLanguageDisplayableNameAt(target_language_index_)); |
266 case kTranslationError: | 266 case TRANSLATION_ERROR: |
267 switch (error_) { | 267 switch (error_) { |
268 case TranslateErrors::NETWORK: | 268 case TranslateErrors::NETWORK: |
269 return l10n_util::GetStringUTF16( | 269 return l10n_util::GetStringUTF16( |
270 IDS_TRANSLATE_INFOBAR_ERROR_CANT_CONNECT); | 270 IDS_TRANSLATE_INFOBAR_ERROR_CANT_CONNECT); |
271 case TranslateErrors::INITIALIZATION_ERROR: | 271 case TranslateErrors::INITIALIZATION_ERROR: |
272 case TranslateErrors::TRANSLATION_ERROR: | 272 case TranslateErrors::TRANSLATION_ERROR: |
273 return l10n_util::GetStringUTF16( | 273 return l10n_util::GetStringUTF16( |
274 IDS_TRANSLATE_INFOBAR_ERROR_CANT_TRANSLATE); | 274 IDS_TRANSLATE_INFOBAR_ERROR_CANT_TRANSLATE); |
275 case TranslateErrors::UNKNOWN_LANGUAGE: | 275 case TranslateErrors::UNKNOWN_LANGUAGE: |
276 return l10n_util::GetStringUTF16( | 276 return l10n_util::GetStringUTF16( |
(...skipping 11 matching lines...) Expand all Loading... |
288 return string16(); | 288 return string16(); |
289 } | 289 } |
290 default: | 290 default: |
291 NOTREACHED(); | 291 NOTREACHED(); |
292 return string16(); | 292 return string16(); |
293 } | 293 } |
294 } | 294 } |
295 | 295 |
296 string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() { | 296 string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() { |
297 switch (type_) { | 297 switch (type_) { |
298 case kTranslating: | 298 case TRANSLATING: |
299 return string16(); | 299 return string16(); |
300 case kTranslationError: | 300 case TRANSLATION_ERROR: |
301 if (error_ == TranslateErrors::IDENTICAL_LANGUAGES || | 301 if (error_ == TranslateErrors::IDENTICAL_LANGUAGES || |
302 error_ == TranslateErrors::UNKNOWN_LANGUAGE) { | 302 error_ == TranslateErrors::UNKNOWN_LANGUAGE) { |
303 // No retry button, we would fail again with the same error. | 303 // No retry button, we would fail again with the same error. |
304 return string16(); | 304 return string16(); |
305 } | 305 } |
306 if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) | 306 if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) |
307 return l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT); | 307 return l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT); |
308 return l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_RETRY); | 308 return l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_RETRY); |
309 default: | 309 default: |
310 NOTREACHED(); | 310 NOTREACHED(); |
311 return string16(); | 311 return string16(); |
312 } | 312 } |
313 } | 313 } |
314 | 314 |
315 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() { | 315 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() { |
316 DCHECK(type_ == kTranslationError); | 316 DCHECK(type_ == TRANSLATION_ERROR); |
317 if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) { | 317 if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) { |
318 RevertTranslation(); | 318 RevertTranslation(); |
319 return; | 319 return; |
320 } | 320 } |
321 // This is the "Try again..." case. | 321 // This is the "Try again..." case. |
322 Singleton<TranslateManager>::get()->TranslatePage( | 322 Singleton<TranslateManager>::get()->TranslatePage( |
323 tab_contents_, GetOriginalLanguageCode(), GetTargetLanguageCode()); | 323 tab_contents_, GetOriginalLanguageCode(), GetTargetLanguageCode()); |
324 } | 324 } |
325 | 325 |
326 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateButton() { | 326 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateButton() { |
327 DCHECK(type_ == kBeforeTranslate); | 327 DCHECK(type_ == BEFORE_TRANSLATE); |
328 return prefs_.GetTranslationDeniedCount(GetOriginalLanguageCode()) >= 3; | 328 return prefs_.GetTranslationDeniedCount(GetOriginalLanguageCode()) >= 3; |
329 } | 329 } |
330 | 330 |
331 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateButton() { | 331 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateButton() { |
332 DCHECK(type_ == kBeforeTranslate); | 332 DCHECK(type_ == BEFORE_TRANSLATE); |
333 return prefs_.GetTranslationAcceptedCount(GetOriginalLanguageCode()) >= 3; | 333 return prefs_.GetTranslationAcceptedCount(GetOriginalLanguageCode()) >= 3; |
334 } | 334 } |
335 | 335 |
336 void TranslateInfoBarDelegate::UpdateBackgroundAnimation( | 336 void TranslateInfoBarDelegate::UpdateBackgroundAnimation( |
337 TranslateInfoBarDelegate* previous_infobar) { | 337 TranslateInfoBarDelegate* previous_infobar) { |
338 if (!previous_infobar || previous_infobar->IsError() == IsError()) { | 338 if (!previous_infobar || previous_infobar->IsError() == IsError()) { |
339 background_animation_ = kNone; | 339 background_animation_ = NONE; |
340 return; | 340 return; |
341 } | 341 } |
342 background_animation_ = IsError() ? kNormalToError: kErrorToNormal; | 342 background_animation_ = IsError() ? NORMAL_TO_ERROR: ERROR_TO_NORMAL; |
343 } | 343 } |
344 | 344 |
345 std::string TranslateInfoBarDelegate::GetPageHost() { | 345 std::string TranslateInfoBarDelegate::GetPageHost() { |
346 NavigationEntry* entry = tab_contents_->controller().GetActiveEntry(); | 346 NavigationEntry* entry = tab_contents_->controller().GetActiveEntry(); |
347 return entry ? entry->url().HostNoBrackets() : std::string(); | 347 return entry ? entry->url().HostNoBrackets() : std::string(); |
348 } | 348 } |
349 | 349 |
350 // static | 350 // static |
351 string16 TranslateInfoBarDelegate::GetLanguageDisplayableName( | 351 string16 TranslateInfoBarDelegate::GetLanguageDisplayableName( |
352 const std::string& language_code) { | 352 const std::string& language_code) { |
(...skipping 18 matching lines...) Expand all Loading... |
371 std::swap(offsets[0], offsets[1]); | 371 std::swap(offsets[0], offsets[1]); |
372 *swap_languages = true; | 372 *swap_languages = true; |
373 } else { | 373 } else { |
374 *swap_languages = false; | 374 *swap_languages = false; |
375 } | 375 } |
376 | 376 |
377 strings->push_back(text.substr(0, offsets[0])); | 377 strings->push_back(text.substr(0, offsets[0])); |
378 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0])); | 378 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0])); |
379 strings->push_back(text.substr(offsets[1])); | 379 strings->push_back(text.substr(offsets[1])); |
380 } | 380 } |
OLD | NEW |