| Index: trunk/src/chrome/browser/infobars/infobar_container.h
|
| ===================================================================
|
| --- trunk/src/chrome/browser/infobars/infobar_container.h (revision 238401)
|
| +++ trunk/src/chrome/browser/infobars/infobar_container.h (working copy)
|
| @@ -14,10 +14,11 @@
|
| #include "third_party/skia/include/core/SkColor.h"
|
|
|
| class InfoBar;
|
| +class InfoBarDelegate;
|
| class InfoBarService;
|
|
|
| // InfoBarContainer is a cross-platform base class to handle the visibility-
|
| -// related aspects of InfoBars. While InfoBarService owns the InfoBars, the
|
| +// related aspects of InfoBars. While InfoBars own themselves, the
|
| // InfoBarContainer is responsible for telling particular InfoBars that they
|
| // should be hidden or visible.
|
| //
|
| @@ -46,9 +47,8 @@
|
| virtual ~InfoBarContainer();
|
|
|
| // Changes the InfoBarService for which this container is showing infobars.
|
| - // This will hide all current infobars, remove them from the container, add
|
| - // the infobars from |infobar_service|, and show them all. |infobar_service|
|
| - // may be NULL.
|
| + // This will remove all current infobars from the container, add the infobars
|
| + // from |infobar_service|, and show them all. |infobar_service| may be NULL.
|
| void ChangeInfoBarService(InfoBarService* infobar_service);
|
|
|
| // Returns the amount by which to overlap the toolbar above, and, when
|
| @@ -73,7 +73,8 @@
|
| void OnInfoBarStateChanged(bool is_animating);
|
|
|
| // Called by |infobar| to request that it be removed from the container. At
|
| - // this point, |infobar| should already be hidden.
|
| + // this point, |infobar| should already be hidden. Once the infobar is
|
| + // removed, it is guaranteed to delete itself and will not be re-added again.
|
| void RemoveInfoBar(InfoBar* infobar);
|
|
|
| const Delegate* delegate() const { return delegate_; }
|
| @@ -106,6 +107,17 @@
|
| const content::NotificationSource& source,
|
| const content::NotificationDetails& details) OVERRIDE;
|
|
|
| + // Hides an InfoBar for the specified delegate, in response to a notification
|
| + // from the selected InfoBarService. The InfoBar's disappearance will be
|
| + // animated if |use_animation| is true. The InfoBar will call back to
|
| + // RemoveInfoBar() to remove itself once it's hidden (which may mean
|
| + // synchronously). Returns the position within |infobars_| the infobar was
|
| + // previously at.
|
| + size_t HideInfoBar(InfoBar* infobar, bool use_animation);
|
| +
|
| + // Find an existing infobar in the container.
|
| + InfoBar* FindInfoBar(InfoBarDelegate* delegate);
|
| +
|
| // Hides all infobars in this container without animation.
|
| void HideAllInfoBars();
|
|
|
| @@ -114,6 +126,10 @@
|
| // infobar->Show(). Depending on the value of |callback_status|, this calls
|
| // infobar->set_container(this) either before or after the call to Show() so
|
| // that OnInfoBarStateChanged() either will or won't be called as a result.
|
| + //
|
| + // This should be called only once for an infobar -- once it's added, it can
|
| + // be repeatedly shown and hidden, but not removed and then re-added (see
|
| + // comments on RemoveInfoBar()).
|
| enum CallbackStatus { NO_CALLBACK, WANT_CALLBACK };
|
| void AddInfoBar(InfoBar* infobar,
|
| size_t position,
|
|
|