Add (optional) options to Run[Main]Application(). Using options, one can choose the message loop type in the "chromium" implementation. Convert a bunch more uses of ApplicationDelegate / ApplicationRunner[Chromium] (again, until I got bored). Many of the remaining cases require more refactoring. R=vardhan@google.com Review URL: https://codereview.chromium.org/2015643002 .
diff --git a/examples/apptest/example_service_application.cc b/examples/apptest/example_service_application.cc index f358173..578bf59 100644 --- a/examples/apptest/example_service_application.cc +++ b/examples/apptest/example_service_application.cc
@@ -4,10 +4,8 @@ #include "examples/apptest/example_service_application.h" -#include <memory> - #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_runner.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/application/service_provider_impl.h" namespace mojo { @@ -16,7 +14,7 @@ ExampleServiceApplication::~ExampleServiceApplication() {} -bool ExampleServiceApplication::ConfigureIncomingConnection( +bool ExampleServiceApplication::OnAcceptConnection( ServiceProviderImpl* service_provider_impl) { service_provider_impl->AddService<ExampleService>( [](const ConnectionContext& connection_context, @@ -30,8 +28,7 @@ } // namespace mojo MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunner runner( - std::unique_ptr<mojo::ExampleServiceApplication>( - new mojo::ExampleServiceApplication())); - return runner.Run(application_request); + mojo::ExampleServiceApplication example_service_application; + return mojo::RunMainApplication(application_request, + &example_service_application); }
diff --git a/examples/apptest/example_service_application.h b/examples/apptest/example_service_application.h index bb22514..7947b00 100644 --- a/examples/apptest/example_service_application.h +++ b/examples/apptest/example_service_application.h
@@ -6,20 +6,19 @@ #define MOJO_EXAMPLES_TEST_EXAMPLE_SERVICE_APPLICATION_H_ #include "examples/apptest/example_service_impl.h" -#include "mojo/public/cpp/application/application_delegate.h" +#include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/public/cpp/system/macros.h" namespace mojo { -class ExampleServiceApplication : public ApplicationDelegate { +class ExampleServiceApplication : public ApplicationImplBase { public: ExampleServiceApplication(); ~ExampleServiceApplication() override; private: - // ApplicationDelegate implementation. - bool ConfigureIncomingConnection( - ServiceProviderImpl* service_provider_impl) override; + // ApplicationImplBase override. + bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override; MOJO_DISALLOW_COPY_AND_ASSIGN(ExampleServiceApplication); };
diff --git a/examples/audio_play_test/play_tone.cc b/examples/audio_play_test/play_tone.cc index 025bdbb..ccbab46 100644 --- a/examples/audio_play_test/play_tone.cc +++ b/examples/audio_play_test/play_tone.cc
@@ -6,10 +6,9 @@ #include <memory> #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" -#include "mojo/public/cpp/application/application_runner.h" +#include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/public/cpp/application/connect.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/utility/run_loop.h" #include "mojo/services/media/audio/interfaces/audio_server.mojom.h" #include "mojo/services/media/audio/interfaces/audio_track.mojom.h" @@ -36,13 +35,13 @@ return ((usec * SAMP_FREQ) / 1000000) * FRAME_BYTES; } -class PlayToneApp : public ApplicationDelegate { +class PlayToneApp : public ApplicationImplBase { public: - ~PlayToneApp() override { Quit(); } + ~PlayToneApp() override { OnQuit(); } - // ApplicationDelegate - void Initialize(ApplicationImpl* app) override; - void Quit() override; + // ApplicationImplBase overrides: + void OnInitialize() override; + void OnQuit() override; private: void GenerateToneCbk(MediaResult res); @@ -63,15 +62,15 @@ bool shutting_down_ = false; }; -void PlayToneApp::Quit() { +void PlayToneApp::OnQuit() { timeline_consumer_.reset(); audio_pipe_.reset(); audio_track_.reset(); audio_server_.reset(); } -void PlayToneApp::Initialize(ApplicationImpl* app) { - mojo::ConnectToService(app->shell(), "mojo:audio_server", +void PlayToneApp::OnInitialize() { + mojo::ConnectToService(shell(), "mojo:audio_server", GetProxy(&audio_server_)); audio_server_.set_connection_error_handler([this]() { OnConnectionError("audio_server"); @@ -233,7 +232,7 @@ } void PlayToneApp::Shutdown() { - Quit(); + OnQuit(); RunLoop::current()->Quit(); } @@ -243,8 +242,6 @@ } // namespace mojo MojoResult MojoMain(MojoHandle app_request) { - mojo::ApplicationRunner runner( - std::unique_ptr<mojo::media::audio::examples::PlayToneApp>( - new mojo::media::audio::examples::PlayToneApp())); - return runner.Run(app_request); + mojo::media::audio::examples::PlayToneApp play_tone_app; + return mojo::RunMainApplication(app_request, &play_tone_app); }
diff --git a/examples/audio_play_test/play_wav.cc b/examples/audio_play_test/play_wav.cc index f5f11ea..a05fe26 100644 --- a/examples/audio_play_test/play_wav.cc +++ b/examples/audio_play_test/play_wav.cc
@@ -5,10 +5,9 @@ #include <memory> #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" -#include "mojo/public/cpp/application/application_runner.h" +#include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/public/cpp/application/connect.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/system/data_pipe.h" #include "mojo/public/cpp/system/wait.h" #include "mojo/public/cpp/utility/run_loop.h" @@ -49,13 +48,13 @@ static constexpr uint32_t BUF_HI_WATER_USEC = 450000; static constexpr uint32_t CHUNK_SIZE_USEC = 10000; -class PlayWAVApp : public ApplicationDelegate { +class PlayWAVApp : public ApplicationImplBase { public: - ~PlayWAVApp() override { Quit(); } + ~PlayWAVApp() override { OnQuit(); } - // ApplicationDelegate - void Initialize(ApplicationImpl* app) override; - void Quit() override; + // ApplicationImplBase overrides: + void OnInitialize() override; + void OnQuit() override; private: using AudioPipePtr = std::unique_ptr<CircularBufferMediaPipeAdapter>; @@ -157,13 +156,13 @@ 8, 16, }); -void PlayWAVApp::Initialize(ApplicationImpl* app) { - ConnectToService(app->shell(), "mojo:audio_server", GetProxy(&audio_server_)); +void PlayWAVApp::OnInitialize() { + ConnectToService(shell(), "mojo:audio_server", GetProxy(&audio_server_)); audio_server_.set_connection_error_handler([this]() { OnConnectionError("audio_server"); }); - ConnectToService(app->shell(), "mojo:network_service", + ConnectToService(shell(), "mojo:network_service", GetProxy(&network_service_)); audio_server_.set_connection_error_handler([this]() { OnConnectionError("network_service"); @@ -186,7 +185,7 @@ url_loader_->Start(req.Pass(), URLLoader::StartCallback(cbk)); } -void PlayWAVApp::Quit() { +void PlayWAVApp::OnQuit() { if (audio_packet_.packet()) { MOJO_DCHECK(audio_pipe_); audio_pipe_->CancelMediaPacket(&audio_packet_); @@ -547,7 +546,7 @@ // pattern for shutting down an app has been established, come back here and // remove all this junk. void PlayWAVApp::Shutdown() { - Quit(); + OnQuit(); RunLoop::current()->Quit(); } @@ -557,8 +556,6 @@ } // namespace mojo MojoResult MojoMain(MojoHandle app_request) { - mojo::ApplicationRunner runner( - std::unique_ptr<mojo::media::audio::examples::PlayWAVApp>( - new mojo::media::audio::examples::PlayWAVApp())); - return runner.Run(app_request); + mojo::media::audio::examples::PlayWAVApp play_wav_app; + return mojo::RunMainApplication(app_request, &play_wav_app); }
diff --git a/examples/authentication_demo/google_authentication_demo.cc b/examples/authentication_demo/google_authentication_demo.cc index 79a79d0..8b5bf06 100644 --- a/examples/authentication_demo/google_authentication_demo.cc +++ b/examples/authentication_demo/google_authentication_demo.cc
@@ -5,25 +5,24 @@ #include "base/bind.h" #include "base/logging.h" #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" -#include "mojo/public/cpp/application/application_runner.h" +#include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/public/cpp/application/connect.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/utility/run_loop.h" #include "mojo/services/authentication/interfaces/authentication.mojom.h" namespace examples { namespace authentication { -class GoogleAuthApp : public mojo::ApplicationDelegate { +class GoogleAuthApp : public mojo::ApplicationImplBase { public: GoogleAuthApp() {} ~GoogleAuthApp() override {} - void Initialize(mojo::ApplicationImpl* app) override { + void OnInitialize() override { DLOG(INFO) << "Connecting to authentication service..."; - mojo::ConnectToService(app->shell(), "mojo:authentication", + mojo::ConnectToService(shell(), "mojo:authentication", GetProxy(&authentication_service_)); mojo::Array<mojo::String> scopes; @@ -128,8 +127,6 @@ } // namespace examples MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunner runner( - std::unique_ptr<examples::authentication::GoogleAuthApp>( - new examples::authentication::GoogleAuthApp())); - return runner.Run(application_request); + examples::authentication::GoogleAuthApp google_auth_app; + return mojo::RunMainApplication(application_request, &google_auth_app); }
diff --git a/examples/hello_mojo/hello_mojo_client.cc b/examples/hello_mojo/hello_mojo_client.cc index 402174d..c0305a2 100644 --- a/examples/hello_mojo/hello_mojo_client.cc +++ b/examples/hello_mojo/hello_mojo_client.cc
@@ -4,15 +4,13 @@ #include <stdio.h> -#include <memory> #include <string> #include "examples/hello_mojo/hello_mojo.mojom.h" #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" -#include "mojo/public/cpp/application/application_runner.h" +#include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/public/cpp/application/connect.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/system/macros.h" #include "mojo/public/cpp/utility/run_loop.h" @@ -20,13 +18,13 @@ namespace { -class HelloMojoClientApp : public mojo::ApplicationDelegate { +class HelloMojoClientApp : public mojo::ApplicationImplBase { public: HelloMojoClientApp() {} ~HelloMojoClientApp() override {} - void Initialize(mojo::ApplicationImpl* application) override { - mojo::ConnectToService(application->shell(), "mojo:hello_mojo_server", + void OnInitialize() override { + mojo::ConnectToService(shell(), "mojo:hello_mojo_server", GetProxy(&hello_mojo_)); DoIt("hello"); @@ -48,7 +46,6 @@ } // namespace MojoResult MojoMain(MojoHandle application_request) { - return mojo::ApplicationRunner(std::unique_ptr<mojo::ApplicationDelegate>( - new HelloMojoClientApp())) - .Run(application_request); + HelloMojoClientApp hello_mojo_client_app; + return mojo::RunMainApplication(application_request, &hello_mojo_client_app); }
diff --git a/examples/hello_mojo/hello_mojo_server.cc b/examples/hello_mojo/hello_mojo_server.cc index 6ad9a52..2cde005 100644 --- a/examples/hello_mojo/hello_mojo_server.cc +++ b/examples/hello_mojo/hello_mojo_server.cc
@@ -2,14 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <memory> #include <string> #include <utility> #include "examples/hello_mojo/hello_mojo.mojom.h" #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_runner.h" +#include "mojo/public/cpp/application/application_impl_base.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/application/service_provider_impl.h" #include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/public/cpp/bindings/strong_binding.h" @@ -37,13 +36,13 @@ MOJO_DISALLOW_COPY_AND_ASSIGN(HelloMojoImpl); }; -class HelloMojoServerApp : public mojo::ApplicationDelegate { +class HelloMojoServerApp : public mojo::ApplicationImplBase { public: HelloMojoServerApp() {} ~HelloMojoServerApp() override {} - // |mojo::ApplicationDelegate| implementation: - bool ConfigureIncomingConnection( + // |mojo::ApplicationImplBase| override: + bool OnAcceptConnection( mojo::ServiceProviderImpl* service_provider_impl) override { service_provider_impl->AddService<HelloMojo>( [](const mojo::ConnectionContext& connection_context, @@ -60,7 +59,6 @@ } // namespace MojoResult MojoMain(MojoHandle application_request) { - return mojo::ApplicationRunner(std::unique_ptr<mojo::ApplicationDelegate>( - new HelloMojoServerApp())) - .Run(application_request); + HelloMojoServerApp hello_mojo_server_app; + return mojo::RunMainApplication(application_request, &hello_mojo_server_app); }
diff --git a/examples/media_test/media_test.cc b/examples/media_test/media_test.cc index 5d76004..d8f0858 100644 --- a/examples/media_test/media_test.cc +++ b/examples/media_test/media_test.cc
@@ -14,15 +14,14 @@ // static std::unique_ptr<MediaTest> MediaTest::Create( - mojo::ApplicationImpl* app, + mojo::Shell* shell, const std::string& input_file_name) { - return std::unique_ptr<MediaTest>(new MediaTest(app, input_file_name)); + return std::unique_ptr<MediaTest>(new MediaTest(shell, input_file_name)); } -MediaTest::MediaTest(mojo::ApplicationImpl* app, - const std::string& input_file_name) { +MediaTest::MediaTest(mojo::Shell* shell, const std::string& input_file_name) { MediaFactoryPtr factory; - ConnectToService(app->shell(), "mojo:media_factory", GetProxy(&factory)); + ConnectToService(shell, "mojo:media_factory", GetProxy(&factory)); SeekingReaderPtr reader; factory->CreateNetworkReader(input_file_name, GetProxy(&reader));
diff --git a/examples/media_test/media_test.h b/examples/media_test/media_test.h index ca16de2..57f76d0 100644 --- a/examples/media_test/media_test.h +++ b/examples/media_test/media_test.h
@@ -6,12 +6,14 @@ #define EXAMPLES_MEDIA_TEST_MEDIA_TEST_H_ #include "base/macros.h" -#include "mojo/public/cpp/application/application_impl.h" #include "mojo/services/media/common/cpp/timeline_function.h" #include "mojo/services/media/control/interfaces/media_factory.mojom.h" #include "mojo/services/media/control/interfaces/media_player.mojom.h" namespace mojo { + +class Shell; + namespace media { namespace examples { @@ -22,7 +24,7 @@ using UpdateCallback = std::function<void()>; - static std::unique_ptr<MediaTest> Create(mojo::ApplicationImpl* app, + static std::unique_ptr<MediaTest> Create(mojo::Shell* shell, const std::string& input_file_name); ~MediaTest(); @@ -54,7 +56,7 @@ const MediaMetadataPtr& metadata() const; private: - MediaTest(mojo::ApplicationImpl* app, const std::string& input_file_name); + MediaTest(mojo::Shell* shell, const std::string& input_file_name); // Handles a status update from the player. When called with the default // argument values, initiates status updates.
diff --git a/examples/media_test/media_test_app.cc b/examples/media_test/media_test_app.cc index ff4ba3d..3ce8e8a 100644 --- a/examples/media_test/media_test_app.cc +++ b/examples/media_test/media_test_app.cc
@@ -7,27 +7,26 @@ #include <iostream> #include "base/bind.h" +#include "base/message_loop/message_loop.h" #include "examples/media_test/keystroke.h" #include "examples/media_test/media_test.h" -#include "mojo/application/application_runner_chromium.h" #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" +#include "mojo/public/cpp/application/application_impl_base.h" +#include "mojo/public/cpp/application/run_application.h" namespace mojo { namespace media { namespace examples { -class MediaTestApp : public mojo::ApplicationDelegate { +class MediaTestApp : public mojo::ApplicationImplBase { public: MediaTestApp() {} ~MediaTestApp() override {} - // ApplicationDelegate implementation. - void Initialize(mojo::ApplicationImpl* app) override { - app_ = app; - ProcessArgs(app->args()); + // ApplicationImplBase overrides. + void OnInitialize() override { + ProcessArgs(args()); std::cout << std::endl << "MEDIA TEST" << std::endl << std::endl; @@ -95,7 +94,7 @@ // input_file_names_iter_. void CreateNewMediaTest() { MOJO_DCHECK(input_file_names_iter_ != input_file_names_.end()); - media_test_ = MediaTest::Create(app_, *input_file_names_iter_); + media_test_ = MediaTest::Create(shell(), *input_file_names_iter_); metadata_shown_ = false; media_test_->RegisterUpdateCallback( @@ -294,7 +293,6 @@ const char* clear_line() const { return paint_ ? kClearLine : ""; } - mojo::ApplicationImpl* app_; std::unique_ptr<MediaTest> media_test_; std::deque<std::string> input_file_names_; decltype(input_file_names_.begin()) input_file_names_iter_; @@ -315,7 +313,6 @@ } // namespace mojo MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunnerChromium runner( - new mojo::media::examples::MediaTestApp); - return runner.Run(application_request); + mojo::media::examples::MediaTestApp media_test_app; + return mojo::RunMainApplication(application_request, &media_test_app); }
diff --git a/examples/native_run_app/native_run_app.cc b/examples/native_run_app/native_run_app.cc index 1841ed8..090ba7e 100644 --- a/examples/native_run_app/native_run_app.cc +++ b/examples/native_run_app/native_run_app.cc
@@ -22,11 +22,11 @@ #include "base/logging.h" #include "base/macros.h" #include "base/strings/string_split.h" -#include "mojo/application/application_runner_chromium.h" #include "mojo/public/c/system/main.h" #include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" +#include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/public/cpp/application/connect.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/application/service_provider_impl.h" #include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/public/cpp/bindings/strong_binding.h" @@ -220,21 +220,19 @@ DISALLOW_COPY_AND_ASSIGN(TerminalClientImpl); }; -class NativeRunApp : public mojo::ApplicationDelegate { +class NativeRunApp : public mojo::ApplicationImplBase { public: - NativeRunApp() : application_impl_(nullptr) {} + NativeRunApp() {} ~NativeRunApp() override {} private: - // |mojo::ApplicationDelegate|: - void Initialize(mojo::ApplicationImpl* application_impl) override { - DCHECK(!application_impl_); - application_impl_ = application_impl; - mojo::ConnectToService(application_impl_->shell(), "mojo:native_support", + // |mojo::ApplicationImplBase| overrides: + void OnInitialize() override { + mojo::ConnectToService(shell(), "mojo:native_support", GetProxy(&native_support_process_)); } - bool ConfigureIncomingConnection( + bool OnAcceptConnection( mojo::ServiceProviderImpl* service_provider_impl) override { service_provider_impl->AddService<TerminalClient>( [this](const mojo::ConnectionContext& connection_context, @@ -245,13 +243,12 @@ return true; } - mojo::ApplicationImpl* application_impl_; native_support::ProcessPtr native_support_process_; DISALLOW_COPY_AND_ASSIGN(NativeRunApp); }; MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunnerChromium runner(new NativeRunApp()); - return runner.Run(application_request); + NativeRunApp native_run_app; + return mojo::RunMainApplication(application_request, &native_run_app); }
diff --git a/examples/wget/wget.cc b/examples/wget/wget.cc index 156eeb9..d333093 100644 --- a/examples/wget/wget.cc +++ b/examples/wget/wget.cc
@@ -4,13 +4,10 @@ #include <stdio.h> -#include <memory> - #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" -#include "mojo/public/cpp/application/application_runner.h" +#include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/public/cpp/application/connect.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/system/wait.h" #include "mojo/public/cpp/utility/run_loop.h" #include "mojo/services/network/interfaces/network_service.mojom.h" @@ -75,12 +72,12 @@ } // namespace -class WGetApp : public ApplicationDelegate { +class WGetApp : public ApplicationImplBase { public: - void Initialize(ApplicationImpl* app) override { - ConnectToService(app->shell(), "mojo:network_service", + void OnInitialize() override { + ConnectToService(shell(), "mojo:network_service", GetProxy(&network_service_)); - Start(app->args()); + Start(args()); } private: @@ -114,7 +111,6 @@ } // namespace mojo MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunner runner( - std::unique_ptr<mojo::examples::WGetApp>(new mojo::examples::WGetApp())); - return runner.Run(application_request); + mojo::examples::WGetApp wget_app; + return mojo::RunMainApplication(application_request, &wget_app); }
diff --git a/mojo/application/BUILD.gn b/mojo/application/BUILD.gn index f697dde..e8f7b21 100644 --- a/mojo/application/BUILD.gn +++ b/mojo/application/BUILD.gn
@@ -7,6 +7,7 @@ "application_runner_chromium.cc", "application_runner_chromium.h", "run_application.cc", + "run_application_options_chromium.h", ] public_deps = [
diff --git a/mojo/application/run_application.cc b/mojo/application/run_application.cc index 5a67621..d06feb9 100644 --- a/mojo/application/run_application.cc +++ b/mojo/application/run_application.cc
@@ -12,6 +12,7 @@ #include "base/message_loop/message_loop.h" #include "base/threading/thread_local_storage.h" #include "build/build_config.h" +#include "mojo/application/run_application_options_chromium.h" #include "mojo/message_pump/message_pump_mojo.h" #include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/public/cpp/system/message_pipe.h" @@ -38,7 +39,8 @@ } // namespace MojoResult RunMainApplication(MojoHandle application_request_handle, - ApplicationImplBase* application_impl) { + ApplicationImplBase* application_impl, + const RunApplicationOptions* options) { base::CommandLine::Init(0, nullptr); base::AtExitManager at_exit; @@ -48,20 +50,28 @@ base::debug::EnableInProcessStackDumping(); #endif - return RunApplication(application_request_handle, application_impl); + return RunApplication(application_request_handle, application_impl, options); } MojoResult RunApplication(MojoHandle application_request_handle, - ApplicationImplBase* application_impl) { + ApplicationImplBase* application_impl, + const RunApplicationOptions* options) { DCHECK(!g_current_result_holder.Get()); ResultHolder result_holder; g_current_result_holder.Set(&result_holder); - std::unique_ptr<base::MessageLoop> loop; - // TODO(vtl): Support other types of message loops. (That's why I'm leaving - // |loop| as a unique_ptr.) - loop.reset(new base::MessageLoop(common::MessagePumpMojo::Create())); + // Note: If |options| is non-null, it better point to a + // |RunApplicationOptionsChromium|. + base::MessageLoop::Type message_loop_type = + options + ? static_cast<const RunApplicationOptionsChromium*>(options) + ->message_loop_type + : base::MessageLoop::TYPE_CUSTOM; + std::unique_ptr<base::MessageLoop> loop( + (message_loop_type == base::MessageLoop::TYPE_CUSTOM) + ? new base::MessageLoop(common::MessagePumpMojo::Create()) + : new base::MessageLoop(message_loop_type)); application_impl->Bind(InterfaceRequest<Application>( MakeScopedHandle(MessagePipeHandle(application_request_handle)))); loop->Run();
diff --git a/mojo/application/run_application_options_chromium.h b/mojo/application/run_application_options_chromium.h new file mode 100644 index 0000000..54a5578 --- /dev/null +++ b/mojo/application/run_application_options_chromium.h
@@ -0,0 +1,27 @@ +// Copyright 2016 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. + +#ifndef MOJO_APPLICATION_RUN_APPLICATION_OPTIONS_CHROMIUM_H_ +#define MOJO_APPLICATION_RUN_APPLICATION_OPTIONS_CHROMIUM_H_ + +#include "base/message_loop/message_loop.h" +#include "mojo/public/cpp/application/run_application.h" + +namespace mojo { + +// Options for the "chromium" implementation of |RunMainApplication()| and +// |RunApplication()|. +class RunApplicationOptionsChromium : public RunApplicationOptions { + public: + explicit RunApplicationOptionsChromium( + base::MessageLoop::Type message_loop_type) + : message_loop_type(message_loop_type) {} + ~RunApplicationOptionsChromium() {} + + base::MessageLoop::Type message_loop_type; +}; + +} // namespace mojo + +#endif // MOJO_APPLICATION_RUN_APPLICATION_OPTIONS_CHROMIUM_H_
diff --git a/mojo/public/cpp/application/lib/run_application.cc b/mojo/public/cpp/application/lib/run_application.cc index e34d245..570736a 100644 --- a/mojo/public/cpp/application/lib/run_application.cc +++ b/mojo/public/cpp/application/lib/run_application.cc
@@ -61,12 +61,15 @@ } // namespace MojoResult RunMainApplication(MojoHandle application_request_handle, - ApplicationImplBase* application_impl) { - return RunApplication(application_request_handle, application_impl); + ApplicationImplBase* application_impl, + const RunApplicationOptions* options) { + return RunApplication(application_request_handle, application_impl, options); } MojoResult RunApplication(MojoHandle application_request_handle, - ApplicationImplBase* application_impl) { + ApplicationImplBase* application_impl, + const RunApplicationOptions* options) { + assert(!options); // No options supported! assert(!GetCurrentResultHolder()); ResultHolder result_holder;
diff --git a/mojo/public/cpp/application/run_application.h b/mojo/public/cpp/application/run_application.h index 3f323d9..d22de41 100644 --- a/mojo/public/cpp/application/run_application.h +++ b/mojo/public/cpp/application/run_application.h
@@ -12,6 +12,17 @@ class ApplicationImplBase; +// Base class for options to |RunMainApplication()| and |RunApplication()|. An +// implementation of these functions may (but need not, in which case no options +// are available) separately provide an implementation subclass, which would be +// specific to that implementation. (The "standalone" implementation has no +// options.) +class RunApplicationOptions { + protected: + RunApplicationOptions() {} + ~RunApplicationOptions() {} +}; + // |RunMainApplication()| and |RunApplication()| set up a message (run) loop and // run the provided application implementation. |RunMainApplication()| should be // used on the application's main thread (e.g., from |MojoMain()|) and may do @@ -31,11 +42,15 @@ // running a message loop of some sort). // // |*application_impl| must remain alive until the message loop starts running -// (thus it may own itself). +// (thus it may own itself). If |options| is non-null, then it must point to an +// instance of an implementation-specific subclass of |RunApplicationOptions|; +// |*options| must remain alive for the duration of the call. MojoResult RunMainApplication(MojoHandle application_request_handle, - ApplicationImplBase* application_impl); + ApplicationImplBase* application_impl, + const RunApplicationOptions* options = nullptr); MojoResult RunApplication(MojoHandle application_request_handle, - ApplicationImplBase* application_impl); + ApplicationImplBase* application_impl, + const RunApplicationOptions* options = nullptr); // |TerminateMainApplication()| and |TerminateApplication()| terminate the // application that is running on the current thread. They may only be called
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.cc b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.cc index e936ae5..a67a566 100644 --- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.cc +++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.cc
@@ -4,7 +4,7 @@ #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h" -#include "mojo/public/cpp/application/application_impl.h" +#include "mojo/public/cpp/application/service_provider_impl.h" #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h" namespace mojo { @@ -13,14 +13,9 @@ } AuthenticatingURLLoaderInterceptorApp:: - ~AuthenticatingURLLoaderInterceptorApp() { -} + ~AuthenticatingURLLoaderInterceptorApp() {} -void AuthenticatingURLLoaderInterceptorApp::Initialize(ApplicationImpl* app) { - app_ = app; -} - -bool AuthenticatingURLLoaderInterceptorApp::ConfigureIncomingConnection( +bool AuthenticatingURLLoaderInterceptorApp::OnAcceptConnection( ServiceProviderImpl* service_provider_impl) { service_provider_impl->AddService< AuthenticatingURLLoaderInterceptorMetaFactory>([this]( @@ -31,8 +26,8 @@ if (app_url.is_valid()) { app_origin = app_url.GetOrigin(); } - new AuthenticatingURLLoaderInterceptorMetaFactoryImpl(request.Pass(), app_, - &tokens_[app_origin]); + new AuthenticatingURLLoaderInterceptorMetaFactoryImpl( + request.Pass(), shell(), &tokens_[app_origin]); }); return true; }
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h index 8af5c34..bfa0a0e 100644 --- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h +++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h
@@ -6,25 +6,21 @@ #define SERVICES_AUTHENTICATING_URL_LOADER_INTERCEPTOR_AUTHENTICATING_URL_LOADER_INTERCEPTOR_APP_H_ #include "base/macros.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/service_provider_impl.h" +#include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/services/authenticating_url_loader_interceptor/interfaces/authenticating_url_loader_interceptor_meta_factory.mojom.h" #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h" namespace mojo { -class AuthenticatingURLLoaderInterceptorApp : public ApplicationDelegate { +class AuthenticatingURLLoaderInterceptorApp : public ApplicationImplBase { public: AuthenticatingURLLoaderInterceptorApp(); ~AuthenticatingURLLoaderInterceptorApp() override; private: - // ApplicationDelegate - void Initialize(ApplicationImpl* app) override; - bool ConfigureIncomingConnection( - ServiceProviderImpl* service_provider_impl) override; + // ApplicationImplBase override: + bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override; - ApplicationImpl* app_; // Cache received tokens per origin of the connecting app and origin of the // loaded URL so that once a token has been requested it is not necessary to // do nultiple http connections to retrieve additional resources on the same
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.cc b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.cc index 38ac0e9..61f2e0a 100644 --- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.cc +++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.cc
@@ -9,7 +9,6 @@ #include "base/bind.h" #include "base/logging.h" #include "base/stl_util.h" -#include "mojo/public/cpp/application/application_impl.h" #include "mojo/public/cpp/application/connect.h" #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor.h" @@ -20,15 +19,13 @@ mojo::InterfaceRequest<URLLoaderInterceptorFactory> request, mojo::InterfaceHandle<authentication::AuthenticationService> authentication_service, - mojo::ApplicationImpl* app, + mojo::Shell* shell, std::map<GURL, std::string>* cached_tokens) : binding_(this, request.Pass()), authentication_service_(authentication::AuthenticationServicePtr::Create( std::move(authentication_service))), - app_(app), cached_tokens_(cached_tokens) { - ConnectToService(app_->shell(), "mojo:network_service", - GetProxy(&network_service_)); + ConnectToService(shell, "mojo:network_service", GetProxy(&network_service_)); authentication_service_.set_connection_error_handler( [this]() { ClearAuthenticationService(); }); }
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h index 62a3d81..e962680 100644 --- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h +++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h
@@ -16,18 +16,19 @@ namespace mojo { -class ApplicationImpl; - class AuthenticatingURLLoaderInterceptor; +class Shell; class AuthenticatingURLLoaderInterceptorFactory : public URLLoaderInterceptorFactory { public: + // TODO(vtl): Maybe this should take an |ApplicationConnectorPtr| instead of a + // |Shell*|. AuthenticatingURLLoaderInterceptorFactory( mojo::InterfaceRequest<URLLoaderInterceptorFactory> request, mojo::InterfaceHandle<authentication::AuthenticationService> authentication_service, - mojo::ApplicationImpl* app, + mojo::Shell* shell, std::map<GURL, std::string>* cached_tokens); ~AuthenticatingURLLoaderInterceptorFactory() override; @@ -61,7 +62,6 @@ StrongBinding<URLLoaderInterceptorFactory> binding_; authentication::AuthenticationServicePtr authentication_service_; - ApplicationImpl* app_; std::map<GURL, std::string>* cached_tokens_; std::map<GURL, std::string> cached_accounts_; NetworkServicePtr network_service_;
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.cc b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.cc index 15b4541..be5c5de 100644 --- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.cc +++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.cc
@@ -6,7 +6,6 @@ #include <utility> -#include "mojo/public/cpp/application/application_impl.h" #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h" namespace mojo { @@ -15,14 +14,14 @@ AuthenticatingURLLoaderInterceptorMetaFactoryImpl( mojo::InterfaceRequest<AuthenticatingURLLoaderInterceptorMetaFactory> request, - mojo::ApplicationImpl* app, + mojo::Shell* shell, std::map<GURL, std::string>* cached_tokens) - : binding_(this, request.Pass()), app_(app), cached_tokens_(cached_tokens) { -} + : binding_(this, request.Pass()), + shell_(shell), + cached_tokens_(cached_tokens) {} AuthenticatingURLLoaderInterceptorMetaFactoryImpl:: - ~AuthenticatingURLLoaderInterceptorMetaFactoryImpl() { -} + ~AuthenticatingURLLoaderInterceptorMetaFactoryImpl() {} void AuthenticatingURLLoaderInterceptorMetaFactoryImpl:: CreateURLLoaderInterceptorFactory( @@ -30,7 +29,7 @@ InterfaceHandle<authentication::AuthenticationService> authentication_service) { new AuthenticatingURLLoaderInterceptorFactory( - factory_request.Pass(), std::move(authentication_service), app_, + factory_request.Pass(), std::move(authentication_service), shell_, cached_tokens_); }
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h index 5b3a047..8596c03 100644 --- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h +++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h
@@ -16,7 +16,7 @@ namespace mojo { -class ApplicationImpl; +class Shell; class AuthenticatingURLLoaderInterceptorMetaFactoryImpl : public AuthenticatingURLLoaderInterceptorMetaFactory { @@ -24,7 +24,7 @@ AuthenticatingURLLoaderInterceptorMetaFactoryImpl( mojo::InterfaceRequest<AuthenticatingURLLoaderInterceptorMetaFactory> request, - mojo::ApplicationImpl* app, + mojo::Shell* shell, std::map<GURL, std::string>* cached_tokens); ~AuthenticatingURLLoaderInterceptorMetaFactoryImpl() override; @@ -36,7 +36,7 @@ authentication_service) override; StrongBinding<AuthenticatingURLLoaderInterceptorMetaFactory> binding_; - ApplicationImpl* app_; + Shell* const shell_; std::map<GURL, std::string>* cached_tokens_; };
diff --git a/services/authenticating_url_loader_interceptor/main.cc b/services/authenticating_url_loader_interceptor/main.cc index e375196..ff9548e 100644 --- a/services/authenticating_url_loader_interceptor/main.cc +++ b/services/authenticating_url_loader_interceptor/main.cc
@@ -2,12 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "mojo/application/application_runner_chromium.h" #include "mojo/public/c/system/main.h" +#include "mojo/public/cpp/application/run_application.h" #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h" MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunnerChromium runner( - new mojo::AuthenticatingURLLoaderInterceptorApp); - return runner.Run(application_request); + mojo::AuthenticatingURLLoaderInterceptorApp app; + return mojo::RunMainApplication(application_request, &app); }
diff --git a/services/files/files_app.cc b/services/files/files_app.cc index 368b5a0..b5e4f3b 100644 --- a/services/files/files_app.cc +++ b/services/files/files_app.cc
@@ -4,6 +4,7 @@ #include "services/files/files_app.h" +#include "mojo/public/cpp/application/service_provider_impl.h" #include "mojo/services/files/interfaces/files.mojom.h" #include "services/files/files_impl.h" @@ -13,8 +14,7 @@ FilesApp::FilesApp() {} FilesApp::~FilesApp() {} -bool FilesApp::ConfigureIncomingConnection( - ServiceProviderImpl* service_provider_impl) { +bool FilesApp::OnAcceptConnection(ServiceProviderImpl* service_provider_impl) { service_provider_impl->AddService<Files>( [](const ConnectionContext& connection_context, InterfaceRequest<Files> files_request) {
diff --git a/services/files/files_app.h b/services/files/files_app.h index 3bd7810..70b022d 100644 --- a/services/files/files_app.h +++ b/services/files/files_app.h
@@ -6,21 +6,19 @@ #define SERVICES_FILES_FILES_APP_H_ #include "base/macros.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/service_provider_impl.h" +#include "mojo/public/cpp/application/application_impl_base.h" namespace mojo { namespace files { -class FilesApp : public ApplicationDelegate { +class FilesApp : public ApplicationImplBase { public: FilesApp(); ~FilesApp() override; private: - // |ApplicationDelegate| override: - bool ConfigureIncomingConnection( - ServiceProviderImpl* service_provider_impl) override; + // |ApplicationImplBase| override: + bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override; DISALLOW_COPY_AND_ASSIGN(FilesApp); };
diff --git a/services/files/main.cc b/services/files/main.cc index 07effcf..500cd9e 100644 --- a/services/files/main.cc +++ b/services/files/main.cc
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "mojo/application/application_runner_chromium.h" #include "mojo/public/c/system/main.h" +#include "mojo/public/cpp/application/run_application.h" #include "services/files/files_app.h" MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunnerChromium runner(new mojo::files::FilesApp()); - return runner.Run(application_request); + mojo::files::FilesApp files_app; + return mojo::RunMainApplication(application_request, &files_app); }
diff --git a/services/keyboard/linux/main.cc b/services/keyboard/linux/main.cc index b96e49f..4784487 100644 --- a/services/keyboard/linux/main.cc +++ b/services/keyboard/linux/main.cc
@@ -3,12 +3,9 @@ // found in the LICENSE file. #include "base/macros.h" -#include "base/threading/sequenced_worker_pool.h" -#include "mojo/application/application_runner_chromium.h" #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" -#include "mojo/public/cpp/application/connect.h" +#include "mojo/public/cpp/application/application_impl_base.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/application/service_provider_impl.h" #include "mojo/services/native_viewport/interfaces/native_viewport_event_dispatcher.mojom.h" #include "services/keyboard/linux/keyboard_service_impl.h" @@ -34,15 +31,14 @@ DISALLOW_COPY_AND_ASSIGN(KeyboardServiceFactoryImpl); }; -class KeyboardServiceApp : public mojo::ApplicationDelegate { +class KeyboardServiceApp : public mojo::ApplicationImplBase { public: KeyboardServiceApp() {} ~KeyboardServiceApp() override {} private: - - // |ApplicationDelegate| override: - bool ConfigureIncomingConnection( + // |ApplicationImplBase| override: + bool OnAcceptConnection( mojo::ServiceProviderImpl* service_provider_impl) override { service_provider_impl->AddService<KeyboardServiceFactory>([]( const mojo::ConnectionContext& connection_context, @@ -60,7 +56,6 @@ } // namespace keyboard MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunnerChromium runner( - new keyboard::KeyboardServiceApp()); - return runner.Run(application_request); + keyboard::KeyboardServiceApp keyboard_service_app; + return mojo::RunMainApplication(application_request, &keyboard_service_app); }
diff --git a/services/media/audio/audio_server_app.cc b/services/media/audio/audio_server_app.cc index ef268c9..0da6188 100644 --- a/services/media/audio/audio_server_app.cc +++ b/services/media/audio/audio_server_app.cc
@@ -3,10 +3,9 @@ // found in the LICENSE file. #include "base/logging.h" -#include "mojo/application/application_runner_chromium.h" #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" +#include "mojo/public/cpp/application/run_application.h" +#include "mojo/public/cpp/application/service_provider_impl.h" #include "services/media/audio/audio_server_app.h" namespace mojo { @@ -14,13 +13,12 @@ namespace audio { AudioServerApp::AudioServerApp() {} + AudioServerApp::~AudioServerApp() {} -void AudioServerApp::Initialize(ApplicationImpl* app) { - server_impl_.Initialize(); -} +void AudioServerApp::OnInitialize() {} -bool AudioServerApp::ConfigureIncomingConnection( +bool AudioServerApp::OnAcceptConnection( ServiceProviderImpl* service_provider_impl) { service_provider_impl->AddService<AudioServer>( [this](const ConnectionContext& connection_context, @@ -30,15 +28,11 @@ return true; } -void AudioServerApp::Quit() { -} - } // namespace audio } // namespace media } // namespace mojo MojoResult MojoMain(MojoHandle app_request) { - mojo::ApplicationRunnerChromium runner( - new mojo::media::audio::AudioServerApp); - return runner.Run(app_request); + mojo::media::audio::AudioServerApp audio_server_app; + return mojo::RunMainApplication(app_request, &audio_server_app); }
diff --git a/services/media/audio/audio_server_app.h b/services/media/audio/audio_server_app.h index 87f6a39..6de3b15 100644 --- a/services/media/audio/audio_server_app.h +++ b/services/media/audio/audio_server_app.h
@@ -6,7 +6,7 @@ #define SERVICES_MEDIA_AUDIO_AUDIO_SERVER_APP_H_ #include "mojo/common/binding_set.h" -#include "mojo/public/cpp/application/application_delegate.h" +#include "mojo/public/cpp/application/application_impl_base.h" #include "mojo/services/media/audio/interfaces/audio_server.mojom.h" #include "services/media/audio/audio_server_impl.h" @@ -14,16 +14,14 @@ namespace media { namespace audio { -class AudioServerApp : public ApplicationDelegate { +class AudioServerApp : public ApplicationImplBase { public: AudioServerApp(); ~AudioServerApp() override; - // ApplicationDelegate - void Initialize(ApplicationImpl* app) override; - bool ConfigureIncomingConnection( - ServiceProviderImpl* service_provider_impl) override; - void Quit() override; + // ApplicationImplBase overrides: + void OnInitialize() override; + bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override; private: AudioServerImpl server_impl_;
diff --git a/services/native_support/main.cc b/services/native_support/main.cc index 912ebc6..e174a31 100644 --- a/services/native_support/main.cc +++ b/services/native_support/main.cc
@@ -6,9 +6,10 @@ #include "base/memory/ref_counted.h" #include "base/message_loop/message_loop.h" #include "base/threading/sequenced_worker_pool.h" -#include "mojo/application/application_runner_chromium.h" +#include "mojo/application/run_application_options_chromium.h" #include "mojo/public/c/system/main.h" -#include "mojo/public/cpp/application/application_delegate.h" +#include "mojo/public/cpp/application/application_impl_base.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/application/service_provider_impl.h" #include "mojo/services/native_support/interfaces/process.mojom.h" #include "services/native_support/process_impl.h" @@ -18,17 +19,18 @@ // TODO(vtl): Having to manually choose an arbitrary number is dumb. const size_t kMaxWorkerThreads = 16; -class NativeSupportApp : public mojo::ApplicationDelegate { +class NativeSupportApp : public mojo::ApplicationImplBase { public: NativeSupportApp() {} ~NativeSupportApp() override { - if (worker_pool_) - worker_pool_->Shutdown(); + // TODO(vtl): Doing this here is a bit of a hack, but we may not + // consistently call |OnQuit()|. + OnQuit(); } private: - // |mojo::ApplicationDelegate| override: - bool ConfigureIncomingConnection( + // |mojo::ApplicationImplBase| overrides: + bool OnAcceptConnection( mojo::ServiceProviderImpl* service_provider_impl) override { service_provider_impl->AddService<Process>([this]( const mojo::ConnectionContext& connection_context, @@ -42,6 +44,13 @@ return true; } + void OnQuit() override { + if (worker_pool_) { + worker_pool_->Shutdown(); + worker_pool_ = nullptr; + } + } + scoped_refptr<base::SequencedWorkerPool> worker_pool_; DISALLOW_COPY_AND_ASSIGN(NativeSupportApp); @@ -50,9 +59,9 @@ } // namespace native_support MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunnerChromium runner( - new native_support::NativeSupportApp()); + native_support::NativeSupportApp native_support_app; // We need an I/O message loop, since we'll want to watch FDs. - runner.set_message_loop_type(base::MessageLoop::TYPE_IO); - return runner.Run(application_request); + mojo::RunApplicationOptionsChromium options(base::MessageLoop::TYPE_IO); + return mojo::RunMainApplication(application_request, &native_support_app, + &options); }
diff --git a/services/prediction/prediction_service_impl.cc b/services/prediction/prediction_service_impl.cc index 42bf597..ce26d6e 100644 --- a/services/prediction/prediction_service_impl.cc +++ b/services/prediction/prediction_service_impl.cc
@@ -4,8 +4,9 @@ #include "services/prediction/prediction_service_impl.h" -#include "mojo/application/application_runner_chromium.h" #include "mojo/public/c/system/main.h" +#include "mojo/public/cpp/application/application_impl_base.h" +#include "mojo/public/cpp/application/run_application.h" #include "mojo/public/cpp/application/service_provider_impl.h" namespace prediction { @@ -30,24 +31,27 @@ callback.Run(prediction_list.Pass()); } -PredictionServiceDelegate::PredictionServiceDelegate() {} +// TODO(vtl): Maybe this (and MojoMain()) should go in a different file? +class PredictionServiceApp : public mojo::ApplicationImplBase { + public: + PredictionServiceApp() {} + ~PredictionServiceApp() override {} -PredictionServiceDelegate::~PredictionServiceDelegate() {} - -bool PredictionServiceDelegate::ConfigureIncomingConnection( - mojo::ServiceProviderImpl* service_provider_impl) { - service_provider_impl->AddService<PredictionService>( - [](const mojo::ConnectionContext& connection_context, - mojo::InterfaceRequest<PredictionService> prediction_service_request) { - new PredictionServiceImpl(prediction_service_request.Pass()); - }); - return true; -} + // mojo::ApplicationImplBase override: + bool OnAcceptConnection( + mojo::ServiceProviderImpl* service_provider_impl) override { + service_provider_impl->AddService<PredictionService>([]( + const mojo::ConnectionContext& connection_context, + mojo::InterfaceRequest<PredictionService> prediction_service_request) { + new PredictionServiceImpl(prediction_service_request.Pass()); + }); + return true; + } +}; } // namespace prediction MojoResult MojoMain(MojoHandle application_request) { - mojo::ApplicationRunnerChromium runner( - new prediction::PredictionServiceDelegate()); - return runner.Run(application_request); + prediction::PredictionServiceApp prediction_service_app; + return mojo::RunMainApplication(application_request, &prediction_service_app); }
diff --git a/services/prediction/prediction_service_impl.h b/services/prediction/prediction_service_impl.h index dc02b87..b1d9944 100644 --- a/services/prediction/prediction_service_impl.h +++ b/services/prediction/prediction_service_impl.h
@@ -6,7 +6,6 @@ #define SERVICES_PREDICTION_PREDICTION_SERVICE_IMPL_H_ #include "base/memory/scoped_ptr.h" -#include "mojo/public/cpp/application/application_delegate.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/services/prediction/interfaces/prediction.mojom.h" #include "services/prediction/dictionary_service.h" @@ -32,16 +31,6 @@ DISALLOW_COPY_AND_ASSIGN(PredictionServiceImpl); }; -class PredictionServiceDelegate : public mojo::ApplicationDelegate { - public: - PredictionServiceDelegate(); - ~PredictionServiceDelegate() override; - - // mojo::ApplicationDelegate implementation - bool ConfigureIncomingConnection( - mojo::ServiceProviderImpl* service_provider_impl) override; -}; - } // namespace prediction #endif // SERVICES_PREDICTION_PREDICTION_SERVICE_IMPL_H_