Allow ApplicationTestBase clients to avoid a default MessageLoop. Provides a means for overriding the creation of a default message loop. Such a loop is unnecessary for many tests and causes issues with the bevy of existing chrome tests which expect to be able to create their own message loop. BUG=none TEST=https://codereview.chromium.org/806443002/ R=msw@chromium.org, sky@chromium.org Review URL: https://codereview.chromium.org/792463007
diff --git a/mojo/public/cpp/application/application_test_base.h b/mojo/public/cpp/application/application_test_base.h index 04580c7..70ef9d6 100644 --- a/mojo/public/cpp/application/application_test_base.h +++ b/mojo/public/cpp/application/application_test_base.h
@@ -45,6 +45,11 @@ void SetUp() override; void TearDown() override; + // True by default, which indicates a MessageLoop will automatically be + // created for the application. Tests may override this function to prevent + // a default loop from being created. + virtual bool ShouldCreateDefaultRunLoop(); + private: // The application implementation instance, reconstructed for each test. ApplicationImpl* application_impl_;
diff --git a/mojo/public/cpp/application/lib/application_test_base.cc b/mojo/public/cpp/application/lib/application_test_base.cc index 93eb3d0..864289e 100644 --- a/mojo/public/cpp/application/lib/application_test_base.cc +++ b/mojo/public/cpp/application/lib/application_test_base.cc
@@ -57,8 +57,10 @@ } void ApplicationTestBase::SetUpWithArgs(const Array<String>& args) { - // A run loop is needed for ApplicationImpl initialization and communication. - Environment::InstantiateDefaultRunLoop(); + // A run loop is recommended for ApplicationImpl initialization and + // communication. + if (ShouldCreateDefaultRunLoop()) + Environment::InstantiateDefaultRunLoop(); // New applications are constructed for each test to avoid persisting state. application_impl_ = new ApplicationImpl(GetApplicationDelegate(), @@ -75,7 +77,12 @@ void ApplicationTestBase::TearDown() { SetShellHandle(application_impl_->UnbindShell()); delete application_impl_; - Environment::DestroyDefaultRunLoop(); + if (ShouldCreateDefaultRunLoop()) + Environment::DestroyDefaultRunLoop(); +} + +bool ApplicationTestBase::ShouldCreateDefaultRunLoop() { + return true; } } // namespace test