Index: chrome/browser/ui/cocoa/translate/translate_infobar_base.mm |
=================================================================== |
--- chrome/browser/ui/cocoa/translate/translate_infobar_base.mm (revision 102206) |
+++ chrome/browser/ui/cocoa/translate/translate_infobar_base.mm (working copy) |
@@ -520,48 +520,43 @@ |
// Called when "Translate" button is clicked. |
- (IBAction)ok:(id)sender { |
- // The delegate may be NULL if the infobar was closed. |
+ if (![self owned]) |
+ return; // We're closing; don't call anything, it might access the owner. |
TranslateInfoBarDelegate* delegate = [self delegate]; |
- if (delegate) { |
- TranslateInfoBarDelegate::Type state = delegate->type(); |
- DCHECK(state == TranslateInfoBarDelegate::BEFORE_TRANSLATE || |
- state == TranslateInfoBarDelegate::TRANSLATION_ERROR); |
- delegate->Translate(); |
- } |
+ TranslateInfoBarDelegate::Type state = delegate->type(); |
+ DCHECK(state == TranslateInfoBarDelegate::BEFORE_TRANSLATE || |
+ state == TranslateInfoBarDelegate::TRANSLATION_ERROR); |
+ delegate->Translate(); |
UMA_HISTOGRAM_COUNTS("Translate.Translate", 1); |
} |
// Called when someone clicks on the "Nope" button. |
- (IBAction)cancel:(id)sender { |
- // The delegate may be NULL if the infobar was closed. |
+ if (![self owned]) |
+ return; // We're closing; don't call anything, it might access the owner. |
TranslateInfoBarDelegate* delegate = [self delegate]; |
- if (delegate) { |
- DCHECK(delegate->type() == TranslateInfoBarDelegate::BEFORE_TRANSLATE); |
- delegate->TranslationDeclined(); |
- UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslate", 1); |
- } |
- [super dismiss:nil]; |
+ DCHECK(delegate->type() == TranslateInfoBarDelegate::BEFORE_TRANSLATE); |
+ delegate->TranslationDeclined(); |
+ UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslate", 1); |
+ [super removeSelf]; |
} |
- (void)messageButtonPressed:(id)sender { |
- // The delegate may be NULL if the infobar was closed. |
- TranslateInfoBarDelegate* delegate = [self delegate]; |
- if (delegate) |
- delegate->MessageInfoBarButtonPressed(); |
+ if (![self owned]) |
+ return; // We're closing; don't call anything, it might access the owner. |
+ [self delegate]->MessageInfoBarButtonPressed(); |
} |
- (IBAction)showOriginal:(id)sender { |
- // The delegate may be NULL if the infobar was closed. |
- TranslateInfoBarDelegate* delegate = [self delegate]; |
- if (delegate) |
- delegate->RevertTranslation(); |
+ if (![self owned]) |
+ return; // We're closing; don't call anything, it might access the owner. |
+ [self delegate]->RevertTranslation(); |
} |
// Called when any of the language drop down menus are changed. |
- (void)languageMenuChanged:(id)item { |
- // The delegate may be NULL if the infobar was closed. |
- if (![self delegate]) |
- return; |
+ if (![self owned]) |
+ return; // We're closing; don't call anything, it might access the owner. |
if ([item respondsToSelector:@selector(tag)]) { |
int cmd = [item tag]; |
if (cmd >= IDC_TRANSLATE_TARGET_LANGUAGE_BASE) { |
@@ -579,6 +574,8 @@ |
// Called when the options menu is changed. |
- (void)optionsMenuChanged:(id)item { |
+ if (![self owned]) |
+ return; // We're closing; don't call anything, it might access the owner. |
if ([item respondsToSelector:@selector(tag)]) { |
int cmd = [item tag]; |
// Danger Will Robinson! : This call can release the infobar (e.g. invoking |