// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_PANELS_TEST_PANEL_NOTIFICATION_OBSERVER_H_ #define CHROME_BROWSER_UI_PANELS_TEST_PANEL_NOTIFICATION_OBSERVER_H_ #include "base/memory/ref_counted.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" namespace content { class MessageLoopRunner; class NotificationSource; } // Common base class for a custom notification observer that waits // on a notification until an expected state is achieved. // Modeled after ui_test_utils notification observers, but can handle // more than one occurrence of the notification. class TestPanelNotificationObserver : public content::NotificationObserver { public: TestPanelNotificationObserver(int notification, const content::NotificationSource& source); virtual ~TestPanelNotificationObserver(); // Wait until the expected state is achieved. void Wait(); // content::NotificationObserver: virtual void Observe(int type, const content::NotificationSource& source, const content::NotificationDetails& details) OVERRIDE; protected: virtual bool AtExpectedState() = 0; bool seen_; // true after transition to expected state has been seen bool running_; // indicates whether message loop is running content::NotificationRegistrar registrar_; scoped_refptr message_loop_runner_; DISALLOW_COPY_AND_ASSIGN(TestPanelNotificationObserver); }; #endif // CHROME_BROWSER_UI_PANELS_TEST_PANEL_NOTIFICATION_OBSERVER_H_