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(&notification_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,
+                                  &notification_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.
