| Index: chrome/browser/translate/translate_infobar_delegate.cc
|
| ===================================================================
|
| --- chrome/browser/translate/translate_infobar_delegate.cc (revision 238220)
|
| +++ chrome/browser/translate/translate_infobar_delegate.cc (working copy)
|
| @@ -10,6 +10,7 @@
|
| #include "base/metrics/histogram.h"
|
| #include "base/prefs/pref_service.h"
|
| #include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/infobars/infobar.h"
|
| #include "chrome/browser/infobars/infobar_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/translate/translate_accept_languages.h"
|
| @@ -58,16 +59,18 @@
|
| if ((infobar_type == TranslateInfoBarDelegate::AFTER_TRANSLATE) ||
|
| (infobar_type == TranslateInfoBarDelegate::TRANSLATING)) {
|
| TranslateTabHelper* translate_tab_helper =
|
| - TranslateTabHelper::FromWebContents(infobar_service->web_contents());
|
| + TranslateTabHelper::FromWebContents(infobar_service->web_contents());
|
| if (!translate_tab_helper ||
|
| - translate_tab_helper->language_state().InTranslateNavigation())
|
| + translate_tab_helper->language_state().InTranslateNavigation())
|
| return;
|
| }
|
|
|
| // Find any existing translate infobar delegate.
|
| + InfoBar* old_infobar = NULL;
|
| TranslateInfoBarDelegate* old_delegate = NULL;
|
| for (size_t i = 0; i < infobar_service->infobar_count(); ++i) {
|
| - old_delegate = infobar_service->infobar_at(i)->AsTranslateInfoBarDelegate();
|
| + old_infobar = infobar_service->infobar_at(i);
|
| + old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate();
|
| if (old_delegate) {
|
| if (!replace_existing_infobar)
|
| return;
|
| @@ -76,12 +79,12 @@
|
| }
|
|
|
| // Add the new delegate.
|
| - scoped_ptr<InfoBarDelegate> infobar(
|
| - new TranslateInfoBarDelegate(infobar_service, infobar_type, old_delegate,
|
| - original_language, target_language,
|
| - error_type, prefs, shortcut_config));
|
| + scoped_ptr<InfoBar> infobar(CreateInfoBar(
|
| + scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate(
|
| + infobar_type, old_delegate, original_language, target_language,
|
| + error_type, prefs, shortcut_config))));
|
| if (old_delegate)
|
| - infobar_service->ReplaceInfoBar(old_delegate, infobar.Pass());
|
| + infobar_service->ReplaceInfoBar(old_infobar, infobar.Pass());
|
| else
|
| infobar_service->AddInfoBar(infobar.Pass());
|
| }
|
| @@ -125,7 +128,7 @@
|
| TranslateManager::GetInstance()->RevertTranslation(web_contents());
|
| UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
|
| TranslateBrowserMetrics::UMA_REVERT_TRANSLATION), true);
|
| - RemoveSelf();
|
| + infobar()->RemoveSelf();
|
| }
|
|
|
| void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
|
| @@ -168,7 +171,7 @@
|
| TranslateTabHelper::FromWebContents(web_contents());
|
| DCHECK(translate_tab_helper);
|
| translate_tab_helper->language_state().SetTranslateEnabled(false);
|
| - RemoveSelf();
|
| + infobar()->RemoveSelf();
|
| }
|
|
|
| UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
|
| @@ -193,7 +196,7 @@
|
| TranslateTabHelper::FromWebContents(web_contents());
|
| DCHECK(translate_tab_helper);
|
| translate_tab_helper->language_state().SetTranslateEnabled(false);
|
| - RemoveSelf();
|
| + infobar()->RemoveSelf();
|
| }
|
|
|
| UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
|
| @@ -237,7 +240,7 @@
|
| UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
|
| TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
|
|
|
| - RemoveSelf();
|
| + infobar()->RemoveSelf();
|
| }
|
|
|
| string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
|
| @@ -359,7 +362,6 @@
|
| }
|
|
|
| TranslateInfoBarDelegate::TranslateInfoBarDelegate(
|
| - InfoBarService* infobar_service,
|
| Type infobar_type,
|
| TranslateInfoBarDelegate* old_delegate,
|
| const std::string& original_language,
|
| @@ -367,7 +369,7 @@
|
| TranslateErrors::Type error_type,
|
| PrefService* prefs,
|
| ShortcutConfiguration shortcut_config)
|
| - : InfoBarDelegate(infobar_service),
|
| + : InfoBarDelegate(),
|
| infobar_type_(infobar_type),
|
| background_animation_(NONE),
|
| original_language_index_(kNoIndex),
|
| @@ -394,6 +396,9 @@
|
| }
|
| }
|
|
|
| +// TranslateInfoBarDelegate::CreateInfoBar() is implemented in platform-specific
|
| +// files.
|
| +
|
| void TranslateInfoBarDelegate::InfoBarDismissed() {
|
| if (infobar_type_ != BEFORE_TRANSLATE)
|
| return;
|
|
|