Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Unified Diff: chrome/browser/ui/cocoa/translate/translate_infobar_base.mm

Issue 7981045: Make infobars ignore button clicks when closing. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698