Add ApplicationImplBase::Bind().

(And make the constructor not take an Application request.)

This is to allow implementations to be instantiated before the
message/run loop.

R=vardhan@google.com

Review URL: https://codereview.chromium.org/1993743004 .
diff --git a/mojo/public/cpp/application/application_impl_base.h b/mojo/public/cpp/application/application_impl_base.h
index 04109d7..8d3cbf6 100644
--- a/mojo/public/cpp/application/application_impl_base.h
+++ b/mojo/public/cpp/application/application_impl_base.h
@@ -31,10 +31,14 @@
 // use this class in the current setup).
 class ApplicationImplBase : public Application {
  public:
-  explicit ApplicationImplBase(
-      InterfaceRequest<Application> application_request);
+  ApplicationImplBase();
   ~ApplicationImplBase() override;
 
+  // Binds the given |Application| request to this object. This must be done
+  // with the message (run) loop available/running, and this will cause this
+  // object to start serving requests (via that message loop).
+  void Bind(InterfaceRequest<Application> application_request);
+
   // Quits the main run loop for this application.
   // TODO(vtl): This is implemented in application_runner.cc (for example). Its
   // presence here is pretty dubious.
diff --git a/mojo/public/cpp/application/lib/application_impl.cc b/mojo/public/cpp/application/lib/application_impl.cc
index 194c942..a9a7e58 100644
--- a/mojo/public/cpp/application/lib/application_impl.cc
+++ b/mojo/public/cpp/application/lib/application_impl.cc
@@ -10,7 +10,9 @@
 
 ApplicationImpl::ApplicationImpl(ApplicationDelegate* delegate,
                                  InterfaceRequest<Application> request)
-    : ApplicationImplBase(request.Pass()), delegate_(delegate) {}
+    : delegate_(delegate) {
+  Bind(request.Pass());
+}
 
 ApplicationImpl::~ApplicationImpl() {}
 
diff --git a/mojo/public/cpp/application/lib/application_impl_base.cc b/mojo/public/cpp/application/lib/application_impl_base.cc
index a5e90d6..544c262 100644
--- a/mojo/public/cpp/application/lib/application_impl_base.cc
+++ b/mojo/public/cpp/application/lib/application_impl_base.cc
@@ -13,12 +13,15 @@
 
 namespace mojo {
 
-ApplicationImplBase::ApplicationImplBase(
-    InterfaceRequest<Application> application_request)
-    : application_binding_(this, application_request.Pass()) {}
+ApplicationImplBase::ApplicationImplBase() : application_binding_(this) {}
 
 ApplicationImplBase::~ApplicationImplBase() {}
 
+void ApplicationImplBase::Bind(
+    InterfaceRequest<Application> application_request) {
+  application_binding_.Bind(application_request.Pass());
+}
+
 bool ApplicationImplBase::HasArg(const std::string& arg) const {
   return std::find(args_.begin(), args_.end(), arg) != args_.end();
 }