Add implementations of mojo::{Run,Terminate}[Main]Application() for "chromium".
And convert a bunch of uses of ApplicationRunnerChromium (and
ApplicationDelegate). Mostly, I converted stuff until I got bored.
But:
* I still have to convert some Mozart-related base classes.
* I also have to fix the tracing library to not take an
ApplicationImpl*.
* I have to add the ability to set the message loop type.
* I made Run[Main]Application() return MOJO_RESULT_OK by default (e.g.,
if the message loop was quit via something other than
Terminate[Main]Application()), since it's what
ApplicationRunner[Chromium] did (and some tests rely on this). We
should fix this.
R=vardhan@google.com
Review URL: https://codereview.chromium.org/2005103003 .
diff --git a/examples/echo_terminal/main.cc b/examples/echo_terminal/main.cc
index 6c56eaf..518be21 100644
--- a/examples/echo_terminal/main.cc
+++ b/examples/echo_terminal/main.cc
@@ -8,10 +8,10 @@
#include "base/bind_helpers.h"
#include "base/logging.h"
#include "base/macros.h"
-#include "mojo/application/application_runner_chromium.h"
#include "mojo/common/binding_set.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/files/interfaces/file.mojom.h"
#include "mojo/services/files/interfaces/types.mojom.h"
@@ -95,16 +95,15 @@
DISALLOW_COPY_AND_ASSIGN(TerminalEchoer);
};
-class EchoTerminalApp
- : public mojo::ApplicationDelegate,
- public mojo::terminal::TerminalClient {
+class EchoTerminalApp : public mojo::ApplicationImplBase,
+ public mojo::terminal::TerminalClient {
public:
EchoTerminalApp() {}
~EchoTerminalApp() override {}
private:
- // |ApplicationDelegate| override:
- bool ConfigureIncomingConnection(
+ // |ApplicationImplBase| override:
+ bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override {
service_provider_impl->AddService<mojo::terminal::TerminalClient>(
[this](const mojo::ConnectionContext& connection_context,
@@ -130,6 +129,6 @@
};
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new EchoTerminalApp());
- return runner.Run(application_request);
+ EchoTerminalApp echo_terminal_app;
+ return mojo::RunMainApplication(application_request, &echo_terminal_app);
}
diff --git a/examples/http_handler/http_handler.cc b/examples/http_handler/http_handler.cc
index af4a4cf..95fe142 100644
--- a/examples/http_handler/http_handler.cc
+++ b/examples/http_handler/http_handler.cc
@@ -3,11 +3,10 @@
// found in the LICENSE file.
#include "base/bind.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/bindings/interface_ptr.h"
#include "mojo/public/cpp/system/message_pipe.h"
#include "mojo/services/http_server/cpp/http_server_util.h"
@@ -21,20 +20,20 @@
// This is an example of a self-contained HTTP handler. It uses the HTTP Server
// service to handle the HTTP protocol details, and just contains the logic for
// handling its registered urls.
-class HttpHandler : public ApplicationDelegate,
+class HttpHandler : public ApplicationImplBase,
public http_server::HttpHandler {
public:
HttpHandler() : binding_(this) {}
~HttpHandler() override {}
private:
- // ApplicationDelegate:
- void Initialize(ApplicationImpl* app) override {
+ // ApplicationImplBase override:
+ void OnInitialize() override {
http_server::HttpHandlerPtr http_handler_ptr;
binding_.Bind(GetProxy(&http_handler_ptr));
http_server::HttpServerFactoryPtr http_server_factory;
- ConnectToService(app->shell(), "mojo:http_server",
+ ConnectToService(shell(), "mojo:http_server",
GetProxy(&http_server_factory));
mojo::NetAddressPtr local_address(mojo::NetAddress::New());
@@ -76,6 +75,6 @@
} // namespace mojo
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new mojo::examples::HttpHandler());
- return runner.Run(application_request);
+ mojo::examples::HttpHandler http_handler;
+ return mojo::RunMainApplication(application_request, &http_handler);
}
diff --git a/examples/notification_generator/notification_generator.cc b/examples/notification_generator/notification_generator.cc
index 17bb081..9b173be 100644
--- a/examples/notification_generator/notification_generator.cc
+++ b/examples/notification_generator/notification_generator.cc
@@ -6,12 +6,12 @@
#include "base/bind.h"
#include "base/macros.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "base/message_loop/message_loop.h"
#include "mojo/common/binding_set.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/services/notifications/interfaces/notifications.mojom.h"
namespace examples {
@@ -19,16 +19,16 @@
static const base::TimeDelta kDefaultMessageDelay =
base::TimeDelta::FromMilliseconds(3000);
-class NotificationGeneratorDelegate : public mojo::ApplicationDelegate,
- public notifications::NotificationClient {
+class NotificationGeneratorApp : public mojo::ApplicationImplBase,
+ public notifications::NotificationClient {
public:
- NotificationGeneratorDelegate() {}
+ NotificationGeneratorApp() {}
- ~NotificationGeneratorDelegate() override {}
+ ~NotificationGeneratorApp() override {}
- // mojo::ApplicationDelegate implementation.
- void Initialize(mojo::ApplicationImpl* app) override {
- mojo::ConnectToService(app->shell(), "mojo:notifications",
+ // mojo::ApplicationImplBase implementation.
+ void OnInitialize() override {
+ mojo::ConnectToService(shell(), "mojo:notifications",
GetProxy(¬ification_service_));
PostFirstNotification();
}
@@ -47,17 +47,15 @@
void PostFirstNotification() {
PostNotification("First notification", "Next: Second will be created",
&first_notification_);
- PostDelayed(
- base::Bind(&NotificationGeneratorDelegate::PostSecondNotification,
- base::Unretained(this)));
+ PostDelayed(base::Bind(&NotificationGeneratorApp::PostSecondNotification,
+ base::Unretained(this)));
}
void PostSecondNotification() {
PostNotification("Second notification", "Next: First will be updated",
&second_notification_);
- PostDelayed(
- base::Bind(&NotificationGeneratorDelegate::UpdateFirstNotification,
- base::Unretained(this)));
+ PostDelayed(base::Bind(&NotificationGeneratorApp::UpdateFirstNotification,
+ base::Unretained(this)));
}
void PostNotification(const char* title,
@@ -76,23 +74,20 @@
first_notification_->Update(
CreateNotificationData("First notification updated",
"Next: both cancelled; repeat").Pass());
- PostDelayed(
- base::Bind(&NotificationGeneratorDelegate::CancelSecondNotification,
- base::Unretained(this)));
+ PostDelayed(base::Bind(&NotificationGeneratorApp::CancelSecondNotification,
+ base::Unretained(this)));
}
void CancelSecondNotification() {
second_notification_->Cancel();
- PostDelayed(
- base::Bind(&NotificationGeneratorDelegate::CancelFirstNotification,
- base::Unretained(this)));
+ PostDelayed(base::Bind(&NotificationGeneratorApp::CancelFirstNotification,
+ base::Unretained(this)));
}
void CancelFirstNotification() {
first_notification_->Cancel();
- PostDelayed(
- base::Bind(&NotificationGeneratorDelegate::PostFirstNotification,
- base::Unretained(this)));
+ PostDelayed(base::Bind(&NotificationGeneratorApp::PostFirstNotification,
+ base::Unretained(this)));
}
notifications::NotificationDataPtr CreateNotificationData(const char* title,
@@ -117,13 +112,13 @@
notifications::NotificationPtr dismissed_notification_;
notifications::NotificationPtr select_notification_;
- DISALLOW_COPY_AND_ASSIGN(NotificationGeneratorDelegate);
+ DISALLOW_COPY_AND_ASSIGN(NotificationGeneratorApp);
};
} // namespace examples
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(
- new examples::NotificationGeneratorDelegate);
- return runner.Run(application_request);
+ examples::NotificationGeneratorApp notification_generator_app;
+ return mojo::RunMainApplication(application_request,
+ ¬ification_generator_app);
}
diff --git a/mojo/application/BUILD.gn b/mojo/application/BUILD.gn
index 08e7f95..f697dde 100644
--- a/mojo/application/BUILD.gn
+++ b/mojo/application/BUILD.gn
@@ -6,6 +6,7 @@
sources = [
"application_runner_chromium.cc",
"application_runner_chromium.h",
+ "run_application.cc",
]
public_deps = [
@@ -13,9 +14,9 @@
]
deps = [
"//base",
+ "//mojo/environment:chromium",
"//mojo/message_pump",
"//mojo/public/cpp/system",
- "//mojo/environment:chromium",
]
}
diff --git a/mojo/application/run_application.cc b/mojo/application/run_application.cc
new file mode 100644
index 0000000..bee1f41
--- /dev/null
+++ b/mojo/application/run_application.cc
@@ -0,0 +1,96 @@
+// 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.
+
+#include "mojo/public/cpp/application/run_application.h"
+
+#include <memory>
+
+#include "base/at_exit.h"
+#include "base/command_line.h"
+#include "base/debug/stack_trace.h"
+#include "base/message_loop/message_loop.h"
+#include "base/threading/thread_local_storage.h"
+#include "build/build_config.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"
+
+namespace mojo {
+
+namespace {
+
+base::ThreadLocalStorage::StaticSlot g_current_result_holder = TLS_INITIALIZER;
+
+// We store a pointer to a |ResultHolder|, which just stores a |MojoResult|, in
+// TLS so that |TerminateApplication()| can provide the result that
+// |RunApplication()| will return. (The |ResultHolder| is just on
+// |RunApplication()|'s stack.)
+struct ResultHolder {
+#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
+ bool is_set = false;
+#endif
+ // TODO(vtl): The default result should probably be |MOJO_RESULT_UNKNOWN|, but
+ // |ApplicationRunnerChromium| always returned |MOJO_RESULT_OK|.
+ MojoResult result = MOJO_RESULT_OK;
+};
+
+} // namespace
+
+MojoResult RunMainApplication(MojoHandle application_request_handle,
+ ApplicationImplBase* application_impl) {
+ base::CommandLine::Init(0, nullptr);
+ base::AtExitManager at_exit;
+
+ g_current_result_holder.Initialize(nullptr);
+
+#if !defined(NDEBUG) && !defined(OS_NACL)
+ base::debug::EnableInProcessStackDumping();
+#endif
+
+ return RunApplication(application_request_handle, application_impl);
+}
+
+MojoResult RunApplication(MojoHandle application_request_handle,
+ ApplicationImplBase* application_impl) {
+ 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()));
+ application_impl->Bind(InterfaceRequest<Application>(
+ MakeScopedHandle(MessagePipeHandle(application_request_handle))));
+ loop->Run();
+
+ g_current_result_holder.Set(nullptr);
+
+ // TODO(vtl): We'd like to enable the following assertion, but we quit the
+ // current message loop directly in various places.
+ // DCHECK(result_holder.is_set);
+
+ return result_holder.result;
+}
+
+void TerminateMainApplication(MojoResult result) {
+ TerminateApplication(result);
+}
+
+void TerminateApplication(MojoResult result) {
+ DCHECK(base::MessageLoop::current()->is_running());
+ base::MessageLoop::current()->Quit();
+
+ ResultHolder* result_holder =
+ static_cast<ResultHolder*>(g_current_result_holder.Get());
+ DCHECK(result_holder);
+ DCHECK(!result_holder->is_set);
+ result_holder->result = result;
+#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
+ result_holder->is_set = true;
+#endif
+}
+
+} // namespace mojo
diff --git a/mojo/public/cpp/application/lib/run_application.cc b/mojo/public/cpp/application/lib/run_application.cc
index 4ca4a1a..e34d245 100644
--- a/mojo/public/cpp/application/lib/run_application.cc
+++ b/mojo/public/cpp/application/lib/run_application.cc
@@ -25,7 +25,9 @@
#ifndef NDEBUG
bool is_set = false;
#endif
- MojoResult result = MOJO_RESULT_UNKNOWN;
+ // TODO(vtl): The default result should probably be |MOJO_RESULT_UNKNOWN|, but
+ // |ApplicationRunner| always returned |MOJO_RESULT_OK|.
+ MojoResult result = MOJO_RESULT_OK;
};
pthread_key_t g_current_result_holder_key;
diff --git a/services/asset_bundle/main.cc b/services/asset_bundle/main.cc
index fc3fdf7..d6c8d63 100644
--- a/services/asset_bundle/main.cc
+++ b/services/asset_bundle/main.cc
@@ -4,30 +4,29 @@
#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_base.h"
+#include "mojo/public/cpp/application/run_application.h"
#include "mojo/public/cpp/application/service_provider_impl.h"
#include "services/asset_bundle/asset_unpacker_impl.h"
namespace mojo {
namespace asset_bundle {
-class AssetBundleApp : public ApplicationDelegate {
+class AssetBundleApp : public ApplicationImplBase {
public:
AssetBundleApp() {}
~AssetBundleApp() override {}
private:
- // |ApplicationDelegate| override:
- bool ConfigureIncomingConnection(
- ServiceProviderImpl* service_provider_impl) override {
+ // |ApplicationImplBase| override:
+ bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
service_provider_impl->AddService<AssetUnpacker>(
[this](const ConnectionContext& connection_context,
InterfaceRequest<AssetUnpacker> asset_unpacker_request) {
// Lazily initialize |sequenced_worker_pool_|. (We can't create it in
// the constructor, since AtExitManager is only created in
- // ApplicationRunnerChromium::Run().)
+ // mojo::RunMainApplication().)
if (!sequenced_worker_pool_) {
// TODO(vtl): What's the "right" way to choose the maximum number of
// threads?
@@ -54,7 +53,6 @@
} // namespace mojo
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(
- new mojo::asset_bundle::AssetBundleApp());
- return runner.Run(application_request);
+ mojo::asset_bundle::AssetBundleApp asset_bundle_app;
+ return mojo::RunMainApplication(application_request, &asset_bundle_app);
}
diff --git a/services/authentication/main.cc b/services/authentication/main.cc
index dd77d35..331d306 100644
--- a/services/authentication/main.cc
+++ b/services/authentication/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/common/binding_set.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/strong_binding.h"
#include "mojo/public/cpp/system/macros.h"
@@ -17,20 +16,18 @@
namespace authentication {
-class GoogleAccountManagerApp : public mojo::ApplicationDelegate {
+class GoogleAccountManagerApp : public mojo::ApplicationImplBase {
public:
GoogleAccountManagerApp() {}
~GoogleAccountManagerApp() override {}
- void Initialize(mojo::ApplicationImpl* app) override {
- mojo::ConnectToService(app->shell(), "mojo:network_service",
+ void OnInitialize() override {
+ mojo::ConnectToService(shell(), "mojo:network_service",
GetProxy(&network_service_));
- mojo::ConnectToService(app->shell(), "mojo:files", GetProxy(&files_));
-
- app_url_ = app->url();
+ mojo::ConnectToService(shell(), "mojo:files", GetProxy(&files_));
}
- bool ConfigureIncomingConnection(
+ bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override {
service_provider_impl->AddService<AuthenticationService>(
[this](const mojo::ConnectionContext& connection_context,
@@ -44,7 +41,7 @@
LOG(FATAL) << "Unable to initialize accounts DB";
}
new authentication::GoogleAuthenticationServiceImpl(
- request.Pass(), app_url_, network_service_, directory);
+ request.Pass(), url(), network_service_, directory);
});
return true;
}
@@ -52,7 +49,6 @@
private:
mojo::NetworkServicePtr network_service_;
mojo::files::FilesPtr files_;
- std::string app_url_;
DISALLOW_COPY_AND_ASSIGN(GoogleAccountManagerApp);
};
@@ -60,7 +56,7 @@
} // namespace authentication
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(
- new authentication::GoogleAccountManagerApp());
- return runner.Run(application_request);
+ authentication::GoogleAccountManagerApp google_account_manager_app;
+ return mojo::RunMainApplication(application_request,
+ &google_account_manager_app);
}
diff --git a/services/clipboard/main.cc b/services/clipboard/main.cc
index be8faea..80bab3c 100644
--- a/services/clipboard/main.cc
+++ b/services/clipboard/main.cc
@@ -2,19 +2,21 @@
// 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/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 "services/clipboard/clipboard_standalone_impl.h"
-class Delegate : public mojo::ApplicationDelegate {
- public:
- Delegate() {}
- ~Delegate() override {}
+namespace {
- // mojo::ApplicationDelegate implementation.
- bool ConfigureIncomingConnection(
+class ClipboardApp : public mojo::ApplicationImplBase {
+ public:
+ ClipboardApp() {}
+ ~ClipboardApp() override {}
+
+ // mojo::ApplicationImplBase override.
+ bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override {
service_provider_impl->AddService<mojo::Clipboard>(
[](const mojo::ConnectionContext& connection_context,
@@ -27,7 +29,9 @@
}
};
+} // namespace
+
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new Delegate);
- return runner.Run(application_request);
+ ClipboardApp clipboard_app;
+ return mojo::RunMainApplication(application_request, &clipboard_app);
}
diff --git a/services/icu_data/icu_data_impl.cc b/services/icu_data/icu_data_impl.cc
index 48614fe..d213629 100644
--- a/services/icu_data/icu_data_impl.cc
+++ b/services/icu_data/icu_data_impl.cc
@@ -12,7 +12,7 @@
ICUDataImpl::ICUDataImpl() {}
ICUDataImpl::~ICUDataImpl() {}
-bool ICUDataImpl::ConfigureIncomingConnection(
+bool ICUDataImpl::OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) {
service_provider_impl->AddService<ICUData>(
[this](const mojo::ConnectionContext& connection_context,
diff --git a/services/icu_data/icu_data_impl.h b/services/icu_data/icu_data_impl.h
index 6c81120..c1a0be8 100644
--- a/services/icu_data/icu_data_impl.h
+++ b/services/icu_data/icu_data_impl.h
@@ -2,21 +2,22 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/macros.h"
#include "base/memory/scoped_ptr.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/public/cpp/application/service_provider_impl.h"
#include "mojo/services/icu_data/interfaces/icu_data.mojom.h"
namespace icu_data {
-class ICUDataImpl : public mojo::ApplicationDelegate, public ICUData {
+class ICUDataImpl : public mojo::ApplicationImplBase, public ICUData {
public:
ICUDataImpl();
~ICUDataImpl() override;
- // mojo::ApplicationDelegate implementation.
- bool ConfigureIncomingConnection(
+ // mojo::ApplicationImplBase implementation.
+ bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override;
void Map(const mojo::String& sha1hash,
@@ -28,6 +29,8 @@
scoped_ptr<mojo::SharedBuffer> buffer_;
mojo::BindingSet<ICUData> bindings_;
+
+ DISALLOW_COPY_AND_ASSIGN(ICUDataImpl);
};
} // namespace icu_data;
diff --git a/services/icu_data/main.cc b/services/icu_data/main.cc
index a10d795..880a180 100644
--- a/services/icu_data/main.cc
+++ b/services/icu_data/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/icu_data/icu_data_impl.h"
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new icu_data::ICUDataImpl);
- return runner.Run(application_request);
+ icu_data::ICUDataImpl icu_data_impl;
+ return mojo::RunMainApplication(application_request, &icu_data_impl);
}
diff --git a/services/js/content_handler_main.cc b/services/js/content_handler_main.cc
index 9ed4f84..79eb6c5 100644
--- a/services/js/content_handler_main.cc
+++ b/services/js/content_handler_main.cc
@@ -5,23 +5,22 @@
#include "base/i18n/icu_util.h"
#include "gin/array_buffer.h"
#include "gin/public/isolate_holder.h"
-#include "mojo/application/application_runner_chromium.h"
#include "mojo/application/content_handler_factory.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"
#include "services/js/js_app.h"
namespace js {
-class JsContentHandler : public mojo::ApplicationDelegate,
+class JsContentHandler : public mojo::ApplicationImplBase,
public mojo::ContentHandlerFactory::ManagedDelegate {
public:
JsContentHandler() {}
private:
- // Overridden from mojo::ApplicationDelegate:
- void Initialize(mojo::ApplicationImpl* app) override {
+ // Overridden from mojo::ApplicationImplBase:
+ void OnInitialize() override {
static const char v8Flags[] = "--harmony-classes";
v8::V8::SetFlagsFromString(v8Flags, sizeof(v8Flags) - 1);
base::i18n::InitializeICU();
@@ -29,15 +28,15 @@
gin::ArrayBufferAllocator::SharedInstance());
}
- // Overridden from ApplicationDelegate:
- bool ConfigureIncomingConnection(
+ // Overridden from mojo::ApplicationImplBase:
+ bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override {
service_provider_impl->AddService<mojo::ContentHandler>(
mojo::ContentHandlerFactory::GetInterfaceRequestHandler(this));
return true;
}
- // Overridden from ContentHandlerFactory::ManagedDelegate:
+ // Overridden from mojo::ContentHandlerFactory::ManagedDelegate:
scoped_ptr<mojo::ContentHandlerFactory::HandledApplicationHolder>
CreateApplication(
mojo::InterfaceRequest<mojo::Application> application_request,
@@ -52,6 +51,6 @@
} // namespace js
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new js::JsContentHandler);
- return runner.Run(application_request);
+ js::JsContentHandler js_content_handler;
+ return mojo::RunMainApplication(application_request, &js_content_handler);
}
diff --git a/services/log/main.cc b/services/log/main.cc
index 574e9bb..9ea6dba 100644
--- a/services/log/main.cc
+++ b/services/log/main.cc
@@ -6,9 +6,9 @@
#include <utility>
-#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_base.h"
+#include "mojo/public/cpp/application/run_application.h"
#include "mojo/public/cpp/application/service_provider_impl.h"
#include "mojo/public/cpp/system/macros.h"
#include "mojo/services/log/interfaces/log.mojom.h"
@@ -19,15 +19,14 @@
// Provides the mojo.log.Log service. Binds a new Log implementation for each
// Log interface request.
-class LogApp : public ApplicationDelegate {
+class LogApp : public ApplicationImplBase {
public:
LogApp() {}
~LogApp() override {}
private:
- // |ApplicationDelegate| override:
- bool ConfigureIncomingConnection(
- ServiceProviderImpl* service_provider_impl) override {
+ // |ApplicationImplBase| override:
+ bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
service_provider_impl->AddService<Log>(
[](const ConnectionContext& connection_context,
InterfaceRequest<Log> log_request) {
@@ -46,6 +45,6 @@
} // namespace mojo
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new mojo::log::LogApp());
- return runner.Run(application_request);
+ mojo::log::LogApp log_app;
+ return mojo::RunMainApplication(application_request, &log_app);
}
diff --git a/services/nacl/nonsfi/content_handler_main_nexe.cc b/services/nacl/nonsfi/content_handler_main_nexe.cc
index 158816a..9701bbd 100644
--- a/services/nacl/nonsfi/content_handler_main_nexe.cc
+++ b/services/nacl/nonsfi/content_handler_main_nexe.cc
@@ -5,29 +5,26 @@
#include <fcntl.h>
#include "base/files/file_util.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "base/message_loop/message_loop.h"
#include "mojo/application/content_handler_factory.h"
#include "mojo/data_pipe_utils/data_pipe_utils.h"
#include "mojo/message_pump/message_pump_mojo.h"
#include "mojo/nacl/nonsfi/nexe_launcher_nonsfi.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 nacl {
namespace content_handler {
-class NaClContentHandler : public mojo::ApplicationDelegate,
+class NaClContentHandler : public mojo::ApplicationImplBase,
public mojo::ContentHandlerFactory::Delegate {
public:
NaClContentHandler() {}
private:
- // Overridden from ApplicationDelegate:
- void Initialize(mojo::ApplicationImpl* app) override {}
-
- // Overridden from ApplicationDelegate:
- bool ConfigureIncomingConnection(
+ // Overridden from ApplicationImplBase:
+ bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override {
service_provider_impl->AddService<mojo::ContentHandler>(
mojo::ContentHandlerFactory::GetInterfaceRequestHandler(this));
@@ -64,7 +61,6 @@
} // namespace nacl
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(
- new nacl::content_handler::NaClContentHandler());
- return runner.Run(application_request);
+ nacl::content_handler::NaClContentHandler nacl_content_handler;
+ return mojo::RunMainApplication(application_request, &nacl_content_handler);
}
diff --git a/services/nacl/nonsfi/content_handler_main_pexe.cc b/services/nacl/nonsfi/content_handler_main_pexe.cc
index e92d3d6..b9e6f2b 100644
--- a/services/nacl/nonsfi/content_handler_main_pexe.cc
+++ b/services/nacl/nonsfi/content_handler_main_pexe.cc
@@ -5,9 +5,9 @@
#include <fcntl.h>
#include "base/files/file_util.h"
+#include "base/message_loop/message_loop.h"
#include "base/sha1.h"
#include "base/strings/string_number_conversions.h"
-#include "mojo/application/application_runner_chromium.h"
#include "mojo/application/content_handler_factory.h"
#include "mojo/data_pipe_utils/data_pipe_utils.h"
#include "mojo/file_utils/file_util.h"
@@ -15,9 +15,9 @@
#include "mojo/nacl/nonsfi/file_util.h"
#include "mojo/nacl/nonsfi/nexe_launcher_nonsfi.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/bindings/array.h"
#include "mojo/public/cpp/bindings/synchronous_interface_ptr.h"
#include "mojo/services/files/interfaces/directory.mojom-sync.h"
@@ -28,19 +28,19 @@
namespace nacl {
namespace content_handler {
-class PexeContentHandler : public mojo::ApplicationDelegate,
+class PexeContentHandler : public mojo::ApplicationImplBase,
public mojo::ContentHandlerFactory::Delegate {
public:
PexeContentHandler() {}
private:
- // Overridden from ApplicationDelegate:
- void Initialize(mojo::ApplicationImpl* app) override {
- mojo::ConnectToService(app->shell(), "mojo:pnacl_compile",
+ // Overridden from ApplicationImplBase:
+ void OnInitialize() override {
+ mojo::ConnectToService(shell(), "mojo:pnacl_compile",
GetSynchronousProxy(&compiler_init_));
- mojo::ConnectToService(app->shell(), "mojo:pnacl_link",
+ mojo::ConnectToService(shell(), "mojo:pnacl_link",
GetSynchronousProxy(&linker_init_));
- mojo::ConnectToService(app->shell(), "mojo:files", GetProxy(&files_));
+ mojo::ConnectToService(shell(), "mojo:files", GetProxy(&files_));
mojo::files::Error error = mojo::files::Error::INTERNAL;
files_->OpenFileSystem("app_persistent_cache",
GetSynchronousProxy(&nexe_cache_directory_),
@@ -49,8 +49,8 @@
CHECK_EQ(mojo::files::Error::OK, error);
}
- // Overridden from ApplicationDelegate:
- bool ConfigureIncomingConnection(
+ // Overridden from ApplicationImplBase:
+ bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override {
service_provider_impl->AddService<mojo::ContentHandler>(
mojo::ContentHandlerFactory::GetInterfaceRequestHandler(this));
@@ -162,7 +162,6 @@
} // namespace nacl
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(
- new nacl::content_handler::PexeContentHandler());
- return runner.Run(application_request);
+ nacl::content_handler::PexeContentHandler pexe_content_handler;
+ return mojo::RunMainApplication(application_request, &pexe_content_handler);
}
diff --git a/services/nacl/sfi/content_handler_main.cc b/services/nacl/sfi/content_handler_main.cc
index 3894e3a..35a6fb1 100644
--- a/services/nacl/sfi/content_handler_main.cc
+++ b/services/nacl/sfi/content_handler_main.cc
@@ -6,15 +6,14 @@
#include "base/files/scoped_file.h"
#include "base/message_loop/message_loop.h"
#include "build/build_config.h"
-#include "mojo/application/application_runner_chromium.h"
#include "mojo/application/content_handler_factory.h"
#include "mojo/data_pipe_utils/data_pipe_utils.h"
#include "mojo/message_pump/message_pump_mojo.h"
#include "mojo/nacl/sfi/nacl_bindings/monacl_sel_main.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/services/network/interfaces/network_service.mojom.h"
#include "mojo/services/network/interfaces/url_loader.mojom.h"
@@ -71,23 +70,31 @@
} // namespace
-class NaClContentHandler : public mojo::ApplicationDelegate,
+class NaClContentHandler : public mojo::ApplicationImplBase,
public mojo::ContentHandlerFactory::Delegate {
public:
NaClContentHandler() {}
private:
- // Overridden from ApplicationDelegate:
- void Initialize(mojo::ApplicationImpl* app) override {
- url_ = GURL(app->url());
+ // Overridden from ApplicationImplBase:
+ void OnInitialize() override {
+ url_ = GURL(url());
mojo::NetworkServicePtr network_service;
- mojo::ConnectToService(app->shell(), "mojo:network_service",
+ mojo::ConnectToService(shell(), "mojo:network_service",
GetProxy(&network_service));
network_service->CreateURLLoader(GetProxy(&url_loader_));
}
+ // Overridden from ApplicationImplBase:
+ bool OnAcceptConnection(
+ mojo::ServiceProviderImpl* service_provider_impl) override {
+ service_provider_impl->AddService<mojo::ContentHandler>(
+ mojo::ContentHandlerFactory::GetInterfaceRequestHandler(this));
+ return true;
+ }
+
void LoadIRT(mojo::URLLoaderPtr& url_loader) {
// TODO(ncbray): support other architectures.
GURL irt_url;
@@ -102,14 +109,6 @@
CHECK(irt_fp_) << "Could not acquire the IRT";
}
- // Overridden from ApplicationDelegate:
- bool ConfigureIncomingConnection(
- mojo::ServiceProviderImpl* service_provider_impl) override {
- service_provider_impl->AddService<mojo::ContentHandler>(
- mojo::ContentHandlerFactory::GetInterfaceRequestHandler(this));
- return true;
- }
-
// Overridden from ContentHandlerFactory::Delegate:
void RunApplication(
mojo::InterfaceRequest<mojo::Application> application_request,
@@ -151,7 +150,6 @@
} // namespace nacl
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(
- new nacl::content_handler::NaClContentHandler());
- return runner.Run(application_request);
+ nacl::content_handler::NaClContentHandler nacl_content_handler;
+ return mojo::RunMainApplication(application_request, &nacl_content_handler);
}
diff --git a/services/python/content_handler/content_handler_main.cc b/services/python/content_handler/content_handler_main.cc
index 383f4b3..3695889 100644
--- a/services/python/content_handler/content_handler_main.cc
+++ b/services/python/content_handler/content_handler_main.cc
@@ -10,12 +10,11 @@
#include "base/i18n/icu_util.h"
#include "base/strings/string_split.h"
#include "base/strings/stringprintf.h"
-#include "mojo/application/application_runner_chromium.h"
#include "mojo/application/content_handler_factory.h"
#include "mojo/data_pipe_utils/data_pipe_utils.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"
#include "mojo/public/python/src/common.h"
#include "third_party/zlib/google/zip_reader.h"
#include "url/gurl.h"
@@ -34,7 +33,7 @@
namespace content_handler {
using mojo::Application;
-using mojo::ApplicationDelegate;
+using mojo::ApplicationImplBase;
using mojo::ContentHandlerFactory;
using mojo::InterfaceRequest;
using mojo::ScopedDataPipeConsumerHandle;
@@ -201,14 +200,14 @@
DISALLOW_COPY_AND_ASSIGN(PythonContentHandler);
};
-class PythonContentHandlerApp : public ApplicationDelegate {
+class PythonContentHandlerApp : public ApplicationImplBase {
public:
PythonContentHandlerApp()
: content_handler_(false), debug_content_handler_(true) {}
private:
- // Overridden from ApplicationDelegate:
- bool ConfigureIncomingConnection(
+ // Overridden from ApplicationImplBase:
+ bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override {
if (IsDebug(service_provider_impl->connection_context().connection_url)) {
service_provider_impl->AddService<mojo::ContentHandler>(
@@ -243,7 +242,8 @@
} // namespace services
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(
- new services::python::content_handler::PythonContentHandlerApp());
- return runner.Run(application_request);
+ services::python::content_handler::PythonContentHandlerApp
+ python_content_handler_app;
+ return mojo::RunMainApplication(application_request,
+ &python_content_handler_app);
}
diff --git a/services/tracing/main.cc b/services/tracing/main.cc
index 76506d7..2c9ca06 100644
--- a/services/tracing/main.cc
+++ b/services/tracing/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/tracing/tracing_app.h"
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new tracing::TracingApp);
- return runner.Run(application_request);
+ tracing::TracingApp tracing_app;
+ return mojo::RunMainApplication(application_request, &tracing_app);
}
diff --git a/services/tracing/tracing_app.cc b/services/tracing/tracing_app.cc
index c1dead0..68c91b8 100644
--- a/services/tracing/tracing_app.cc
+++ b/services/tracing/tracing_app.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
+#include "mojo/public/cpp/application/service_provider_impl.h"
#include "mojo/public/cpp/system/wait.h"
namespace tracing {
@@ -15,7 +16,7 @@
TracingApp::~TracingApp() {}
-bool TracingApp::ConfigureIncomingConnection(
+bool TracingApp::OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) {
service_provider_impl->AddService<TraceCollector>(
[this](const mojo::ConnectionContext& connection_context,
diff --git a/services/tracing/tracing_app.h b/services/tracing/tracing_app.h
index d6a2b3b..e60fb35 100644
--- a/services/tracing/tracing_app.h
+++ b/services/tracing/tracing_app.h
@@ -10,8 +10,7 @@
#include "base/memory/scoped_vector.h"
#include "mojo/common/binding_set.h"
#include "mojo/common/interface_ptr_set.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/bindings/strong_binding.h"
#include "mojo/services/tracing/interfaces/trace_provider_registry.mojom.h"
#include "mojo/services/tracing/interfaces/tracing.mojom.h"
@@ -20,7 +19,7 @@
namespace tracing {
-class TracingApp : public mojo::ApplicationDelegate,
+class TracingApp : public mojo::ApplicationImplBase,
public TraceCollector,
public TraceProviderRegistry {
public:
@@ -28,8 +27,8 @@
~TracingApp() override;
private:
- // mojo::ApplicationDelegate implementation.
- bool ConfigureIncomingConnection(
+ // mojo::ApplicationImplBase override.
+ bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override;
// TraceCollector implementation.