Chromium Code Reviews| Index: chrome/browser/ui/cocoa/translate/translate_infobar_base.mm |
| =================================================================== |
| --- chrome/browser/ui/cocoa/translate/translate_infobar_base.mm (revision 102604) |
| +++ chrome/browser/ui/cocoa/translate/translate_infobar_base.mm (working copy) |
| @@ -108,26 +108,6 @@ |
| } // namespace TranslateInfoBarUtilities |
| -namespace { |
| - |
| -// Helper to close and disable popup menus when the infobar closes. |
| -// Disabling the popup button would cause a distracting visual change. |
| -void DisablePopUpMenu(NSMenu *menu) { |
| - // Remove the menu if visible. |
| - [menu cancelTracking]; |
| - |
| - // If the menu is re-opened, prevent queries to update items. |
| - [menu setDelegate:nil]; |
| - |
| - // Prevent target/action messages to the controller. |
| - for (NSMenuItem* item in [menu itemArray]) { |
| - [item setEnabled:NO]; |
| - [item setTarget:nil]; |
| - } |
| -} |
| - |
| -} // namespace |
| - |
| // TranslateInfoBarDelegate views specific method: |
| InfoBar* TranslateInfoBarDelegate::CreateInfoBar(TabContentsWrapper* owner) { |
| TranslateInfoBarControllerBase* infobar_controller = NULL; |
| @@ -492,9 +472,9 @@ |
| } |
| - (void)infobarWillClose { |
| - DisablePopUpMenu([fromLanguagePopUp_ menu]); |
| - DisablePopUpMenu([toLanguagePopUp_ menu]); |
| - DisablePopUpMenu([optionsPopUp_ menu]); |
| + [self disablePopUpMenu:[fromLanguagePopUp_ menu]]; |
| + [self disablePopUpMenu:[toLanguagePopUp_ menu]]; |
| + [self disablePopUpMenu:[optionsPopUp_ menu]]; |
| [super infobarWillClose]; |
| } |
| @@ -520,48 +500,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. |
|
Robert Sesek
2011/09/27 18:21:46
Remove these copy/pasted comments?
Peter Kasting
2011/09/27 18:29:34
Done.
|
| 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 +554,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 |