| Index: content/test/test_utils.cc
|
| ===================================================================
|
| --- content/test/test_utils.cc (revision 151499)
|
| +++ content/test/test_utils.cc (working copy)
|
| @@ -1,148 +0,0 @@
|
| -// 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.
|
| -
|
| -#include "content/public/test/test_utils.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/run_loop.h"
|
| -#include "content/public/browser/notification_service.h"
|
| -#include "content/public/test/test_launcher.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -
|
| -// Number of times to repost a Quit task so that the MessageLoop finishes up
|
| -// pending tasks and tasks posted by those pending tasks without risking the
|
| -// potential hang behavior of MessageLoop::QuitWhenIdle.
|
| -// The criteria for choosing this number: it should be high enough to make the
|
| -// quit act like QuitWhenIdle, while taking into account that any page which is
|
| -// animating may be rendering another frame for each quit deferral. For an
|
| -// animating page, the potential delay to quitting the RunLoop would be
|
| -// kNumQuitDeferrals * frame_render_time. Some perf tests run slow, such as
|
| -// 200ms/frame.
|
| -static const int kNumQuitDeferrals = 10;
|
| -
|
| -static void DeferredQuitRunLoop(const base::Closure& quit_task,
|
| - int num_quit_deferrals) {
|
| - if (num_quit_deferrals <= 0) {
|
| - quit_task.Run();
|
| - } else {
|
| - MessageLoop::current()->PostTask(FROM_HERE,
|
| - base::Bind(&DeferredQuitRunLoop, quit_task, num_quit_deferrals - 1));
|
| - }
|
| -}
|
| -
|
| -void RunAllPendingMessageAndSendQuit(BrowserThread::ID thread_id,
|
| - const base::Closure& quit_task) {
|
| - RunAllPendingInMessageLoop();
|
| - BrowserThread::PostTask(thread_id, FROM_HERE, quit_task);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -void RunMessageLoop() {
|
| - base::RunLoop run_loop;
|
| - RunThisRunLoop(&run_loop);
|
| -}
|
| -
|
| -void RunThisRunLoop(base::RunLoop* run_loop) {
|
| - MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current());
|
| -
|
| - // If we're running inside a browser test, we might need to allow the test
|
| - // launcher to do extra work before/after running a nested message loop.
|
| - test_launcher::TestLauncherDelegate* delegate =
|
| - test_launcher::GetCurrentTestLauncherDelegate();
|
| - if (delegate)
|
| - delegate->PreRunMessageLoop(run_loop);
|
| - run_loop->Run();
|
| - if (delegate)
|
| - delegate->PostRunMessageLoop();
|
| -}
|
| -
|
| -void RunAllPendingInMessageLoop() {
|
| - MessageLoop::current()->PostTask(FROM_HERE,
|
| - MessageLoop::QuitWhenIdleClosure());
|
| - RunMessageLoop();
|
| -}
|
| -
|
| -void RunAllPendingInMessageLoop(BrowserThread::ID thread_id) {
|
| - if (BrowserThread::CurrentlyOn(thread_id)) {
|
| - RunAllPendingInMessageLoop();
|
| - return;
|
| - }
|
| - BrowserThread::ID current_thread_id;
|
| - if (!BrowserThread::GetCurrentThreadIdentifier(¤t_thread_id)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| -
|
| - base::RunLoop run_loop;
|
| - BrowserThread::PostTask(thread_id, FROM_HERE,
|
| - base::Bind(&RunAllPendingMessageAndSendQuit, current_thread_id,
|
| - run_loop.QuitClosure()));
|
| - RunThisRunLoop(&run_loop);
|
| -}
|
| -
|
| -base::Closure GetQuitTaskForRunLoop(base::RunLoop* run_loop) {
|
| - return base::Bind(&DeferredQuitRunLoop, run_loop->QuitClosure(),
|
| - kNumQuitDeferrals);
|
| -}
|
| -
|
| -MessageLoopRunner::MessageLoopRunner() {
|
| -}
|
| -
|
| -MessageLoopRunner::~MessageLoopRunner() {
|
| -}
|
| -
|
| -void MessageLoopRunner::Run() {
|
| - RunThisRunLoop(&run_loop_);
|
| -}
|
| -
|
| -base::Closure MessageLoopRunner::QuitClosure() {
|
| - return base::Bind(&MessageLoopRunner::Quit, this);
|
| -}
|
| -
|
| -void MessageLoopRunner::Quit() {
|
| - GetQuitTaskForRunLoop(&run_loop_).Run();
|
| -}
|
| -
|
| -WindowedNotificationObserver::WindowedNotificationObserver(
|
| - int notification_type,
|
| - const NotificationSource& source)
|
| - : seen_(false),
|
| - running_(false),
|
| - source_(NotificationService::AllSources()) {
|
| - registrar_.Add(this, notification_type, source);
|
| -}
|
| -
|
| -WindowedNotificationObserver::~WindowedNotificationObserver() {}
|
| -
|
| -void WindowedNotificationObserver::Wait() {
|
| - if (seen_)
|
| - return;
|
| -
|
| - running_ = true;
|
| - message_loop_runner_ = new MessageLoopRunner;
|
| - message_loop_runner_->Run();
|
| - EXPECT_TRUE(seen_);
|
| -}
|
| -
|
| -void WindowedNotificationObserver::Observe(
|
| - int type,
|
| - const NotificationSource& source,
|
| - const NotificationDetails& details) {
|
| - source_ = source;
|
| - details_ = details;
|
| - seen_ = true;
|
| - if (!running_)
|
| - return;
|
| -
|
| - message_loop_runner_->Quit();
|
| - running_ = false;
|
| -}
|
| -
|
| -} // namespace content
|
|
|