Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: chrome/browser/translate/translate_infobar_delegate.cc

Issue 11644059: Change infobar creation to use a public static Create() method on the infobar delegate classes. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/translate/translate_infobar_delegate.h ('k') | chrome/browser/translate/translate_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « chrome/browser/translate/translate_infobar_delegate.h ('k') | chrome/browser/translate/translate_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698