| Index: chrome/browser/translate/translate_infobar_delegate.cc
|
| ===================================================================
|
| --- chrome/browser/translate/translate_infobar_delegate.cc (revision 175396)
|
| +++ chrome/browser/translate/translate_infobar_delegate.cc (working copy)
|
| @@ -25,48 +25,51 @@
|
| // static
|
| const size_t TranslateInfoBarDelegate::kNoIndex = static_cast<size_t>(-1);
|
|
|
| -// static
|
| -TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateDelegate(
|
| - Type infobar_type,
|
| - InfoBarService* infobar_service,
|
| - PrefService* prefs,
|
| - const std::string& original_language,
|
| - const std::string& target_language) {
|
| - DCHECK_NE(TRANSLATION_ERROR, infobar_type);
|
| - // These must be validated by our callers.
|
| - DCHECK(TranslateManager::IsSupportedLanguage(target_language));
|
| - // The original language can only be "unknown" for the "translating"
|
| - // infobar, which is the case when the user started a translation from the
|
| - // context menu.
|
| - DCHECK(TranslateManager::IsSupportedLanguage(original_language) ||
|
| - ((infobar_type == TRANSLATING) &&
|
| - (original_language == chrome::kUnknownLanguageCode)));
|
| - TranslateInfoBarDelegate* delegate =
|
| - new TranslateInfoBarDelegate(infobar_type,
|
| - TranslateErrors::NONE,
|
| - infobar_service,
|
| - prefs,
|
| - original_language,
|
| - target_language);
|
| - DCHECK_NE(kNoIndex, delegate->target_language_index());
|
| - return delegate;
|
| +TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
|
| }
|
|
|
| -TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateErrorDelegate(
|
| - TranslateErrors::Type error_type,
|
| - InfoBarService* infobar_service,
|
| - PrefService* prefs,
|
| - const std::string& original_language,
|
| - const std::string& target_language) {
|
| - return new TranslateInfoBarDelegate(TRANSLATION_ERROR,
|
| - error_type,
|
| - infobar_service,
|
| - prefs,
|
| - original_language,
|
| - target_language);
|
| -}
|
| +// static
|
| +void TranslateInfoBarDelegate::Create(InfoBarService* infobar_service,
|
| + bool replace_existing_infobar,
|
| + Type infobar_type,
|
| + TranslateErrors::Type error_type,
|
| + PrefService* prefs,
|
| + const std::string& original_language,
|
| + const std::string& target_language) {
|
| + // Check preconditions.
|
| + if (infobar_type != TRANSLATION_ERROR) {
|
| + DCHECK(TranslateManager::IsSupportedLanguage(target_language));
|
| + if (!TranslateManager::IsSupportedLanguage(original_language)) {
|
| + // The original language can only be "unknown" for the "translating"
|
| + // infobar, which is the case when the user started a translation from the
|
| + // context menu.
|
| + DCHECK_EQ(TRANSLATING, infobar_type);
|
| + DCHECK_EQ(chrome::kUnknownLanguageCode, original_language);
|
| + }
|
| + }
|
|
|
| -TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
|
| + // Find any existing translate infobar delegate.
|
| + TranslateInfoBarDelegate* old_delegate = NULL;
|
| + for (size_t i = 0; i < infobar_service->GetInfoBarCount(); ++i) {
|
| + old_delegate =
|
| + infobar_service->GetInfoBarDelegateAt(i)->AsTranslateInfoBarDelegate();
|
| + if (old_delegate)
|
| + break;
|
| + }
|
| +
|
| + // Create the new delegate.
|
| + scoped_ptr<TranslateInfoBarDelegate> infobar(
|
| + new TranslateInfoBarDelegate(infobar_type, error_type, infobar_service,
|
| + prefs, original_language, target_language));
|
| + infobar->UpdateBackgroundAnimation(old_delegate);
|
| +
|
| + // Add the new delegate if necessary.
|
| + if (!old_delegate) {
|
| + infobar_service->AddInfoBar(infobar.PassAs<InfoBarDelegate>());
|
| + } else if (replace_existing_infobar) {
|
| + infobar_service->ReplaceInfoBar(old_delegate,
|
| + infobar.PassAs<InfoBarDelegate>());
|
| + }
|
| }
|
|
|
| void TranslateInfoBarDelegate::Translate() {
|
|
|