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