| 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));
|
|
|