From 1c906dc6495ff5c831a19b72a1f8fb265d1eacf6 Mon Sep 17 00:00:00 2001 From: fdoray Date: Tue, 2 May 2017 13:15:43 -0700 Subject: [PATCH] Use ScopedTaskEnvironment instead of MessageLoopForUI in ui/aura/test/. ScopedTaskEnvironment allows usage of ThreadTaskRunnerHandle and base/task_scheduler/post_task.h within its scope. It should be instantiated in everytest that uses either of these APIs (i.e. no test should instantiate a MessageLoop directly). Motivation for ScopedTaskEnvironment can be found in: https://docs.google.com/document/d/1QabRo8c7D9LsYY3cEcaPQbOCLo8Tu-6VLykYXyl3Pkk/edit TBR=sky@chromium.org BUG=708584 Review-Url: https://codereview.chromium.org/2849423002 Cr-Commit-Position: refs/heads/master@{#468756} --- .../capture/desktop_capture_device_aura_unittest.cc | 3 +-- .../render_widget_host_view_aura_unittest.cc | 3 +-- content/public/test/test_renderer_host.cc | 3 +-- ui/aura/BUILD.gn | 1 + ui/aura/test/aura_test_base.cc | 8 ++++++-- ui/aura/test/aura_test_base.h | 5 +++-- ui/aura/test/aura_test_helper.cc | 4 +--- ui/aura/test/aura_test_helper.h | 6 +----- ui/keyboard/keyboard_controller_unittest.cc | 12 ++++++++---- ui/snapshot/snapshot_aura_unittest.cc | 3 +-- ui/views/test/scoped_views_test_helper.cc | 6 ++---- ui/views/test/views_test_helper.h | 5 ----- ui/views/test/views_test_helper_aura.cc | 7 ++----- ui/views/test/views_test_helper_aura.h | 7 +------ ui/views/test/views_test_helper_mac.mm | 1 - 15 files changed, 29 insertions(+), 45 deletions(-) diff --git a/content/browser/media/capture/desktop_capture_device_aura_unittest.cc b/content/browser/media/capture/desktop_capture_device_aura_unittest.cc index fea24ac4ec44b2..97bd085c181284 100644 --- a/content/browser/media/capture/desktop_capture_device_aura_unittest.cc +++ b/content/browser/media/capture/desktop_capture_device_aura_unittest.cc @@ -111,8 +111,7 @@ class DesktopCaptureDeviceAuraTest : public testing::Test { ui::ContextFactoryPrivate* context_factory_private = nullptr; ui::InitializeContextFactoryForTests(enable_pixel_output, &context_factory, &context_factory_private); - helper_.reset( - new aura::test::AuraTestHelper(base::MessageLoopForUI::current())); + helper_.reset(new aura::test::AuraTestHelper()); helper_->SetUp(context_factory, context_factory_private); new wm::DefaultActivationClient(helper_->root_window()); // We need a window to cover desktop area so that DesktopCaptureDeviceAura diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index c47873eb96085c..76a1748db19a81 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc @@ -600,8 +600,7 @@ class RenderWidgetHostViewAuraTest : public testing::Test { ImageTransportFactory::InitializeForUnitTests( std::unique_ptr( new NoTransportImageTransportFactory)); - aura_test_helper_.reset( - new aura::test::AuraTestHelper(base::MessageLoopForUI::current())); + aura_test_helper_.reset(new aura::test::AuraTestHelper()); aura_test_helper_->SetUp( ImageTransportFactory::GetInstance()->GetContextFactory(), ImageTransportFactory::GetInstance()->GetContextFactoryPrivate()); diff --git a/content/public/test/test_renderer_host.cc b/content/public/test/test_renderer_host.cc index 538a2ccbff5ccb..6adcd65a6bdcd3 100644 --- a/content/public/test/test_renderer_host.cc +++ b/content/public/test/test_renderer_host.cc @@ -269,8 +269,7 @@ void RenderViewHostTestHarness::SetUp() { ui::ContextFactoryPrivate* context_factory_private = ImageTransportFactory::GetInstance()->GetContextFactoryPrivate(); - aura_test_helper_.reset( - new aura::test::AuraTestHelper(base::MessageLoopForUI::current())); + aura_test_helper_.reset(new aura::test::AuraTestHelper()); aura_test_helper_->SetUp(context_factory, context_factory_private); new wm::DefaultActivationClient(aura_test_helper_->root_window()); #endif diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn index a2de0b1c77d370..76dd501d872994 100644 --- a/ui/aura/BUILD.gn +++ b/ui/aura/BUILD.gn @@ -276,6 +276,7 @@ static_library("test_support") { ":aura", ] deps = [ + "//base/test:test_support", "//services/ui/public/interfaces", "//skia", "//testing/gtest", diff --git a/ui/aura/test/aura_test_base.cc b/ui/aura/test/aura_test_base.cc index 17ce8daf3ff081..45f49357bc76b9 100644 --- a/ui/aura/test/aura_test_base.cc +++ b/ui/aura/test/aura_test_base.cc @@ -4,6 +4,7 @@ #include "ui/aura/test/aura_test_base.h" +#include "base/memory/ptr_util.h" #include "ui/aura/client/window_parenting_client.h" #include "ui/aura/mus/property_utils.h" #include "ui/aura/mus/window_tree_client.h" @@ -22,7 +23,10 @@ namespace aura { namespace test { AuraTestBase::AuraTestBase() - : window_manager_delegate_(this), window_tree_client_delegate_(this) {} + : scoped_task_environment_( + base::test::ScopedTaskEnvironment::MainThreadType::UI), + window_manager_delegate_(this), + window_tree_client_delegate_(this) {} AuraTestBase::~AuraTestBase() { CHECK(setup_called_) @@ -79,7 +83,7 @@ void AuraTestBase::SetUp() { ui::InitializeContextFactoryForTests(enable_pixel_output, &context_factory, &context_factory_private); - helper_.reset(new AuraTestHelper(&message_loop_)); + helper_ = base::MakeUnique(); if (use_mus_) { helper_->EnableMusWithTestWindowTree(window_tree_client_delegate_, window_manager_delegate_); diff --git a/ui/aura/test/aura_test_base.h b/ui/aura/test/aura_test_base.h index f2cb56e39dbe54..34e9bca46a8646 100644 --- a/ui/aura/test/aura_test_base.h +++ b/ui/aura/test/aura_test_base.h @@ -10,7 +10,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" -#include "base/message_loop/message_loop.h" +#include "base/test/scoped_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/mus/property_converter.h" #include "ui/aura/mus/window_manager_delegate.h" @@ -140,6 +140,8 @@ class AuraTestBase : public testing::Test, PropertyConverter* GetPropertyConverter() override; private: + base::test::ScopedTaskEnvironment scoped_task_environment_; + // Only used for mus. Both are are initialized to this, but may be reset. WindowManagerDelegate* window_manager_delegate_; WindowTreeClientDelegate* window_tree_client_delegate_; @@ -147,7 +149,6 @@ class AuraTestBase : public testing::Test, bool use_mus_ = false; bool setup_called_ = false; bool teardown_called_ = false; - base::MessageLoopForUI message_loop_; PropertyConverter property_converter_; std::unique_ptr helper_; std::vector> window_tree_hosts_; diff --git a/ui/aura/test/aura_test_helper.cc b/ui/aura/test/aura_test_helper.cc index 8b832269e55d62..f97271648b8e64 100644 --- a/ui/aura/test/aura_test_helper.cc +++ b/ui/aura/test/aura_test_helper.cc @@ -6,7 +6,6 @@ #include "base/command_line.h" #include "base/memory/ptr_util.h" -#include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "ui/aura/client/default_capture_client.h" #include "ui/aura/client/focus_client.h" @@ -48,9 +47,8 @@ AuraTestHelper* g_instance = nullptr; } // namespace -AuraTestHelper::AuraTestHelper(base::MessageLoopForUI* message_loop) +AuraTestHelper::AuraTestHelper() : setup_called_(false), teardown_called_(false) { - DCHECK(message_loop); // Disable animations during tests. zero_duration_mode_.reset(new ui::ScopedAnimationDurationScaleMode( ui::ScopedAnimationDurationScaleMode::ZERO_DURATION)); diff --git a/ui/aura/test/aura_test_helper.h b/ui/aura/test/aura_test_helper.h index 307b8002b8a6d9..25f612bb5e2d8f 100644 --- a/ui/aura/test/aura_test_helper.h +++ b/ui/aura/test/aura_test_helper.h @@ -12,10 +12,6 @@ #include "ui/aura/window_event_dispatcher.h" #include "ui/aura/window_tree_host.h" -namespace base { -class MessageLoopForUI; -} - namespace ui { class ContextFactory; class ScopedAnimationDurationScaleMode; @@ -48,7 +44,7 @@ class TestWindowParentingClient; // that are necessary to run test on Aura. class AuraTestHelper { public: - explicit AuraTestHelper(base::MessageLoopForUI* message_loop); + AuraTestHelper(); ~AuraTestHelper(); // Returns the current AuraTestHelper, or nullptr if it's not alive. diff --git a/ui/keyboard/keyboard_controller_unittest.cc b/ui/keyboard/keyboard_controller_unittest.cc index fa58eb457993d7..d049168f3d5601 100644 --- a/ui/keyboard/keyboard_controller_unittest.cc +++ b/ui/keyboard/keyboard_controller_unittest.cc @@ -9,8 +9,8 @@ #include "base/bind.h" #include "base/command_line.h" #include "base/macros.h" -#include "base/message_loop/message_loop.h" #include "base/run_loop.h" +#include "base/test/scoped_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/client/focus_client.h" #include "ui/aura/layout_manager.h" @@ -212,7 +212,11 @@ class KeyboardControllerTest : public testing::Test, public KeyboardControllerObserver { public: KeyboardControllerTest() - : number_of_calls_(0), ui_(nullptr), keyboard_closed_(false) {} + : scoped_task_environment_( + base::test::ScopedTaskEnvironment::MainThreadType::UI), + number_of_calls_(0), + ui_(nullptr), + keyboard_closed_(false) {} ~KeyboardControllerTest() override {} void SetUp() override { @@ -225,7 +229,7 @@ class KeyboardControllerTest : public testing::Test, &context_factory_private); ui::SetUpInputMethodFactoryForTesting(); - aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); + aura_test_helper_.reset(new aura::test::AuraTestHelper()); aura_test_helper_->SetUp(context_factory, context_factory_private); new wm::DefaultActivationClient(aura_test_helper_->root_window()); focus_controller_.reset(new TestFocusController(root_window())); @@ -302,7 +306,7 @@ class KeyboardControllerTest : public testing::Test, void ResetController() { controller_.reset(); } - base::MessageLoopForUI message_loop_; + base::test::ScopedTaskEnvironment scoped_task_environment_; std::unique_ptr aura_test_helper_; std::unique_ptr focus_controller_; diff --git a/ui/snapshot/snapshot_aura_unittest.cc b/ui/snapshot/snapshot_aura_unittest.cc index 97d4ac4459c4e0..bee0b0ca79a3aa 100644 --- a/ui/snapshot/snapshot_aura_unittest.cc +++ b/ui/snapshot/snapshot_aura_unittest.cc @@ -104,8 +104,7 @@ class SnapshotAuraTest : public testing::Test { ui::InitializeContextFactoryForTests(enable_pixel_output, &context_factory, &context_factory_private); - helper_.reset( - new aura::test::AuraTestHelper(base::MessageLoopForUI::current())); + helper_.reset(new aura::test::AuraTestHelper()); helper_->SetUp(context_factory, context_factory_private); new ::wm::DefaultActivationClient(helper_->root_window()); } diff --git a/ui/views/test/scoped_views_test_helper.cc b/ui/views/test/scoped_views_test_helper.cc index 7a8da8d3df52ef..a69c9ede51c586 100644 --- a/ui/views/test/scoped_views_test_helper.cc +++ b/ui/views/test/scoped_views_test_helper.cc @@ -7,7 +7,6 @@ #include #include "base/memory/ptr_util.h" -#include "base/message_loop/message_loop.h" #include "ui/base/clipboard/clipboard.h" #include "ui/base/ime/input_method_initializer.h" #include "ui/base/test/test_clipboard.h" @@ -33,9 +32,8 @@ ScopedViewsTestHelper::ScopedViewsTestHelper( test_views_delegate_->set_context_factory(context_factory); test_views_delegate_->set_context_factory_private(context_factory_private); - test_helper_.reset(ViewsTestHelper::Create(base::MessageLoopForUI::current(), - context_factory, - context_factory_private)); + test_helper_.reset( + ViewsTestHelper::Create(context_factory, context_factory_private)); platform_test_helper_->OnTestHelperCreated(test_helper_.get()); test_helper_->SetUp(); diff --git a/ui/views/test/views_test_helper.h b/ui/views/test/views_test_helper.h index 787648dc04595f..46fc0eb33cadb3 100644 --- a/ui/views/test/views_test_helper.h +++ b/ui/views/test/views_test_helper.h @@ -8,10 +8,6 @@ #include "base/macros.h" #include "ui/gfx/native_widget_types.h" -namespace base { -class MessageLoopForUI; -} - namespace ui { class ContextFactory; class ContextFactoryPrivate; @@ -28,7 +24,6 @@ class ViewsTestHelper { // Create a platform specific instance. static ViewsTestHelper* Create( - base::MessageLoopForUI* message_loop, ui::ContextFactory* context_factory, ui::ContextFactoryPrivate* context_factory_private); diff --git a/ui/views/test/views_test_helper_aura.cc b/ui/views/test/views_test_helper_aura.cc index 50196b58508987..ba0f57ec547cae 100644 --- a/ui/views/test/views_test_helper_aura.cc +++ b/ui/views/test/views_test_helper_aura.cc @@ -15,20 +15,17 @@ namespace views { // static ViewsTestHelper* ViewsTestHelper::Create( - base::MessageLoopForUI* message_loop, ui::ContextFactory* context_factory, ui::ContextFactoryPrivate* context_factory_private) { - return new ViewsTestHelperAura(message_loop, context_factory, - context_factory_private); + return new ViewsTestHelperAura(context_factory, context_factory_private); } ViewsTestHelperAura::ViewsTestHelperAura( - base::MessageLoopForUI* message_loop, ui::ContextFactory* context_factory, ui::ContextFactoryPrivate* context_factory_private) : context_factory_(context_factory), context_factory_private_(context_factory_private) { - aura_test_helper_.reset(new aura::test::AuraTestHelper(message_loop)); + aura_test_helper_.reset(new aura::test::AuraTestHelper()); } ViewsTestHelperAura::~ViewsTestHelperAura() { diff --git a/ui/views/test/views_test_helper_aura.h b/ui/views/test/views_test_helper_aura.h index 158c3ac9786c29..f0edfc6e74a73f 100644 --- a/ui/views/test/views_test_helper_aura.h +++ b/ui/views/test/views_test_helper_aura.h @@ -22,16 +22,11 @@ class AuraTestHelper; } } -namespace base { -class MessageLoopForUI; -} - namespace views { class ViewsTestHelperAura : public ViewsTestHelper { public: - ViewsTestHelperAura(base::MessageLoopForUI* message_loop, - ui::ContextFactory* context_factory, + ViewsTestHelperAura(ui::ContextFactory* context_factory, ui::ContextFactoryPrivate* context_factory_private); ~ViewsTestHelperAura() override; diff --git a/ui/views/test/views_test_helper_mac.mm b/ui/views/test/views_test_helper_mac.mm index b35280c0d8b5d5..8ddf8611b1de35 100644 --- a/ui/views/test/views_test_helper_mac.mm +++ b/ui/views/test/views_test_helper_mac.mm @@ -19,7 +19,6 @@ // static ViewsTestHelper* ViewsTestHelper::Create( - base::MessageLoopForUI* message_loop, ui::ContextFactory* context_factory, ui::ContextFactoryPrivate* context_factory_private) { return new ViewsTestHelperMac;