| Index: chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm
 | 
| ===================================================================
 | 
| --- chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm	(revision 238220)
 | 
| +++ chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm	(working copy)
 | 
| @@ -27,11 +27,13 @@
 | 
|  using InfoBarUtilities::CreateLabel;
 | 
|  using InfoBarUtilities::AddMenuItem;
 | 
|  
 | 
| -// TranslateInfoBarDelegate views specific method:
 | 
| -InfoBar* TranslateInfoBarDelegate::CreateInfoBar(InfoBarService* owner) {
 | 
| -  scoped_ptr<InfoBarCocoa> infobar(new InfoBarCocoa(owner, this));
 | 
| +// static
 | 
| +scoped_ptr<InfoBar> TranslateInfoBarDelegate::CreateInfoBar(
 | 
| +    scoped_ptr<TranslateInfoBarDelegate> delegate) {
 | 
| +  scoped_ptr<InfoBarCocoa> infobar(
 | 
| +      new InfoBarCocoa(delegate.PassAs<InfoBarDelegate>()));
 | 
|    base::scoped_nsobject<TranslateInfoBarControllerBase> infobar_controller;
 | 
| -  switch (infobar_type_) {
 | 
| +  switch (infobar->delegate()->AsTranslateInfoBarDelegate()->infobar_type()) {
 | 
|      case BEFORE_TRANSLATE:
 | 
|        infobar_controller.reset([[BeforeTranslateInfobarController alloc]
 | 
|            initWithInfoBar:infobar.get()]);
 | 
| @@ -49,7 +51,7 @@
 | 
|        NOTREACHED();
 | 
|    }
 | 
|    infobar->set_controller(infobar_controller);
 | 
| -  return infobar.release();
 | 
| +  return infobar.PassAs<InfoBar>();
 | 
|  }
 | 
|  
 | 
|  @implementation TranslateInfoBarControllerBase (FrameChangeObserver)
 | 
| @@ -359,12 +361,17 @@
 | 
|    [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];
 | 
|  }
 | 
| @@ -458,9 +465,6 @@
 | 
|  }
 | 
|  
 | 
|  - (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];
 | 
| 
 |