Index: trunk/src/chrome/browser/content_settings/permission_queue_controller_unittest.cc |
=================================================================== |
--- trunk/src/chrome/browser/content_settings/permission_queue_controller_unittest.cc (revision 238401) |
+++ trunk/src/chrome/browser/content_settings/permission_queue_controller_unittest.cc (working copy) |
@@ -7,10 +7,13 @@ |
#include "base/synchronization/waitable_event.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/content_settings/permission_request_id.h" |
+#include "chrome/browser/infobars/infobar.h" |
#include "chrome/browser/infobars/infobar_service.h" |
#include "chrome/common/content_settings_types.h" |
#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
#include "chrome/test/base/testing_profile.h" |
+#include "content/public/browser/notification_details.h" |
+#include "content/public/browser/notification_service.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/test/mock_render_process_host.h" |
#include "content/public/test/test_browser_thread.h" |
@@ -19,9 +22,14 @@ |
// PermissionQueueControllerTests --------------------------------------------- |
-class PermissionQueueControllerTests : public ChromeRenderViewHostTestHarness { |
+class PermissionQueueControllerTests : public ChromeRenderViewHostTestHarness, |
+ public content::NotificationObserver { |
protected: |
- PermissionQueueControllerTests() {} |
+ PermissionQueueControllerTests() { |
+ registrar_.Add(this, |
+ chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
+ content::NotificationService::AllSources()); |
+ } |
virtual ~PermissionQueueControllerTests() {} |
PermissionRequestID RequestID(int bridge_id) { |
@@ -38,6 +46,22 @@ |
InfoBarService::CreateForWebContents(web_contents()); |
} |
+ // content::NotificationObserver: |
+ virtual void Observe(int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) OVERRIDE { |
+ DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type); |
+ // Delete the removed infobar. In normal Chrome code, this would be handled |
+ // by the InfoBarContainer. It's safe to do this even if the queue |
+ // controller Observe() function has not yet been called; see comments in |
+ // PermissionQueueController::Observe(). |
+ // TODO(pkasting): This will no longer be necessary once the InfoBarService |
+ // truly owns infobars. |
+ delete content::Details<InfoBar::RemovedDetails>(details)->first; |
+ } |
+ |
+ content::NotificationRegistrar registrar_; |
+ |
DISALLOW_COPY_AND_ASSIGN(PermissionQueueControllerTests); |
}; |