| 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*
|
|
|