Index: trunk/src/chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm |
=================================================================== |
--- trunk/src/chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm (revision 238401) |
+++ trunk/src/chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm (working copy) |
@@ -27,13 +27,11 @@ |
using InfoBarUtilities::CreateLabel; |
using InfoBarUtilities::AddMenuItem; |
-// static |
-scoped_ptr<InfoBar> TranslateInfoBarDelegate::CreateInfoBar( |
- scoped_ptr<TranslateInfoBarDelegate> delegate) { |
- scoped_ptr<InfoBarCocoa> infobar( |
- new InfoBarCocoa(delegate.PassAs<InfoBarDelegate>())); |
+// TranslateInfoBarDelegate views specific method: |
+InfoBar* TranslateInfoBarDelegate::CreateInfoBar(InfoBarService* owner) { |
+ scoped_ptr<InfoBarCocoa> infobar(new InfoBarCocoa(owner, this)); |
base::scoped_nsobject<TranslateInfoBarControllerBase> infobar_controller; |
- switch (infobar->delegate()->AsTranslateInfoBarDelegate()->infobar_type()) { |
+ switch (infobar_type_) { |
case BEFORE_TRANSLATE: |
infobar_controller.reset([[BeforeTranslateInfobarController alloc] |
initWithInfoBar:infobar.get()]); |
@@ -51,7 +49,7 @@ |
NOTREACHED(); |
} |
infobar->set_controller(infobar_controller); |
- return infobar.PassAs<InfoBar>(); |
+ return infobar.release(); |
} |
@implementation TranslateInfoBarControllerBase (FrameChangeObserver) |
@@ -361,17 +359,12 @@ |
[self updateState]; |
} |
-- (void)infobarWillHide { |
- [[fromLanguagePopUp_ menu] cancelTracking]; |
- [[toLanguagePopUp_ menu] cancelTracking]; |
- [[optionsPopUp_ menu] cancelTracking]; |
- [super infobarWillHide]; |
-} |
- |
- (void)infobarWillClose { |
[self disablePopUpMenu:[fromLanguagePopUp_ menu]]; |
[self disablePopUpMenu:[toLanguagePopUp_ menu]]; |
[self disablePopUpMenu:[optionsPopUp_ menu]]; |
+ // [super infobarWillClose] clears the owner field which is relied on by the |
+ // notification handler, so remove the handler first. |
[[NSNotificationCenter defaultCenter] removeObserver:self]; |
[super infobarWillClose]; |
} |
@@ -465,6 +458,9 @@ |
} |
- (void)dealloc { |
+ // Perhaps this was removed as an observer in -infobarWillClose, but there's |
+ // no guarantee that that was the case. |
+ [[NSNotificationCenter defaultCenter] removeObserver:self]; |
[showOriginalButton_ setTarget:nil]; |
[translateMessageButton_ setTarget:nil]; |
[super dealloc]; |