Chromium Code Reviews| Index: chrome/browser/cocoa/infobar_container_controller.mm |
| =================================================================== |
| --- chrome/browser/cocoa/infobar_container_controller.mm (revision 24114) |
| +++ chrome/browser/cocoa/infobar_container_controller.mm (working copy) |
| @@ -33,6 +33,15 @@ |
| [controller_ |
| removeInfoBarsForDelegate:Details<InfoBarDelegate>(details).ptr()]; |
| 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]; |
| + break; |
| + } |
| default: |
| NOTREACHED(); // we don't ask for anything else! |
| break; |
| @@ -130,6 +139,8 @@ |
| NotificationType::TAB_CONTENTS_INFOBAR_ADDED, source); |
| registrar_.Add(infoBarObserver_.get(), |
| NotificationType::TAB_CONTENTS_INFOBAR_REMOVED, source); |
| + registrar_.Add(infoBarObserver_.get(), |
| + NotificationType::TAB_CONTENTS_INFOBAR_REPLACED, source); |
| } |
| [self positionInfoBarsAndRedraw]; |
| @@ -145,7 +156,7 @@ |
| - (void)removeInfoBarsForDelegate:(InfoBarDelegate*)delegate { |
| for (InfoBarController* controller in |
| - [NSArray arrayWithArray:infobarControllers_.get()]) { |
| + [NSArray arrayWithArray:infobarControllers_.get()]) { |
| if ([controller delegate] == delegate) { |
| // This code can be executed while -[InfoBarController closeInfoBar] is |
| // still on the stack, so we retain and autorelease the controller to |
| @@ -157,6 +168,13 @@ |
| } |
| } |
| +- (void)replaceInfoBarsForDelegate:(InfoBarDelegate*)old_delegate |
| + with:(InfoBarDelegate*)new_delegate { |
| + // TODO(port): This should avoid animation when we add it. |
|
Aaron Boodman
2009/08/24 21:29:07
Cool, thanks for adding this TODO
rohitrao (ping after 24h)
2009/08/25 15:57:35
Feel free to assign this TODO to me.
|
| + [self removeInfoBarsForDelegate:old_delegate]; |
| + [self addInfoBar:new_delegate]; |
| +} |
| + |
| - (void)removeAllInfoBars { |
| for (InfoBarController* controller in infobarControllers_.get()) { |
| [[controller view] removeFromSuperview]; |