OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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/i18n/string_compare.h" | 9 #include "base/i18n/string_compare.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
11 #include "base/prefs/pref_service.h" | 11 #include "base/prefs/pref_service.h" |
12 #include "chrome/browser/infobars/infobar_service.h" | |
13 #include "components/infobars/core/infobar.h" | 12 #include "components/infobars/core/infobar.h" |
| 13 #include "components/infobars/core/infobar_manager.h" |
14 #include "components/translate/core/browser/language_state.h" | 14 #include "components/translate/core/browser/language_state.h" |
15 #include "components/translate/core/browser/translate_accept_languages.h" | 15 #include "components/translate/core/browser/translate_accept_languages.h" |
16 #include "components/translate/core/browser/translate_client.h" | 16 #include "components/translate/core/browser/translate_client.h" |
17 #include "components/translate/core/browser/translate_download_manager.h" | 17 #include "components/translate/core/browser/translate_download_manager.h" |
18 #include "components/translate/core/browser/translate_driver.h" | 18 #include "components/translate/core/browser/translate_driver.h" |
19 #include "components/translate/core/browser/translate_manager.h" | 19 #include "components/translate/core/browser/translate_manager.h" |
20 #include "components/translate/core/common/translate_constants.h" | 20 #include "components/translate/core/common/translate_constants.h" |
21 #include "content/public/browser/web_contents.h" | |
22 #include "grit/component_strings.h" | 21 #include "grit/component_strings.h" |
23 #include "grit/theme_resources.h" | 22 #include "grit/theme_resources.h" |
24 #include "third_party/icu/source/i18n/unicode/coll.h" | 23 #include "third_party/icu/source/i18n/unicode/coll.h" |
25 #include "ui/base/l10n/l10n_util.h" | 24 #include "ui/base/l10n/l10n_util.h" |
26 | 25 |
27 namespace { | 26 namespace { |
28 | 27 |
29 // Counts used to decide whether infobars should be shown. | 28 // Counts used to decide whether infobars should be shown. |
30 // Android and iOS implementations do not offer a drop down (for space reasons), | 29 // Android and iOS implementations do not offer a drop down (for space reasons), |
31 // so we are more aggressive about showing the shortcut to never translate. | 30 // so we are more aggressive about showing the shortcut to never translate. |
(...skipping 16 matching lines...) Expand all Loading... |
48 | 47 |
49 const size_t TranslateInfoBarDelegate::kNoIndex = TranslateUIDelegate::NO_INDEX; | 48 const size_t TranslateInfoBarDelegate::kNoIndex = TranslateUIDelegate::NO_INDEX; |
50 | 49 |
51 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() { | 50 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() { |
52 } | 51 } |
53 | 52 |
54 // static | 53 // static |
55 void TranslateInfoBarDelegate::Create( | 54 void TranslateInfoBarDelegate::Create( |
56 bool replace_existing_infobar, | 55 bool replace_existing_infobar, |
57 const base::WeakPtr<TranslateManager>& translate_manager, | 56 const base::WeakPtr<TranslateManager>& translate_manager, |
58 InfoBarService* infobar_service, | 57 infobars::InfoBarManager* infobar_manager, |
59 bool is_off_the_record, | 58 bool is_off_the_record, |
60 translate::TranslateStep step, | 59 translate::TranslateStep step, |
61 const std::string& original_language, | 60 const std::string& original_language, |
62 const std::string& target_language, | 61 const std::string& target_language, |
63 TranslateErrors::Type error_type, | 62 TranslateErrors::Type error_type, |
64 PrefService* prefs, | 63 PrefService* prefs, |
65 bool triggered_from_menu) { | 64 bool triggered_from_menu) { |
66 DCHECK(translate_manager); | 65 DCHECK(translate_manager); |
67 DCHECK(infobar_service); | 66 DCHECK(infobar_manager); |
68 | 67 |
69 // Check preconditions. | 68 // Check preconditions. |
70 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) { | 69 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) { |
71 DCHECK(TranslateDownloadManager::IsSupportedLanguage(target_language)); | 70 DCHECK(TranslateDownloadManager::IsSupportedLanguage(target_language)); |
72 if (!TranslateDownloadManager::IsSupportedLanguage(original_language)) { | 71 if (!TranslateDownloadManager::IsSupportedLanguage(original_language)) { |
73 // The original language can only be "unknown" for the "translating" | 72 // The original language can only be "unknown" for the "translating" |
74 // infobar, which is the case when the user started a translation from the | 73 // infobar, which is the case when the user started a translation from the |
75 // context menu. | 74 // context menu. |
76 DCHECK(step == translate::TRANSLATE_STEP_TRANSLATING || | 75 DCHECK(step == translate::TRANSLATE_STEP_TRANSLATING || |
77 step == translate::TRANSLATE_STEP_AFTER_TRANSLATE); | 76 step == translate::TRANSLATE_STEP_AFTER_TRANSLATE); |
78 DCHECK_EQ(translate::kUnknownLanguageCode, original_language); | 77 DCHECK_EQ(translate::kUnknownLanguageCode, original_language); |
79 } | 78 } |
80 } | 79 } |
81 | 80 |
82 // Do not create the after translate infobar if we are auto translating. | 81 // Do not create the after translate infobar if we are auto translating. |
83 if (((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) || | 82 if (((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) || |
84 (step == translate::TRANSLATE_STEP_TRANSLATING)) && | 83 (step == translate::TRANSLATE_STEP_TRANSLATING)) && |
85 translate_manager->translate_client()->GetTranslateDriver() | 84 translate_manager->translate_client()->GetTranslateDriver() |
86 ->GetLanguageState().InTranslateNavigation()) { | 85 ->GetLanguageState().InTranslateNavigation()) { |
87 return; | 86 return; |
88 } | 87 } |
89 | 88 |
90 // Find any existing translate infobar delegate. | 89 // Find any existing translate infobar delegate. |
91 infobars::InfoBar* old_infobar = NULL; | 90 infobars::InfoBar* old_infobar = NULL; |
92 TranslateInfoBarDelegate* old_delegate = NULL; | 91 TranslateInfoBarDelegate* old_delegate = NULL; |
93 for (size_t i = 0; i < infobar_service->infobar_count(); ++i) { | 92 for (size_t i = 0; i < infobar_manager->infobar_count(); ++i) { |
94 old_infobar = infobar_service->infobar_at(i); | 93 old_infobar = infobar_manager->infobar_at(i); |
95 old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate(); | 94 old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate(); |
96 if (old_delegate) { | 95 if (old_delegate) { |
97 if (!replace_existing_infobar) | 96 if (!replace_existing_infobar) |
98 return; | 97 return; |
99 break; | 98 break; |
100 } | 99 } |
101 } | 100 } |
102 | 101 |
103 // Add the new delegate. | 102 // Add the new delegate. |
104 scoped_ptr<infobars::InfoBar> infobar(CreateInfoBar( | 103 scoped_ptr<infobars::InfoBar> infobar(CreateInfoBar( |
105 scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate( | 104 scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate( |
106 translate_manager, is_off_the_record, step, old_delegate, | 105 translate_manager, is_off_the_record, step, old_delegate, |
107 original_language, target_language, error_type, prefs, | 106 original_language, target_language, error_type, prefs, |
108 triggered_from_menu)))); | 107 triggered_from_menu)))); |
109 if (old_delegate) | 108 if (old_delegate) |
110 infobar_service->ReplaceInfoBar(old_infobar, infobar.Pass()); | 109 infobar_manager->ReplaceInfoBar(old_infobar, infobar.Pass()); |
111 else | 110 else |
112 infobar_service->AddInfoBar(infobar.Pass()); | 111 infobar_manager->AddInfoBar(infobar.Pass()); |
113 } | 112 } |
114 | 113 |
115 | 114 |
116 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex( | 115 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex( |
117 size_t language_index) { | 116 size_t language_index) { |
118 ui_delegate_.UpdateOriginalLanguageIndex(language_index); | 117 ui_delegate_.UpdateOriginalLanguageIndex(language_index); |
119 } | 118 } |
120 | 119 |
121 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex( | 120 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex( |
122 size_t language_index) { | 121 size_t language_index) { |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 kNeverTranslateMinCount); | 264 kNeverTranslateMinCount); |
266 } | 265 } |
267 | 266 |
268 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateShortcut() { | 267 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateShortcut() { |
269 DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_); | 268 DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_); |
270 return !is_off_the_record_ && | 269 return !is_off_the_record_ && |
271 (prefs_->GetTranslationAcceptedCount(original_language_code()) >= | 270 (prefs_->GetTranslationAcceptedCount(original_language_code()) >= |
272 kAlwaysTranslateMinCount); | 271 kAlwaysTranslateMinCount); |
273 } | 272 } |
274 | 273 |
275 content::WebContents* TranslateInfoBarDelegate::GetWebContents() { | |
276 return InfoBarService::WebContentsFromInfoBar(infobar()); | |
277 } | |
278 | |
279 // static | 274 // static |
280 void TranslateInfoBarDelegate::GetAfterTranslateStrings( | 275 void TranslateInfoBarDelegate::GetAfterTranslateStrings( |
281 std::vector<base::string16>* strings, | 276 std::vector<base::string16>* strings, |
282 bool* swap_languages, | 277 bool* swap_languages, |
283 bool autodetermined_source_language) { | 278 bool autodetermined_source_language) { |
284 DCHECK(strings); | 279 DCHECK(strings); |
285 | 280 |
286 if (autodetermined_source_language) { | 281 if (autodetermined_source_language) { |
287 size_t offset; | 282 size_t offset; |
288 base::string16 text = l10n_util::GetStringFUTF16( | 283 base::string16 text = l10n_util::GetStringFUTF16( |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 if (!details.is_navigation_to_different_page && !details.is_main_frame) | 371 if (!details.is_navigation_to_different_page && !details.is_main_frame) |
377 return false; | 372 return false; |
378 | 373 |
379 return infobars::InfoBarDelegate::ShouldExpireInternal(details); | 374 return infobars::InfoBarDelegate::ShouldExpireInternal(details); |
380 } | 375 } |
381 | 376 |
382 TranslateInfoBarDelegate* | 377 TranslateInfoBarDelegate* |
383 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { | 378 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { |
384 return this; | 379 return this; |
385 } | 380 } |
OLD | NEW |