Index: chrome/browser/ui/views/infobars/before_translate_infobar.cc |
=================================================================== |
--- chrome/browser/ui/views/infobars/before_translate_infobar.cc (revision 65711) |
+++ chrome/browser/ui/views/infobars/before_translate_infobar.cc (working copy) |
@@ -33,13 +33,11 @@ |
AddChildView(label_2_); |
accept_button_ = |
- InfoBarTextButton::CreateWithMessageID(this, |
- IDS_TRANSLATE_INFOBAR_ACCEPT); |
+ InfoBarTextButton::CreateWithMessageID(this, IDS_TRANSLATE_INFOBAR_ACCEPT); |
AddChildView(accept_button_); |
deny_button_ = |
- InfoBarTextButton::CreateWithMessageID(this, |
- IDS_TRANSLATE_INFOBAR_DENY); |
+ InfoBarTextButton::CreateWithMessageID(this, IDS_TRANSLATE_INFOBAR_DENY); |
AddChildView(deny_button_); |
language_menu_button_ = CreateMenuButton(string16(), true, this); |
@@ -124,15 +122,21 @@ |
void BeforeTranslateInfoBar::ButtonPressed(views::Button* sender, |
const views::Event& event) { |
+ if (!delegate()) { |
+ TranslateInfoBarBase::ButtonPressed(sender, event); |
+ return; |
+ } |
+ |
+ TranslateInfoBarDelegate* delegate = GetDelegate(); |
if (sender == accept_button_) { |
- GetDelegate()->Translate(); |
+ delegate->Translate(); |
} else if (sender == deny_button_) { |
+ delegate->TranslationDeclined(); |
RemoveInfoBar(); |
- GetDelegate()->TranslationDeclined(); |
} else if (sender == never_translate_button_) { |
- GetDelegate()->NeverTranslatePageLanguage(); |
+ delegate->NeverTranslatePageLanguage(); |
} else if (sender == always_translate_button_) { |
- GetDelegate()->AlwaysTranslatePageLanguage(); |
+ delegate->AlwaysTranslatePageLanguage(); |
} else { |
TranslateInfoBarBase::ButtonPressed(sender, event); |
} |
@@ -148,6 +152,11 @@ |
void BeforeTranslateInfoBar::RunMenu(views::View* source, |
const gfx::Point& pt) { |
+ if (!delegate()) |
+ return; |
+ // TODO(pkasting): What if the InfoBarDelegate is closed while the menu is |
+ // open? Then the menu models may deref garbage delegate pointers. |
+ |
if (source == language_menu_button_) { |
if (!languages_menu_.get()) |
languages_menu_.reset(new views::Menu2(&languages_menu_model_)); |
@@ -162,6 +171,11 @@ |
} |
void BeforeTranslateInfoBar::UpdateOriginalButtonText() { |
+ // TODO(pkasting): Can this be reached during closing? If not we can |
+ // DCHECK(delegate()) instead. |
+ if (!delegate()) |
+ return; |
+ |
string16 language = GetDelegate()->GetLanguageDisplayableNameAt( |
GetDelegate()->original_language_index()); |
language_menu_button_->SetText(UTF16ToWideHack(language)); |