OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/translate/core/browser/translate_infobar_delegate.h" | 5 #include "components/translate/core/browser/translate_infobar_delegate.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/feature_list.h" | 10 #include "base/feature_list.h" |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 return; | 94 return; |
95 } | 95 } |
96 | 96 |
97 // Find any existing translate infobar delegate. | 97 // Find any existing translate infobar delegate. |
98 infobars::InfoBar* old_infobar = NULL; | 98 infobars::InfoBar* old_infobar = NULL; |
99 TranslateInfoBarDelegate* old_delegate = NULL; | 99 TranslateInfoBarDelegate* old_delegate = NULL; |
100 for (size_t i = 0; i < infobar_manager->infobar_count(); ++i) { | 100 for (size_t i = 0; i < infobar_manager->infobar_count(); ++i) { |
101 old_infobar = infobar_manager->infobar_at(i); | 101 old_infobar = infobar_manager->infobar_at(i); |
102 old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate(); | 102 old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate(); |
103 if (old_delegate) { | 103 if (old_delegate) { |
104 if (!replace_existing_infobar || IsCompactUIEnabled()) | 104 if (!replace_existing_infobar) |
105 return; | 105 return; |
106 break; | 106 break; |
107 } | 107 } |
108 } | 108 } |
109 | 109 |
| 110 // Try to reuse existing translate infobar delegate. |
| 111 if (old_delegate && old_delegate->observer_) { |
| 112 old_delegate->observer_->OnTranslateStepChanged(step, error_type); |
| 113 return; |
| 114 } |
| 115 |
110 // Add the new delegate. | 116 // Add the new delegate. |
111 TranslateClient* translate_client = translate_manager->translate_client(); | 117 TranslateClient* translate_client = translate_manager->translate_client(); |
112 std::unique_ptr<infobars::InfoBar> infobar(translate_client->CreateInfoBar( | 118 std::unique_ptr<infobars::InfoBar> infobar(translate_client->CreateInfoBar( |
113 base::WrapUnique(new TranslateInfoBarDelegate( | 119 base::WrapUnique(new TranslateInfoBarDelegate( |
114 translate_manager, is_off_the_record, step, original_language, | 120 translate_manager, is_off_the_record, step, original_language, |
115 target_language, error_type, triggered_from_menu)))); | 121 target_language, error_type, triggered_from_menu)))); |
116 if (old_delegate) | 122 if (old_delegate) |
117 infobar_manager->ReplaceInfoBar(old_infobar, std::move(infobar)); | 123 infobar_manager->ReplaceInfoBar(old_infobar, std::move(infobar)); |
118 else | 124 else |
119 infobar_manager->AddInfoBar(std::move(infobar)); | 125 infobar_manager->AddInfoBar(std::move(infobar)); |
120 } | 126 } |
121 | 127 |
122 // static | 128 // static |
123 bool TranslateInfoBarDelegate::IsCompactUIEnabled() { | 129 bool TranslateInfoBarDelegate::IsCompactUIEnabled() { |
124 return base::FeatureList::IsEnabled(kTranslateCompactUI); | 130 return base::FeatureList::IsEnabled(kTranslateCompactUI); |
125 } | 131 } |
126 | 132 |
| 133 void TranslateInfoBarDelegate::SetObserver(Observer* observer) { |
| 134 observer_ = observer; |
| 135 } |
| 136 |
127 void TranslateInfoBarDelegate::UpdateOriginalLanguage( | 137 void TranslateInfoBarDelegate::UpdateOriginalLanguage( |
128 const std::string& language_code) { | 138 const std::string& language_code) { |
129 ui_delegate_.UpdateOriginalLanguage(language_code); | 139 ui_delegate_.UpdateOriginalLanguage(language_code); |
130 } | 140 } |
131 | 141 |
132 void TranslateInfoBarDelegate::UpdateTargetLanguage( | 142 void TranslateInfoBarDelegate::UpdateTargetLanguage( |
133 const std::string& language_code) { | 143 const std::string& language_code) { |
134 ui_delegate_.UpdateTargetLanguage(language_code); | 144 ui_delegate_.UpdateTargetLanguage(language_code); |
135 } | 145 } |
136 | 146 |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 const std::string& target_language, | 364 const std::string& target_language, |
355 TranslateErrors::Type error_type, | 365 TranslateErrors::Type error_type, |
356 bool triggered_from_menu) | 366 bool triggered_from_menu) |
357 : infobars::InfoBarDelegate(), | 367 : infobars::InfoBarDelegate(), |
358 is_off_the_record_(is_off_the_record), | 368 is_off_the_record_(is_off_the_record), |
359 step_(step), | 369 step_(step), |
360 ui_delegate_(translate_manager, original_language, target_language), | 370 ui_delegate_(translate_manager, original_language, target_language), |
361 translate_manager_(translate_manager), | 371 translate_manager_(translate_manager), |
362 error_type_(error_type), | 372 error_type_(error_type), |
363 prefs_(translate_manager->translate_client()->GetTranslatePrefs()), | 373 prefs_(translate_manager->translate_client()->GetTranslatePrefs()), |
364 triggered_from_menu_(triggered_from_menu) { | 374 triggered_from_menu_(triggered_from_menu), |
| 375 observer_(nullptr) { |
365 DCHECK_NE((step_ == translate::TRANSLATE_STEP_TRANSLATE_ERROR), | 376 DCHECK_NE((step_ == translate::TRANSLATE_STEP_TRANSLATE_ERROR), |
366 (error_type_ == TranslateErrors::NONE)); | 377 (error_type_ == TranslateErrors::NONE)); |
367 DCHECK(translate_manager_); | 378 DCHECK(translate_manager_); |
368 } | 379 } |
369 | 380 |
370 infobars::InfoBarDelegate::Type | 381 infobars::InfoBarDelegate::Type |
371 TranslateInfoBarDelegate::GetInfoBarType() const { | 382 TranslateInfoBarDelegate::GetInfoBarType() const { |
372 return PAGE_ACTION_TYPE; | 383 return PAGE_ACTION_TYPE; |
373 } | 384 } |
374 | 385 |
375 int TranslateInfoBarDelegate::GetIconId() const { | 386 int TranslateInfoBarDelegate::GetIconId() const { |
376 return translate_manager_->translate_client()->GetInfobarIconID(); | 387 return translate_manager_->translate_client()->GetInfobarIconID(); |
377 } | 388 } |
378 | 389 |
379 void TranslateInfoBarDelegate::InfoBarDismissed() { | 390 void TranslateInfoBarDelegate::InfoBarDismissed() { |
380 if (step_ != translate::TRANSLATE_STEP_BEFORE_TRANSLATE) | 391 bool declined = observer_ |
381 return; | 392 ? observer_->IsDeclinedByUser() |
382 if (IsCompactUIEnabled()) | 393 : (step_ == translate::TRANSLATE_STEP_BEFORE_TRANSLATE); |
383 return; | 394 |
384 // The user closed the infobar without clicking the translate button. | 395 if (declined) { |
385 TranslationDeclined(); | 396 // The user closed the infobar without clicking the translate button. |
386 UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true); | 397 TranslationDeclined(); |
| 398 UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true); |
| 399 } |
387 } | 400 } |
388 | 401 |
389 TranslateInfoBarDelegate* | 402 TranslateInfoBarDelegate* |
390 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { | 403 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { |
391 return this; | 404 return this; |
392 } | 405 } |
393 | 406 |
394 } // namespace translate | 407 } // namespace translate |
OLD | NEW |