Yet more ApplicationDelegate/ApplicationRunner conversion.

R=vardhan@google.com

Review URL: https://codereview.chromium.org/2019743002 .
diff --git a/examples/content_handler_demo/content_handler_demo.cc b/examples/content_handler_demo/content_handler_demo.cc
index fc12891..fb322eb 100644
--- a/examples/content_handler_demo/content_handler_demo.cc
+++ b/examples/content_handler_demo/content_handler_demo.cc
@@ -4,13 +4,12 @@
 
 #include <stdio.h>
 
-#include <memory>
 #include <utility>
 
 #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/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/wait.h"
 #include "mojo/services/content_handler/interfaces/content_handler.mojom.h"
@@ -92,15 +91,12 @@
   MOJO_DISALLOW_COPY_AND_ASSIGN(ContentHandlerImpl);
 };
 
-class ContentHandlerApp : public ApplicationDelegate {
+class ContentHandlerApp : public ApplicationImplBase {
  public:
   ContentHandlerApp() {}
   ~ContentHandlerApp() override {}
 
-  void Initialize(ApplicationImpl* app) override {}
-
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override {
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<ContentHandler>(
         [](const ConnectionContext& connection_context,
            InterfaceRequest<ContentHandler> content_handler_request) {
@@ -117,8 +113,6 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(
-      std::unique_ptr<mojo::examples::ContentHandlerApp>(
-          new mojo::examples::ContentHandlerApp()));
-  return runner.Run(application_request);
+  mojo::examples::ContentHandlerApp content_handler_app;
+  return mojo::RunMainApplication(application_request, &content_handler_app);
 }
diff --git a/examples/echo/echo_server.cc b/examples/echo/echo_server.cc
index a920bdb..093705c 100644
--- a/examples/echo/echo_server.cc
+++ b/examples/echo/echo_server.cc
@@ -7,8 +7,8 @@
 #include "examples/echo/echo.mojom.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_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/strong_binding.h"
 
@@ -50,13 +50,12 @@
 };
 
 // MultiServer creates a new object to handle each message pipe.
-class MultiServer : public mojo::ApplicationDelegate {
+class MultiServer : public mojo::ApplicationImplBase {
  public:
   MultiServer() {}
 
-  // From ApplicationDelegate
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override {
+  // From ApplicationImplBase
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<Echo>(
         [](const mojo::ConnectionContext& connection_context,
            mojo::InterfaceRequest<Echo> echo_request) {
@@ -70,13 +69,12 @@
 
 // SingletonServer uses the same object to handle all message pipes. Useful
 // for stateless operation.
-class SingletonServer : public mojo::ApplicationDelegate {
+class SingletonServer : public mojo::ApplicationImplBase {
  public:
   SingletonServer() {}
 
-  // From ApplicationDelegate
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override {
+  // From ApplicationImplBase
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<Echo>(
         [this](const mojo::ConnectionContext& connection_context,
                mojo::InterfaceRequest<Echo> echo_request) {
@@ -99,13 +97,12 @@
 // not reliable. There's a race condition because a second client could bind
 // to the server before the first client called EchoString(). Therefore, this
 // is an example of how not to write your code.
-class OneAtATimeServer : public mojo::ApplicationDelegate {
+class OneAtATimeServer : public mojo::ApplicationImplBase {
  public:
   OneAtATimeServer() : binding_(&echo_impl_) {}
 
-  // From ApplicationDelegate
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override {
+  // From ApplicationImplBase
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<Echo>(
         [this](const mojo::ConnectionContext& connection_context,
                mojo::InterfaceRequest<Echo> echo_request) {
@@ -125,10 +122,8 @@
 
 MojoResult MojoMain(MojoHandle application_request) {
   // Uncomment one of the three servers at a time to see it work:
-  mojo::ApplicationRunner runner(std::unique_ptr<mojo::examples::MultiServer>(
-      new mojo::examples::MultiServer()));
-  // mojo::ApplicationRunner runner(new mojo::examples::SingletonServer());
-  // mojo::ApplicationRunner runner(new mojo::examples::OneAtATimeServer());
-
-  return runner.Run(application_request);
+  mojo::examples::MultiServer server_app;
+  // mojo::examples::SingletonServer server_app;
+  // mojo::examples::OneAtATimeServer server_app;
+  return mojo::RunMainApplication(application_request, &server_app);
 }
diff --git a/examples/indirect_service/indirect_integer_service.cc b/examples/indirect_service/indirect_integer_service.cc
index 6d9425c..f8dc3c9 100644
--- a/examples/indirect_service/indirect_integer_service.cc
+++ b/examples/indirect_service/indirect_integer_service.cc
@@ -2,12 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <memory>
-
 #include "examples/indirect_service/indirect_service_demo.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/binding.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
@@ -49,10 +47,9 @@
   StrongBinding<IndirectIntegerService> binding_;
 };
 
-class IndirectIntegerServiceAppDelegate : public ApplicationDelegate {
+class IndirectIntegerServiceApp : public ApplicationImplBase {
  public:
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override {
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<IndirectIntegerService>(
         [](const ConnectionContext& connection_context,
            InterfaceRequest<IndirectIntegerService> request) {
@@ -66,8 +63,7 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(
-      std::unique_ptr<mojo::examples::IndirectIntegerServiceAppDelegate>(
-          new mojo::examples::IndirectIntegerServiceAppDelegate()));
-  return runner.Run(application_request);
+  mojo::examples::IndirectIntegerServiceApp indirect_integer_service_app;
+  return mojo::RunMainApplication(application_request,
+                                  &indirect_integer_service_app);
 }
diff --git a/examples/indirect_service/integer_service.cc b/examples/indirect_service/integer_service.cc
index dac2703..0db7eaf 100644
--- a/examples/indirect_service/integer_service.cc
+++ b/examples/indirect_service/integer_service.cc
@@ -2,12 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <memory>
-
 #include "examples/indirect_service/indirect_service_demo.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/strong_binding.h"
 
@@ -29,10 +27,9 @@
   StrongBinding<IntegerService> binding_;
 };
 
-class IntegerServiceAppDelegate : public ApplicationDelegate {
+class IntegerServiceApp : public ApplicationImplBase {
  public:
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override {
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<IntegerService>(
         [](const ConnectionContext& connection_context,
            InterfaceRequest<IntegerService> request) {
@@ -46,9 +43,7 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(
-      std::unique_ptr<mojo::examples::IntegerServiceAppDelegate>(
-          new mojo::examples::IntegerServiceAppDelegate));
-  return runner.Run(application_request);
+  mojo::examples::IntegerServiceApp integer_service_app;
+  return mojo::RunMainApplication(application_request, &integer_service_app);
 }
 
diff --git a/services/device_info/device_info.cc b/services/device_info/device_info.cc
index 749f909..76d4def 100644
--- a/services/device_info/device_info.cc
+++ b/services/device_info/device_info.cc
@@ -2,13 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <cstdlib>
-#include <memory>
+#include <stdlib.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_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/services/device_info/interfaces/device_info.mojom.h"
 
@@ -18,7 +17,7 @@
 
 // This is a native Mojo application which implements |DeviceInfo| interface for
 // Linux.
-class DeviceInfo : public ApplicationDelegate, public mojo::DeviceInfo {
+class DeviceInfoApp : public ApplicationImplBase, public mojo::DeviceInfo {
  public:
   // We look for the 'DISPLAY' environment variable. If present, then we assume
   // it to be a desktop, else we assume it to be a commandline
@@ -27,9 +26,8 @@
                                    : DeviceInfo::DeviceType::HEADLESS);
   }
 
-  // |ApplicationDelegate| override.
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override {
+  // |ApplicationImplBase| override.
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<mojo::DeviceInfo>(
         [this](const ConnectionContext& connection_context,
                InterfaceRequest<mojo::DeviceInfo> device_info_request) {
@@ -47,8 +45,6 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(
-      std::unique_ptr<mojo::services::device_info::DeviceInfo>(
-          new mojo::services::device_info::DeviceInfo()));
-  return runner.Run(application_request);
+  mojo::services::device_info::DeviceInfoApp device_info_app;
+  return mojo::RunMainApplication(application_request, &device_info_app);
 }
diff --git a/services/nacl/nonsfi/pnacl_compile.cc b/services/nacl/nonsfi/pnacl_compile.cc
index ab80697..d8bcf75 100644
--- a/services/nacl/nonsfi/pnacl_compile.cc
+++ b/services/nacl/nonsfi/pnacl_compile.cc
@@ -2,14 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <memory>
-
 #include "base/logging.h"
 #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_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/strong_binding.h"
 #include "services/nacl/nonsfi/kPnaclTranslatorCompile.h"
@@ -41,13 +39,12 @@
   StrongBinding<PexeCompilerInit> strong_binding_;
 };
 
-class MultiPexeCompiler : public ApplicationDelegate {
+class MultiPexeCompiler : public ApplicationImplBase {
  public:
   MultiPexeCompiler() {}
 
-  // From ApplicationDelegate
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override {
+  // From ApplicationImplBase
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<PexeCompilerInit>(
         [](const ConnectionContext& connection_context,
            InterfaceRequest<PexeCompilerInit> request) {
@@ -61,7 +58,6 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(std::unique_ptr<mojo::nacl::MultiPexeCompiler>(
-      new mojo::nacl::MultiPexeCompiler()));
-  return runner.Run(application_request);
+  mojo::nacl::MultiPexeCompiler multi_pexe_compiler;
+  return mojo::RunMainApplication(application_request, &multi_pexe_compiler);
 }
diff --git a/services/nacl/nonsfi/pnacl_link.cc b/services/nacl/nonsfi/pnacl_link.cc
index e4c741e..9a2ef24 100644
--- a/services/nacl/nonsfi/pnacl_link.cc
+++ b/services/nacl/nonsfi/pnacl_link.cc
@@ -2,14 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <memory>
-
 #include "base/logging.h"
 #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_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/strong_binding.h"
 #include "services/nacl/nonsfi/kLdNexe.h"
@@ -38,13 +36,12 @@
   StrongBinding<PexeLinkerInit> strong_binding_;
 };
 
-class MultiPexeLinker : public ApplicationDelegate {
+class MultiPexeLinker : public ApplicationImplBase {
  public:
   MultiPexeLinker() {}
 
-  // From ApplicationDelegate
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override {
+  // From ApplicationImplBase
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<PexeLinkerInit>(
         [](const ConnectionContext& connection_context,
            InterfaceRequest<PexeLinkerInit> request) {
@@ -58,7 +55,6 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(std::unique_ptr<mojo::nacl::MultiPexeLinker>(
-      new mojo::nacl::MultiPexeLinker()));
-  return runner.Run(application_request);
+  mojo::nacl::MultiPexeLinker multi_pexe_linker;
+  return mojo::RunMainApplication(application_request, &multi_pexe_linker);
 }