| Index: content/test/test_navigation_observer.cc
|
| diff --git a/content/test/test_navigation_observer.cc b/content/test/test_navigation_observer.cc
|
| index 89ff36fd575feb8ec98c98463596d8c7442c5a2e..1d9c67fe783c6897a755bf0d2227405b82f0d9a0 100644
|
| --- a/content/test/test_navigation_observer.cc
|
| +++ b/content/test/test_navigation_observer.cc
|
| @@ -14,6 +14,22 @@
|
|
|
| namespace content {
|
|
|
| +namespace {
|
| +
|
| +// Allow some pending tasks and up to |num_deferrals| generations to complete.
|
| +static void DeferredQuitRunLoop(
|
| + const base::WeakPtr<MessageLoop::RunLoop>& run_loop,
|
| + int num_quit_deferrals) {
|
| + if (num_quit_deferrals <= 0) {
|
| + if (run_loop) run_loop->Stop();
|
| + } else {
|
| + MessageLoop::current()->PostTask(FROM_HERE,
|
| + base::Bind(&DeferredQuitRunLoop, run_loop, num_quit_deferrals - 1));
|
| + }
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // This class observes |render_view_host| and calls OnJsInjectionReady() of
|
| // |js_injection_ready_observer| when the time is right to inject JavaScript
|
| // into the page.
|
| @@ -84,11 +100,13 @@ void TestNavigationObserver::WaitForObservation(
|
| }
|
|
|
| void TestNavigationObserver::Wait() {
|
| + MessageLoop::RunLoop run_loop;
|
| + // Number of times to repost QuitNow task to allow pending tasks to complete:
|
| + const int num_quit_deferrals = 2;
|
| WaitForObservation(
|
| - base::Bind(&MessageLoop::Run,
|
| - base::Unretained(MessageLoop::current())),
|
| - base::Bind(&MessageLoop::Quit,
|
| - base::Unretained(MessageLoop::current())));
|
| + base::Bind(&MessageLoop::RunLoop::Run, run_loop.AsWeakPtr()),
|
| + base::Bind(&DeferredQuitRunLoop, run_loop.AsWeakPtr(),
|
| + num_quit_deferrals));
|
| }
|
|
|
| TestNavigationObserver::TestNavigationObserver(
|
| @@ -131,8 +149,10 @@ void TestNavigationObserver::Observe(
|
| ++navigations_completed_ == number_of_navigations_) {
|
| navigation_started_ = false;
|
| done_ = true;
|
| - if (running_)
|
| + if (running_) {
|
| + running_ = false;
|
| done_callback_.Run();
|
| + }
|
| }
|
| break;
|
| case NOTIFICATION_RENDER_VIEW_HOST_CREATED:
|
|
|