Index: chrome/browser/ui/website_settings/website_settings_unittest.cc |
diff --git a/chrome/browser/ui/website_settings/website_settings_unittest.cc b/chrome/browser/ui/website_settings/website_settings_unittest.cc |
index c1649f10629c6632a6b6c57a463237e98c74c007..02f0724d95331510f0292f3f250b814a0fcf672a 100644 |
--- a/chrome/browser/ui/website_settings/website_settings_unittest.cc |
+++ b/chrome/browser/ui/website_settings/website_settings_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "base/utf_string_conversions.h" |
#include "chrome/browser/content_settings/host_content_settings_map.h" |
#include "chrome/browser/content_settings/tab_specific_content_settings.h" |
+#include "chrome/browser/infobars/infobar_delegate.h" |
#include "chrome/browser/infobars/infobar_tab_helper.h" |
#include "chrome/browser/ui/website_settings/website_settings_ui.h" |
#include "chrome/common/content_settings.h" |
@@ -341,6 +342,14 @@ TEST_F(WebsiteSettingsTest, ShowInfoBar) { |
website_settings()->OnUIClosing(); |
EXPECT_EQ(1u, infobar_tab_helper()->infobar_count()); |
- infobar_tab_helper()->RemoveInfoBar( |
+ // Removing an |InfoBarDelegate| from the |InfoBarTabHelper| does not delete |
+ // it. Hence the |delegate| must be cleaned up after it was removed from the |
+ // |infobar_tab_helper|. |
+ scoped_ptr<InfoBarDelegate> delegate( |
infobar_tab_helper()->GetInfoBarDelegateAt(0)); |
+ infobar_tab_helper()->RemoveInfoBar(delegate.get()); |
+ // Right now InfoBarDelegates delete themselves via |
+ // InfoBarClosed(); once InfoBars own their delegates, this can become a |
+ // simple reset() call |
+ delegate.release()->InfoBarClosed(); |
} |