Chromium Code Reviews| Index: chrome/browser/ui/cocoa/infobars/infobar_container_controller.mm |
| =================================================================== |
| --- chrome/browser/ui/cocoa/infobars/infobar_container_controller.mm (revision 87541) |
| +++ chrome/browser/ui/cocoa/infobars/infobar_container_controller.mm (working copy) |
| @@ -30,23 +30,32 @@ |
| const NotificationDetails& details) { |
| switch (type.value) { |
| case NotificationType::TAB_CONTENTS_INFOBAR_ADDED: |
| - [controller_ addInfoBar:Details<InfoBarDelegate>(details).ptr() |
| - animate:YES]; |
| + [controller_ addInfoBar:Details<InfoBar>(details).ptr() |
| + animate:YES |
| + deleteImmediately:NO]; |
| break; |
| - case NotificationType::TAB_CONTENTS_INFOBAR_REMOVED: |
| + |
| + case NotificationType::TAB_CONTENTS_INFOBAR_REMOVED: { |
| + typedef std::pair<InfoBarDelegate*, bool> RemoveDetails; |
| + RemoveDetails* remove_details = Details<RemoveDetails>(details).ptr(); |
| [controller_ |
| - closeInfoBarsForDelegate:Details<InfoBarDelegate>(details).ptr() |
| - animate:YES]; |
| + closeInfoBarsForDelegate:remove_details->first |
| + animate:(remove_details->second ? YES : NO)]; |
| break; |
| + } |
| + |
| case NotificationType::TAB_CONTENTS_INFOBAR_REPLACED: { |
| - typedef std::pair<InfoBarDelegate*, InfoBarDelegate*> |
| - InfoBarDelegatePair; |
| - InfoBarDelegatePair* delegates = |
| - Details<InfoBarDelegatePair>(details).ptr(); |
| - [controller_ |
| - replaceInfoBarsForDelegate:delegates->first with:delegates->second]; |
| + typedef std::pair<InfoBarDelegate*, InfoBar*> ReplaceDetails; |
| + ReplaceDetails* replace_details = |
| + Details<ReplaceDetails>(details).ptr(); |
| + [controller_ closeInfoBarsForDelegate:replace_details->first |
| + animate:NO]; |
| + [controller_ addInfoBar:replace_details->second |
| + animate:NO |
| + deleteImmediately:NO]; |
| break; |
| } |
| + |
| default: |
| NOTREACHED(); // we don't ask for anything else! |
| break; |
| @@ -127,11 +136,12 @@ |
| currentTabContents_ = contents; |
| if (currentTabContents_) { |
| for (size_t i = 0; i < currentTabContents_->infobar_count(); ++i) { |
| - [self addInfoBar:currentTabContents_->GetInfoBarDelegateAt(i) |
| - animate:NO]; |
| + InfoBar* infobar = currentTabContents_->GetInfoBarDelegateAt(i)-> |
| + CreateInfoBar(currentTabContents_); |
| + [self addInfoBar:infobar animate:NO deleteImmediately:YES]; |
| } |
| - Source<TabContents> source(currentTabContents_->tab_contents()); |
| + Source<TabContentsWrapper> source(currentTabContents_); |
| registrar_.Add(infoBarObserver_.get(), |
| NotificationType::TAB_CONTENTS_INFOBAR_ADDED, source); |
| registrar_.Add(infoBarObserver_.get(), |
| @@ -179,8 +189,9 @@ |
| return height; |
| } |
| -- (void)addInfoBar:(InfoBarDelegate*)delegate animate:(BOOL)animate { |
| - scoped_ptr<InfoBar> infobar(delegate->CreateInfoBar(currentTabContents_)); |
| +- (void)addInfoBar:(InfoBar*)infobar |
| + animate:(BOOL)animate |
| + deleteImmediately:(BOOL)delete_now { |
|
rohitrao (ping after 24h)
2011/06/02 18:58:25
Same rules for indentation and variable names.
|
| InfoBarController* controller = infobar->controller(); |
| [controller setContainerController:self]; |
| [[controller animatableView] setResizeDelegate:self]; |
| @@ -191,6 +202,11 @@ |
| [controller animateOpen]; |
| else |
| [controller open]; |
| + |
| + if (delete_now) |
| + delete infobar; |
| + else |
| + MessageLoop::current()->DeleteSoon(FROM_HERE, infobar); |
| } |
| - (void)closeInfoBarsForDelegate:(InfoBarDelegate*)delegate |
| @@ -207,12 +223,6 @@ |
| } |
| } |
| -- (void)replaceInfoBarsForDelegate:(InfoBarDelegate*)old_delegate |
| - with:(InfoBarDelegate*)new_delegate { |
| - [self closeInfoBarsForDelegate:old_delegate animate:NO]; |
| - [self addInfoBar:new_delegate animate:NO]; |
| -} |
| - |
| - (void)removeAllInfoBars { |
| // stopAnimation can remove the infobar from infobarControllers_ if it was in |
| // the midst of closing, so copy the array so mutations won't cause problems. |