| Index: chrome/test/ui_test_utils.cc
|
| diff --git a/chrome/test/ui_test_utils.cc b/chrome/test/ui_test_utils.cc
|
| index 8ed4303488b528bdc9a7eef700485394f8483c45..d8f8c756d6acc300dda5d007ed341d8153ad165a 100644
|
| --- a/chrome/test/ui_test_utils.cc
|
| +++ b/chrome/test/ui_test_utils.cc
|
| @@ -35,6 +35,7 @@
|
| #include "chrome/common/extensions/extension_action.h"
|
| #include "chrome/test/automation/javascript_execution_controller.h"
|
| #include "chrome/test/bookmark_load_observer.h"
|
| +#include "chrome/test/test_navigation_observer.h"
|
| #include "content/browser/renderer_host/render_process_host.h"
|
| #include "content/browser/renderer_host/render_view_host.h"
|
| #include "content/browser/tab_contents/navigation_controller.h"
|
| @@ -55,70 +56,6 @@ namespace ui_test_utils {
|
|
|
| namespace {
|
|
|
| -// Used to block until a navigation completes.
|
| -class NavigationNotificationObserver : public NotificationObserver {
|
| - public:
|
| - NavigationNotificationObserver(NavigationController* controller,
|
| - int number_of_navigations)
|
| - : navigation_started_(false),
|
| - navigations_completed_(0),
|
| - number_of_navigations_(number_of_navigations),
|
| - running_(false),
|
| - done_(false) {
|
| - registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
|
| - Source<NavigationController>(controller));
|
| - registrar_.Add(this, content::NOTIFICATION_LOAD_START,
|
| - Source<NavigationController>(controller));
|
| - registrar_.Add(this, content::NOTIFICATION_LOAD_STOP,
|
| - Source<NavigationController>(controller));
|
| - }
|
| -
|
| - void Run() {
|
| - if (!done_) {
|
| - running_ = true;
|
| - RunMessageLoop();
|
| - }
|
| - }
|
| -
|
| - virtual void Observe(int type,
|
| - const NotificationSource& source,
|
| - const NotificationDetails& details) {
|
| - if (type == content::NOTIFICATION_NAV_ENTRY_COMMITTED ||
|
| - type == content::NOTIFICATION_LOAD_START) {
|
| - navigation_started_ = true;
|
| - } else if (type == content::NOTIFICATION_LOAD_STOP) {
|
| - if (navigation_started_ &&
|
| - ++navigations_completed_ == number_of_navigations_) {
|
| - navigation_started_ = false;
|
| - done_ = true;
|
| - if (running_)
|
| - MessageLoopForUI::current()->Quit();
|
| - }
|
| - }
|
| - }
|
| -
|
| - private:
|
| - NotificationRegistrar registrar_;
|
| -
|
| - // If true the navigation has started.
|
| - bool navigation_started_;
|
| -
|
| - // The number of navigations that have been completed.
|
| - int navigations_completed_;
|
| -
|
| - // The number of navigations to wait for.
|
| - int number_of_navigations_;
|
| -
|
| - // Calls to Observe() can happen early, before the user calls Run(), or
|
| - // after. When we've seen all the navigations we're looking for, we set
|
| - // done_ to true; then when Run() is called we'll never need to run the
|
| - // event loop. Also, we don't need to quit the event loop when we're
|
| - // done if we never had to start an event loop.
|
| - bool running_;
|
| - bool done_;
|
| - DISALLOW_COPY_AND_ASSIGN(NavigationNotificationObserver);
|
| -};
|
| -
|
| class DOMOperationObserver : public NotificationObserver {
|
| public:
|
| explicit DOMOperationObserver(RenderViewHost* render_view_host)
|
| @@ -337,8 +274,8 @@ void WaitForNavigation(NavigationController* controller) {
|
|
|
| void WaitForNavigations(NavigationController* controller,
|
| int number_of_navigations) {
|
| - NavigationNotificationObserver observer(controller, number_of_navigations);
|
| - observer.Run();
|
| + TestNavigationObserver observer(controller, NULL, number_of_navigations);
|
| + observer.WaitForObservation();
|
| }
|
|
|
| void WaitForNewTab(Browser* browser) {
|
| @@ -404,9 +341,9 @@ static void NavigateToURLWithDispositionBlockUntilNavigationsComplete(
|
| int number_of_navigations,
|
| WindowOpenDisposition disposition,
|
| int browser_test_flags) {
|
| - NavigationNotificationObserver
|
| + TestNavigationObserver
|
| same_tab_observer(&browser->GetSelectedTabContents()->controller(),
|
| - number_of_navigations);
|
| + NULL, number_of_navigations);
|
|
|
| std::set<Browser*> initial_browsers;
|
| for (std::vector<Browser*>::const_iterator iter = BrowserList::begin();
|
| @@ -438,7 +375,7 @@ static void NavigateToURLWithDispositionBlockUntilNavigationsComplete(
|
| tab_contents = browser->GetSelectedTabContents();
|
| }
|
| if (disposition == CURRENT_TAB) {
|
| - same_tab_observer.Run();
|
| + same_tab_observer.WaitForObservation();
|
| return;
|
| } else if (tab_contents) {
|
| NavigationController* controller = &tab_contents->controller();
|
|
|