From 8f5d9b53d113c26935205c71a128d055e60cd787 Mon Sep 17 00:00:00 2001 From: "kuan@chromium.org" Date: Fri, 26 Feb 2010 18:43:09 +0000 Subject: fix bug where translate infobar gets stuck at "Loading..." between switching tabs. - problem happened because infobars are destructed when switching between tabs, only the delegates persist. without the infobar to receive the PAGE_TRANSLATED notification to update the translate state, the infobar gets stuck at translating state when user switches back to the associated tab. - fix was to update the state in the infobar delegate on receiving PAGE_TRANSLATE notification so that when a new translate infobar is created, its visual display will reflect the updated after-translate state. BUG=36895 TEST=verify per bug report. Review URL: http://codereview.chromium.org/660187 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40135 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/views/infobars/translate_infobars.cc | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'chrome/browser/views/infobars') diff --git a/chrome/browser/views/infobars/translate_infobars.cc b/chrome/browser/views/infobars/translate_infobars.cc index 21482a2..1caedec 100644 --- a/chrome/browser/views/infobars/translate_infobars.cc +++ b/chrome/browser/views/infobars/translate_infobars.cc @@ -263,12 +263,6 @@ TranslateInfoBar::~TranslateInfoBar() { void TranslateInfoBar::UpdateState( TranslateInfoBarDelegate::TranslateState new_state) { - // If this is not a call for initialization (i.e. called from Constructor), - // only proceed with state has changed. - if (label_1_ && GetDelegate()->state() == new_state) - return; - GetDelegate()->UpdateState(new_state); - // Create and initialize state-dependent controls if necessary. switch (new_state) { case TranslateInfoBarDelegate::kAfterTranslate: @@ -599,8 +593,8 @@ void TranslateInfoBar::ExecuteCommand(int command_id) { void TranslateInfoBar::ButtonPressed( views::Button* sender, const views::Event& event) { if (sender == accept_button_) { - UpdateState(TranslateInfoBarDelegate::kTranslating); GetDelegate()->Translate(); + UpdateState(GetDelegate()->state()); } else if (sender == deny_button_) { GetDelegate()->TranslationDeclined(); RemoveInfoBar(); @@ -618,7 +612,9 @@ void TranslateInfoBar::Observe(NotificationType type, TabContents* tab = Source(source).ptr(); if (tab != GetDelegate()->tab_contents()) return; - UpdateState(TranslateInfoBarDelegate::kAfterTranslate); + if (!target_language_menu_button_ || + !target_language_menu_button_->IsVisible()) + UpdateState(TranslateInfoBarDelegate::kAfterTranslate); } // TranslateInfoBar, private: -------------------------------------------------- -- cgit v1.1