| Index: chrome/test/base/mash_browser_tests_main.cc
|
| diff --git a/chrome/test/base/mash_browser_tests_main.cc b/chrome/test/base/mash_browser_tests_main.cc
|
| index a6f2f591ac1b822d1e916dfbf17558d0a58892de..0db865114f7e2ee0c336319e188051920dfcef27 100644
|
| --- a/chrome/test/base/mash_browser_tests_main.cc
|
| +++ b/chrome/test/base/mash_browser_tests_main.cc
|
| @@ -27,21 +27,53 @@ void ConnectToDefaultApps(mojo::Connector* connector) {
|
| connector->Connect("mojo:mash_session");
|
| }
|
|
|
| +class MashTestSuite : public ChromeTestSuite {
|
| + public:
|
| + MashTestSuite(int argc, char** argv) : ChromeTestSuite(argc, argv) {}
|
| +
|
| + void SetMojoTestConnector(scoped_ptr<MojoTestConnector> connector) {
|
| + mojo_test_connector_ = std::move(connector);
|
| + }
|
| + MojoTestConnector* mojo_test_connector() {
|
| + return mojo_test_connector_.get();
|
| + }
|
| +
|
| + private:
|
| + // ChromeTestSuite:
|
| + void Shutdown() override {
|
| + mojo_test_connector_.reset();
|
| + ChromeTestSuite::Shutdown();
|
| + }
|
| +
|
| + scoped_ptr<MojoTestConnector> mojo_test_connector_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MashTestSuite);
|
| +};
|
| +
|
| // Used to setup the command line for passing a mojo channel to tests.
|
| class MashTestLauncherDelegate : public ChromeTestLauncherDelegate {
|
| public:
|
| - explicit MashTestLauncherDelegate(ChromeTestSuiteRunner* runner)
|
| - : ChromeTestLauncherDelegate(runner) {}
|
| + MashTestLauncherDelegate() : ChromeTestLauncherDelegate(nullptr) {}
|
| ~MashTestLauncherDelegate() override {}
|
|
|
| - MojoTestConnector* GetMojoTestConnector() {
|
| - if (!mojo_test_connector_)
|
| - mojo_test_connector_.reset(new MojoTestConnector);
|
| - return mojo_test_connector_.get();
|
| + MojoTestConnector* GetMojoTestConnectorForSingleProcess() {
|
| + // This is only called for single process tests, in which case we need
|
| + // the TestSuite to own the MojoTestConnector.
|
| + DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| + content::kSingleProcessTestsFlag));
|
| + DCHECK(test_suite_);
|
| + test_suite_->SetMojoTestConnector(make_scoped_ptr(new MojoTestConnector));
|
| + return test_suite_->mojo_test_connector();
|
| }
|
|
|
| private:
|
| // ChromeTestLauncherDelegate:
|
| + int RunTestSuite(int argc, char** argv) override {
|
| + test_suite_.reset(new MashTestSuite(argc, argv));
|
| + const int result = test_suite_->Run();
|
| + test_suite_.reset();
|
| + return result;
|
| + }
|
| scoped_ptr<content::TestState> PreRunTest(
|
| base::CommandLine* command_line,
|
| base::TestLauncher::LaunchOptions* test_launch_options) override {
|
| @@ -52,10 +84,18 @@ class MashTestLauncherDelegate : public ChromeTestLauncherDelegate {
|
| shell_client_.get(), mojo_test_connector_->Init()));
|
| ConnectToDefaultApps(shell_connection_->connector());
|
| }
|
| - return GetMojoTestConnector()->PrepareForTest(command_line,
|
| - test_launch_options);
|
| + return mojo_test_connector_->PrepareForTest(command_line,
|
| + test_launch_options);
|
| + }
|
| + void OnDoneRunningTests() override {
|
| + // We have to shutdown this state here, while an AtExitManager is still
|
| + // valid.
|
| + shell_connection_.reset();
|
| + shell_client_.reset();
|
| + mojo_test_connector_.reset();
|
| }
|
|
|
| + scoped_ptr<MashTestSuite> test_suite_;
|
| scoped_ptr<MojoTestConnector> mojo_test_connector_;
|
| scoped_ptr<mojo::ShellClient> shell_client_;
|
| scoped_ptr<mojo::ShellConnection> shell_connection_;
|
| @@ -65,8 +105,9 @@ class MashTestLauncherDelegate : public ChromeTestLauncherDelegate {
|
|
|
| void CreateMojoShellConnection(MashTestLauncherDelegate* delegate) {
|
| const bool is_external_shell = true;
|
| - content::MojoShellConnection::Create(delegate->GetMojoTestConnector()->Init(),
|
| - is_external_shell);
|
| + content::MojoShellConnection::Create(
|
| + delegate->GetMojoTestConnectorForSingleProcess()->Init(),
|
| + is_external_shell);
|
| ConnectToDefaultApps(content::MojoShellConnection::Get()->GetConnector());
|
| }
|
|
|
| @@ -92,8 +133,7 @@ bool RunMashBrowserTests(int argc, char** argv, int* exit_code) {
|
| }
|
|
|
| int default_jobs = std::max(1, base::SysInfo::NumberOfProcessors() / 2);
|
| - ChromeTestSuiteRunner runner;
|
| - MashTestLauncherDelegate delegate(&runner);
|
| + MashTestLauncherDelegate delegate;
|
| // --single_process and no primoridal pipe token indicate we were run directly
|
| // from the command line. In this case we have to start up MojoShellConnection
|
| // as though we were embedded.
|
|
|