Index: components/translate/core/browser/translate_infobar_delegate.cc |
diff --git a/components/translate/core/browser/translate_infobar_delegate.cc b/components/translate/core/browser/translate_infobar_delegate.cc |
index 1ca24c8e7dda38048ce612f9df423a68aebf6bba..ae85203d0293284d0b694c2c2f095bc5ffeac273 100644 |
--- a/components/translate/core/browser/translate_infobar_delegate.cc |
+++ b/components/translate/core/browser/translate_infobar_delegate.cc |
@@ -101,12 +101,18 @@ void TranslateInfoBarDelegate::Create( |
old_infobar = infobar_manager->infobar_at(i); |
old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate(); |
if (old_delegate) { |
- if (!replace_existing_infobar || IsCompactUIEnabled()) |
+ if (!replace_existing_infobar) |
return; |
break; |
} |
} |
+ // Try to reuse existing translate infobar delegate. |
+ if (old_delegate && old_delegate->observer_) { |
+ old_delegate->observer_->OnTranslateStepChanged(step, error_type); |
+ return; |
+ } |
+ |
// Add the new delegate. |
TranslateClient* translate_client = translate_manager->translate_client(); |
std::unique_ptr<infobars::InfoBar> infobar(translate_client->CreateInfoBar( |
@@ -124,6 +130,10 @@ bool TranslateInfoBarDelegate::IsCompactUIEnabled() { |
return base::FeatureList::IsEnabled(kTranslateCompactUI); |
} |
+void TranslateInfoBarDelegate::SetObserver(Observer* observer) { |
+ observer_ = observer; |
+} |
+ |
void TranslateInfoBarDelegate::UpdateOriginalLanguage( |
const std::string& language_code) { |
ui_delegate_.UpdateOriginalLanguage(language_code); |
@@ -361,7 +371,8 @@ TranslateInfoBarDelegate::TranslateInfoBarDelegate( |
translate_manager_(translate_manager), |
error_type_(error_type), |
prefs_(translate_manager->translate_client()->GetTranslatePrefs()), |
- triggered_from_menu_(triggered_from_menu) { |
+ triggered_from_menu_(triggered_from_menu), |
+ observer_(nullptr) { |
DCHECK_NE((step_ == translate::TRANSLATE_STEP_TRANSLATE_ERROR), |
(error_type_ == TranslateErrors::NONE)); |
DCHECK(translate_manager_); |
@@ -377,13 +388,15 @@ int TranslateInfoBarDelegate::GetIconId() const { |
} |
void TranslateInfoBarDelegate::InfoBarDismissed() { |
- if (step_ != translate::TRANSLATE_STEP_BEFORE_TRANSLATE) |
- return; |
- if (IsCompactUIEnabled()) |
- return; |
- // The user closed the infobar without clicking the translate button. |
- TranslationDeclined(); |
- UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true); |
+ bool declined = observer_ |
+ ? observer_->IsDeclinedByUser() |
+ : (step_ == translate::TRANSLATE_STEP_BEFORE_TRANSLATE); |
+ |
+ if (declined) { |
+ // The user closed the infobar without clicking the translate button. |
+ TranslationDeclined(); |
+ UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true); |
+ } |
} |
TranslateInfoBarDelegate* |