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(); }
diff --git a/mojo/ui/content_viewer_app.cc b/mojo/ui/content_viewer_app.cc index edc5ad1..0ede5d2 100644 --- a/mojo/ui/content_viewer_app.cc +++ b/mojo/ui/content_viewer_app.cc
@@ -64,8 +64,11 @@ mojo::InterfaceRequest<mojo::Application> application_request, mojo::URLResponsePtr response) { ViewProviderApp* app = LoadContent(content_handler_url, response.Pass()); - if (app) + if (app) { + // TODO(vtl): This is leaky, since |ApplicationImpl| doesn't own itself. + // (Also, who owns |*app|?) new mojo::ApplicationImpl(app, application_request.Pass()); + } } } // namespace ui