Chromium Code Reviews| Index: chrome/browser/infobars/infobar_manager.cc |
| diff --git a/chrome/browser/infobars/infobar_manager.cc b/chrome/browser/infobars/infobar_manager.cc |
| index 4e3bcb6784e6556ee83e0f2e673a49be6b45b358..67fec7b562f74715263029aaf0b2f3dc6cca9100 100644 |
| --- a/chrome/browser/infobars/infobar_manager.cc |
| +++ b/chrome/browser/infobars/infobar_manager.cc |
| @@ -25,7 +25,7 @@ InfoBar* InfoBarManager::AddInfoBar(scoped_ptr<InfoBar> infobar) { |
| infobars_.push_back(infobar_ptr); |
| infobar_ptr->SetOwner(this); |
| - FOR_EACH_OBSERVER(Observer, observer_list_, OnInfoBarAdded(infobar_ptr)); |
| + NotifyInfoBarAdded(infobar_ptr); |
| return infobar_ptr; |
| } |
| @@ -58,9 +58,7 @@ InfoBar* InfoBarManager::ReplaceInfoBar(InfoBar* old_infobar, |
| // to AddInfoBar() or similar, we don't dupe-check against this infobar. |
| infobars_.erase(++i); |
| - FOR_EACH_OBSERVER(Observer, |
| - observer_list_, |
| - OnInfoBarReplaced(old_infobar, new_infobar_ptr)); |
| + NotifyInfoBarReplaced(old_infobar, new_infobar_ptr); |
| old_infobar->CloseSoon(); |
| return new_infobar_ptr; |
| @@ -76,6 +74,7 @@ void InfoBarManager::RemoveObserver(Observer* obs) { |
| InfoBarManager::InfoBarManager(content::WebContents* web_contents) |
| : infobars_enabled_(true), |
| + did_shut_down_(false), |
|
Peter Kasting
2014/04/08 20:39:56
Nit: Don't add members just for sanity-check purpo
|
| web_contents_(web_contents) { |
| DCHECK(web_contents); |
| if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableInfoBars)) |
| @@ -83,10 +82,15 @@ InfoBarManager::InfoBarManager(content::WebContents* web_contents) |
| } |
| InfoBarManager::~InfoBarManager() { |
| + DCHECK(did_shut_down_); |
| +} |
| + |
| +void InfoBarManager::ShutDown() { |
| // Destroy all remaining InfoBars. It's important to not animate here so that |
| // we guarantee that we'll delete all delegates before we do anything else. |
| RemoveAllInfoBars(false); |
| - FOR_EACH_OBSERVER(Observer, observer_list_, OnManagerShuttingDown(this)); |
| + NotifyManagerShuttingDown(); |
| + did_shut_down_ = true; |
| } |
| void InfoBarManager::OnNavigation( |
| @@ -103,6 +107,26 @@ void InfoBarManager::OnNavigation( |
| void InfoBarManager::OnWebContentsDestroyed() { web_contents_ = NULL; } |
| +void InfoBarManager::NotifyInfoBarAdded(InfoBar* infobar) { |
| + FOR_EACH_OBSERVER(Observer, observer_list_, OnInfoBarAdded(infobar)); |
| +} |
| + |
| +void InfoBarManager::NotifyInfoBarRemoved(InfoBar* infobar, bool animate) { |
| + FOR_EACH_OBSERVER(Observer, observer_list_, |
| + OnInfoBarRemoved(infobar, animate)); |
| +} |
| + |
| +void InfoBarManager::NotifyInfoBarReplaced(InfoBar* old_infobar, |
| + InfoBar* new_infobar) { |
| + FOR_EACH_OBSERVER(Observer, |
| + observer_list_, |
| + OnInfoBarReplaced(old_infobar, new_infobar)); |
| +} |
| + |
| +void InfoBarManager::NotifyManagerShuttingDown() { |
| + FOR_EACH_OBSERVER(Observer, observer_list_, OnManagerShuttingDown(this)); |
| +} |
| + |
| void InfoBarManager::RemoveInfoBarInternal(InfoBar* infobar, bool animate) { |
| DCHECK(infobar); |
| if (!infobars_enabled_) { |
| @@ -119,8 +143,7 @@ void InfoBarManager::RemoveInfoBarInternal(InfoBar* infobar, bool animate) { |
| // This notification must happen before the call to CloseSoon() below, since |
| // observers may want to access |infobar| and that call can delete it. |
| - FOR_EACH_OBSERVER(Observer, observer_list_, |
| - OnInfoBarRemoved(infobar, animate)); |
| + NotifyInfoBarRemoved(infobar, animate); |
| infobar->CloseSoon(); |
| } |