Convert ViewProviderApp and ContentViewerApp to implement ApplicationImplBase instead of ApplicationDelegate.

R=vardhan@google.com

Review URL: https://codereview.chromium.org/2020453003 .
diff --git a/apps/moterm/main.cc b/apps/moterm/main.cc
index abeb499..7a41df4 100644
--- a/apps/moterm/main.cc
+++ b/apps/moterm/main.cc
@@ -7,10 +7,12 @@
 // application.)
 
 #include "apps/moterm/moterm_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new MotermApp());
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  MotermApp moterm_app;
+  return mojo::RunApplication(application_request, &moterm_app);
 }
diff --git a/apps/moterm/moterm_app.cc b/apps/moterm/moterm_app.cc
index a8a45f4..ff78b0e 100644
--- a/apps/moterm/moterm_app.cc
+++ b/apps/moterm/moterm_app.cc
@@ -15,6 +15,6 @@
     const std::string& connection_url,
     mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
     mojo::InterfaceRequest<mojo::ServiceProvider> services) {
-  new MotermView(mojo::CreateApplicationConnector(app_impl()->shell()),
+  new MotermView(mojo::CreateApplicationConnector(shell()),
                  view_owner_request.Pass(), services.Pass());
 }
diff --git a/examples/moterm_example_app/moterm_example_app.cc b/examples/moterm_example_app/moterm_example_app.cc
index e1ca20e..3a4ad03 100644
--- a/examples/moterm_example_app/moterm_example_app.cc
+++ b/examples/moterm_example_app/moterm_example_app.cc
@@ -15,12 +15,11 @@
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/common/binding_set.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/bindings/array.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "mojo/public/interfaces/application/service_provider.mojom.h"
@@ -166,7 +165,7 @@
       const std::string& connection_url,
       mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
       mojo::InterfaceRequest<mojo::ServiceProvider> services) override {
-    new MotermExampleAppView(app_impl()->shell(), view_owner_request.Pass());
+    new MotermExampleAppView(shell(), view_owner_request.Pass());
   }
 
  private:
@@ -174,6 +173,7 @@
 };
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new MotermExampleApp());
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  MotermExampleApp moterm_example_app;
+  return mojo::RunApplication(application_request, &moterm_example_app);
 }
diff --git a/examples/shadows/main.cc b/examples/shadows/main.cc
index 74ec64d..33732aa 100644
--- a/examples/shadows/main.cc
+++ b/examples/shadows/main.cc
@@ -3,10 +3,12 @@
 // found in the LICENSE file.
 
 #include "examples/shadows/shadows_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new examples::ShadowsApp);
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  examples::ShadowsApp shadows_app;
+  return mojo::RunApplication(application_request, &shadows_app);
 }
diff --git a/examples/shadows/shadows_app.cc b/examples/shadows/shadows_app.cc
index 41f4dfe..3f36aad 100644
--- a/examples/shadows/shadows_app.cc
+++ b/examples/shadows/shadows_app.cc
@@ -17,7 +17,7 @@
     const std::string& connection_url,
     mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
     mojo::InterfaceRequest<mojo::ServiceProvider> services) {
-  new ShadowsView(mojo::CreateApplicationConnector(app_impl()->shell()),
+  new ShadowsView(mojo::CreateApplicationConnector(shell()),
                   view_owner_request.Pass());
 }
 
diff --git a/examples/ui/jank/jank.cc b/examples/ui/jank/jank.cc
index 7825251..742e2db 100644
--- a/examples/ui/jank/jank.cc
+++ b/examples/ui/jank/jank.cc
@@ -8,9 +8,10 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/ui/choreographer.h"
 #include "mojo/ui/ganesh_view.h"
 #include "mojo/ui/input_handler.h"
@@ -210,7 +211,7 @@
       const std::string& connection_url,
       mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
       mojo::InterfaceRequest<mojo::ServiceProvider> services) override {
-    new JankView(mojo::CreateApplicationConnector(app_impl()->shell()),
+    new JankView(mojo::CreateApplicationConnector(shell()),
                  view_owner_request.Pass());
   }
 
@@ -221,6 +222,7 @@
 }  // namespace examples
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new examples::JankApp());
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  examples::JankApp jank_app;
+  return mojo::RunApplication(application_request, &jank_app);
 }
diff --git a/examples/ui/noodles/main.cc b/examples/ui/noodles/main.cc
index 6aff78e..7427bd1 100644
--- a/examples/ui/noodles/main.cc
+++ b/examples/ui/noodles/main.cc
@@ -3,10 +3,12 @@
 // found in the LICENSE file.
 
 #include "examples/ui/noodles/noodles_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new examples::NoodlesApp);
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  examples::NoodlesApp noodles_app;
+  return mojo::RunApplication(application_request, &noodles_app);
 }
diff --git a/examples/ui/noodles/noodles_app.cc b/examples/ui/noodles/noodles_app.cc
index 5c28d9e..1e31959 100644
--- a/examples/ui/noodles/noodles_app.cc
+++ b/examples/ui/noodles/noodles_app.cc
@@ -17,7 +17,7 @@
     const std::string& connection_url,
     mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
     mojo::InterfaceRequest<mojo::ServiceProvider> services) {
-  new NoodlesView(mojo::CreateApplicationConnector(app_impl()->shell()),
+  new NoodlesView(mojo::CreateApplicationConnector(shell()),
                   view_owner_request.Pass());
 }
 
diff --git a/examples/ui/pdf_viewer/pdf_viewer.cc b/examples/ui/pdf_viewer/pdf_viewer.cc
index f16be50..3043c4b 100644
--- a/examples/ui/pdf_viewer/pdf_viewer.cc
+++ b/examples/ui/pdf_viewer/pdf_viewer.cc
@@ -8,14 +8,16 @@
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/data_pipe_utils/data_pipe_utils.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/ui/choreographer.h"
 #include "mojo/ui/content_viewer_app.h"
 #include "mojo/ui/ganesh_view.h"
 #include "mojo/ui/input_handler.h"
+#include "mojo/ui/view_provider_app.h"
 #include "third_party/pdfium/fpdfsdk/include/fpdf_ext.h"
 #include "third_party/pdfium/fpdfsdk/include/fpdfview.h"
 #include "third_party/skia/include/core/SkCanvas.h"
@@ -272,7 +274,7 @@
       const std::string& connection_url,
       mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
       mojo::InterfaceRequest<mojo::ServiceProvider> services) override {
-    new PDFDocumentView(mojo::CreateApplicationConnector(app_impl()->shell()),
+    new PDFDocumentView(mojo::CreateApplicationConnector(shell()),
                         view_owner_request.Pass(), pdf_document_);
   }
 
@@ -311,6 +313,7 @@
 }  // namespace examples
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new examples::PDFContentViewerApp());
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  examples::PDFContentViewerApp pdf_content_viewer_app;
+  return mojo::RunApplication(application_request, &pdf_content_viewer_app);
 }
diff --git a/examples/ui/png_viewer/png_viewer.cc b/examples/ui/png_viewer/png_viewer.cc
index 6e89523..2ad6551 100644
--- a/examples/ui/png_viewer/png_viewer.cc
+++ b/examples/ui/png_viewer/png_viewer.cc
@@ -7,12 +7,14 @@
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/data_pipe_utils/data_pipe_utils.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/ui/content_viewer_app.h"
 #include "mojo/ui/ganesh_view.h"
+#include "mojo/ui/view_provider_app.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkImage.h"
@@ -121,7 +123,7 @@
       const std::string& connection_url,
       mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
       mojo::InterfaceRequest<mojo::ServiceProvider> services) override {
-    new PNGView(mojo::CreateApplicationConnector(app_impl()->shell()),
+    new PNGView(mojo::CreateApplicationConnector(shell()),
                 view_owner_request.Pass(), image_);
   }
 
@@ -161,6 +163,7 @@
 }  // namespace examples
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new examples::PNGContentViewerApp());
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  examples::PNGContentViewerApp png_content_viewer_app;
+  return mojo::RunApplication(application_request, &png_content_viewer_app);
 }
diff --git a/examples/ui/shapes/main.cc b/examples/ui/shapes/main.cc
index bf4925e..1669259 100644
--- a/examples/ui/shapes/main.cc
+++ b/examples/ui/shapes/main.cc
@@ -3,10 +3,12 @@
 // found in the LICENSE file.
 
 #include "examples/ui/shapes/shapes_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new examples::ShapesApp);
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  examples::ShapesApp shapes_app;
+  return mojo::RunApplication(application_request, &shapes_app);
 }
diff --git a/examples/ui/shapes/shapes_app.cc b/examples/ui/shapes/shapes_app.cc
index 4c50654..02ca962 100644
--- a/examples/ui/shapes/shapes_app.cc
+++ b/examples/ui/shapes/shapes_app.cc
@@ -17,7 +17,7 @@
     const std::string& connection_url,
     mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
     mojo::InterfaceRequest<mojo::ServiceProvider> services) {
-  new ShapesView(mojo::CreateApplicationConnector(app_impl()->shell()),
+  new ShapesView(mojo::CreateApplicationConnector(shell()),
                  view_owner_request.Pass());
 }
 
diff --git a/examples/ui/spinning_cube/main.cc b/examples/ui/spinning_cube/main.cc
index fcf0bc2..6bb2ad1 100644
--- a/examples/ui/spinning_cube/main.cc
+++ b/examples/ui/spinning_cube/main.cc
@@ -3,10 +3,12 @@
 // found in the LICENSE file.
 
 #include "examples/ui/spinning_cube/spinning_cube_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new examples::SpinningCubeApp);
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  examples::SpinningCubeApp spinning_cube_app;
+  return mojo::RunApplication(application_request, &spinning_cube_app);
 }
diff --git a/examples/ui/spinning_cube/spinning_cube_app.cc b/examples/ui/spinning_cube/spinning_cube_app.cc
index ea6f507..2908e07 100644
--- a/examples/ui/spinning_cube/spinning_cube_app.cc
+++ b/examples/ui/spinning_cube/spinning_cube_app.cc
@@ -17,7 +17,7 @@
     const std::string& connection_url,
     mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
     mojo::InterfaceRequest<mojo::ServiceProvider> services) {
-  new SpinningCubeView(mojo::CreateApplicationConnector(app_impl()->shell()),
+  new SpinningCubeView(mojo::CreateApplicationConnector(shell()),
                        view_owner_request.Pass());
 }
 
diff --git a/examples/ui/tile/main.cc b/examples/ui/tile/main.cc
index 930aca3..458388e 100644
--- a/examples/ui/tile/main.cc
+++ b/examples/ui/tile/main.cc
@@ -3,10 +3,12 @@
 // found in the LICENSE file.
 
 #include "examples/ui/tile/tile_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
 #include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new examples::TileApp);
-  return runner.Run(application_request);
+  mojo::ScopedChromiumInit init;
+  examples::TileApp tile_app;
+  return mojo::RunApplication(application_request, &tile_app);
 }
diff --git a/examples/ui/tile/tile_app.cc b/examples/ui/tile/tile_app.cc
index bdd24ae..ee6c56f 100644
--- a/examples/ui/tile/tile_app.cc
+++ b/examples/ui/tile/tile_app.cc
@@ -24,7 +24,7 @@
     return;
   }
 
-  new TileView(mojo::CreateApplicationConnector(app_impl()->shell()),
+  new TileView(mojo::CreateApplicationConnector(shell()),
                view_owner_request.Pass(), params);
 }
 
diff --git a/mojo/ui/content_viewer_app.cc b/mojo/ui/content_viewer_app.cc
index 0ede5d2..21bb266 100644
--- a/mojo/ui/content_viewer_app.cc
+++ b/mojo/ui/content_viewer_app.cc
@@ -6,6 +6,8 @@
 
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "mojo/public/cpp/application/service_provider_impl.h"
+#include "mojo/ui/view_provider_app.h"
 
 namespace mojo {
 namespace ui {
@@ -37,17 +39,15 @@
 
 ContentViewerApp::~ContentViewerApp() {}
 
-void ContentViewerApp::Initialize(mojo::ApplicationImpl* app_impl) {
-  app_impl_ = app_impl;
-
+void ContentViewerApp::OnInitialize() {
   auto command_line = base::CommandLine::ForCurrentProcess();
-  command_line->InitFromArgv(app_impl_->args());
+  command_line->InitFromArgv(args());
   logging::LoggingSettings settings;
   settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
   logging::InitLogging(settings);
 }
 
-bool ContentViewerApp::ConfigureIncomingConnection(
+bool ContentViewerApp::OnAcceptConnection(
     ServiceProviderImpl* service_provider_impl) {
   service_provider_impl->AddService<ContentHandler>([this](
       const ConnectionContext& connection_context,
@@ -63,12 +63,13 @@
     const std::string& content_handler_url,
     mojo::InterfaceRequest<mojo::Application> application_request,
     mojo::URLResponsePtr response) {
+  // TODO(vtl): This is usually leaky, since |*app| (the returned
+  // |ApplicationImplBase|/|ViewProviderApp| implementation) typically doesn't
+  // own itself. Probably |LoadContent()| should take the |application_request|,
+  // and not return anything. This method doesn't really appear to add anything.
   ViewProviderApp* app = LoadContent(content_handler_url, response.Pass());
-  if (app) {
-    // TODO(vtl): This is leaky, since |ApplicationImpl| doesn't own itself.
-    // (Also, who owns |*app|?)
-    new mojo::ApplicationImpl(app, application_request.Pass());
-  }
+  if (app)
+    app->Bind(application_request.Pass());
 }
 
 }  // namespace ui
diff --git a/mojo/ui/content_viewer_app.h b/mojo/ui/content_viewer_app.h
index e09a66a..c28d2d9 100644
--- a/mojo/ui/content_viewer_app.h
+++ b/mojo/ui/content_viewer_app.h
@@ -6,12 +6,18 @@
 #define MOJO_UI_CONTENT_VIEWER_APP_H_
 
 #include "mojo/common/strong_binding_set.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
+#include "mojo/public/cpp/system/macros.h"
 #include "mojo/services/content_handler/interfaces/content_handler.mojom.h"
-#include "mojo/ui/view_provider_app.h"
 
 namespace mojo {
+
+class ServiceProviderImpl;
+
 namespace ui {
 
+class ViewProviderApp;
+
 // A simple ContentHandler application implementation for rendering
 // content as Views.  Subclasses must provide a function to create
 // the view provider application on demand.
@@ -19,17 +25,14 @@
 // TODO(jeffbrown): Support creating the view provider application in a
 // separate thread if desired (often not the case).  This is one reason
 // we are not using the ContentHandlerFactory here.
-class ContentViewerApp : public ApplicationDelegate {
+class ContentViewerApp : public ApplicationImplBase {
  public:
   ContentViewerApp();
   ~ContentViewerApp() override;
 
-  ApplicationImpl* app_impl() { return app_impl_; }
-
-  // |ApplicationDelegate|:
-  void Initialize(ApplicationImpl* app) override;
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override;
+  // |ApplicationImplBase|:
+  void OnInitialize() override;
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override;
 
   // Called to create the view provider application to view the content.
   //
@@ -42,8 +45,12 @@
   // request.
   // The |response| carries the data retrieved by the content handler.
   //
-  // Returns the view provider application delegate to view the content,
-  // or nullptr if the content could not be loaded.
+  // Returns the view provider application to view the content, or nullptr if
+  // the content could not be loaded.
+  //
+  // TODO(vtl): This interface is a bit broken. (What's the ownership of the
+  // returned ViewProviderApp implementation?) See my TODO in the implementation
+  // of StartViewer().
   virtual ViewProviderApp* LoadContent(const std::string& content_handler_url,
                                        URLResponsePtr response) = 0;
 
@@ -54,7 +61,6 @@
                    InterfaceRequest<Application> application_request,
                    URLResponsePtr response);
 
-  ApplicationImpl* app_impl_ = nullptr;
   StrongBindingSet<ContentHandler> bindings_;
 
   MOJO_DISALLOW_COPY_AND_ASSIGN(ContentViewerApp);
diff --git a/mojo/ui/view_provider_app.cc b/mojo/ui/view_provider_app.cc
index a8e4b85..2db4765 100644
--- a/mojo/ui/view_provider_app.cc
+++ b/mojo/ui/view_provider_app.cc
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "mojo/public/cpp/application/service_provider_impl.h"
 
 namespace mojo {
 namespace ui {
@@ -37,17 +38,15 @@
 
 ViewProviderApp::~ViewProviderApp() {}
 
-void ViewProviderApp::Initialize(mojo::ApplicationImpl* app_impl) {
-  app_impl_ = app_impl;
-
+void ViewProviderApp::OnInitialize() {
   auto command_line = base::CommandLine::ForCurrentProcess();
-  command_line->InitFromArgv(app_impl_->args());
+  command_line->InitFromArgv(args());
   logging::LoggingSettings settings;
   settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
   logging::InitLogging(settings);
 }
 
-bool ViewProviderApp::ConfigureIncomingConnection(
+bool ViewProviderApp::OnAcceptConnection(
     ServiceProviderImpl* service_provider_impl) {
   service_provider_impl->AddService<ViewProvider>(
       [this](const ConnectionContext& connection_context,
diff --git a/mojo/ui/view_provider_app.h b/mojo/ui/view_provider_app.h
index 9c85733..a0b81b4 100644
--- a/mojo/ui/view_provider_app.h
+++ b/mojo/ui/view_provider_app.h
@@ -8,14 +8,14 @@
 #include <string>
 
 #include "mojo/common/strong_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/service_provider_impl.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/public/cpp/system/macros.h"
 #include "mojo/services/ui/views/interfaces/view_provider.mojom.h"
 
 namespace mojo {
+
+class ServiceProviderImpl;
+
 namespace ui {
 
 // Abstract implementation of a simple application that offers a ViewProvider.
@@ -23,17 +23,14 @@
 //
 // It is not necessary to use this class to implement all ViewProviders.
 // This class is merely intended to make the simple apps easier to write.
-class ViewProviderApp : public ApplicationDelegate {
+class ViewProviderApp : public ApplicationImplBase {
  public:
   ViewProviderApp();
   ~ViewProviderApp() override;
 
-  ApplicationImpl* app_impl() { return app_impl_; }
-
-  // |ApplicationDelegate|:
-  void Initialize(ApplicationImpl* app) override;
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override;
+  // |ApplicationImplBase|:
+  void OnInitialize() override;
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override;
 
   // Called by the ViewProvider to create a view.
   // This method may be called multiple times in the case where the
@@ -58,7 +55,6 @@
                   InterfaceRequest<ViewOwner> view_owner_request,
                   InterfaceRequest<ServiceProvider> services);
 
-  ApplicationImpl* app_impl_ = nullptr;
   StrongBindingSet<ViewProvider> bindings_;
 
   MOJO_DISALLOW_COPY_AND_ASSIGN(ViewProviderApp);