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_