ApplicationConnection devolution, part 2.4. A.k.a. nuke InterfaceFactory, part 4. I took care of ContentHandlerFactory in a way that seems OK, but may not be optimal design-wise (to be considered later -- I'll actually need to think about its design). R=vardhan@google.com Review URL: https://codereview.chromium.org/1979683002 .
diff --git a/examples/forwarding_content_handler/forwarding_content_handler.cc b/examples/forwarding_content_handler/forwarding_content_handler.cc index f7cfaca..87730f2 100644 --- a/examples/forwarding_content_handler/forwarding_content_handler.cc +++ b/examples/forwarding_content_handler/forwarding_content_handler.cc
@@ -59,7 +59,8 @@ private: // Overridden from ApplicationDelegate: bool ConfigureIncomingConnection(ApplicationConnection* connection) override { - connection->AddService(&content_handler_factory_); + connection->GetServiceProviderImpl().AddService<ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); return true; }
diff --git a/examples/recursive_content_handler/recursive_content_handler.cc b/examples/recursive_content_handler/recursive_content_handler.cc index 874856c..e246a1f 100644 --- a/examples/recursive_content_handler/recursive_content_handler.cc +++ b/examples/recursive_content_handler/recursive_content_handler.cc
@@ -24,7 +24,8 @@ // Overridden from ApplicationDelegate: bool ConfigureIncomingConnection( ApplicationConnection* connection) override { - connection->AddService(&content_handler_factory_); + connection->GetServiceProviderImpl().AddService<ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); return true; }
diff --git a/mojo/application/content_handler_factory.cc b/mojo/application/content_handler_factory.cc index 34c0ee4..b3c7a26 100644 --- a/mojo/application/content_handler_factory.cc +++ b/mojo/application/content_handler_factory.cc
@@ -113,10 +113,22 @@ } // namespace ContentHandlerFactory::ContentHandlerFactory(Delegate* delegate) - : delegate_(delegate) { + : delegate_(delegate) {} + +ContentHandlerFactory::~ContentHandlerFactory() {} + +void ContentHandlerFactory::Create( + const ConnectionContext& connection_context, + InterfaceRequest<ContentHandler> content_handler_request) { + new ContentHandlerImpl(delegate_, content_handler_request.Pass()); } -ContentHandlerFactory::~ContentHandlerFactory() { +ServiceProviderImpl::InterfaceRequestHandler<ContentHandler> +ContentHandlerFactory::GetInterfaceRequestHandler() { + return [this](const ConnectionContext& connection_context, + InterfaceRequest<ContentHandler> content_handler_request) { + Create(connection_context, content_handler_request.Pass()); + }; } void ContentHandlerFactory::ManagedDelegate::RunApplication( @@ -129,9 +141,4 @@ loop.Run(); } -void ContentHandlerFactory::Create(const ConnectionContext& connection_context, - InterfaceRequest<ContentHandler> request) { - new ContentHandlerImpl(delegate_, request.Pass()); -} - } // namespace mojo
diff --git a/mojo/application/content_handler_factory.h b/mojo/application/content_handler_factory.h index 0d1d3e9..86293df 100644 --- a/mojo/application/content_handler_factory.h +++ b/mojo/application/content_handler_factory.h
@@ -6,14 +6,17 @@ #define MOJO_APPLICATION_CONTENT_HANDLER_FACTORY_H_ #include "base/memory/scoped_ptr.h" -#include "mojo/public/cpp/application/interface_factory.h" +#include "mojo/public/cpp/application/service_provider_impl.h" #include "mojo/public/interfaces/application/shell.mojom.h" #include "mojo/services/content_handler/interfaces/content_handler.mojom.h" #include "mojo/services/network/interfaces/url_loader.mojom.h" namespace mojo { -class ContentHandlerFactory : public InterfaceFactory<ContentHandler> { +struct ConnectionContext; + +// TODO(vtl): Should this even be a class, now that InterfaceFactory is no more? +class ContentHandlerFactory { public: class HandledApplicationHolder { public: @@ -47,13 +50,17 @@ }; explicit ContentHandlerFactory(Delegate* delegate); - ~ContentHandlerFactory() override; + ~ContentHandlerFactory(); + + // Creates a content handler for the given connection (context and request). + void Create(const ConnectionContext& connection_context, + InterfaceRequest<ContentHandler> content_handler_request); + + // For use with |ServiceProviderImpl::AddService<ContentHandler>()|. + ServiceProviderImpl::InterfaceRequestHandler<ContentHandler> + GetInterfaceRequestHandler(); private: - // From InterfaceFactory: - void Create(const ConnectionContext& connection_context, - InterfaceRequest<ContentHandler> request) override; - Delegate* delegate_; DISALLOW_COPY_AND_ASSIGN(ContentHandlerFactory);
diff --git a/services/dart/content_handler_main.cc b/services/dart/content_handler_main.cc index a8c6d2a..44acb66 100644 --- a/services/dart/content_handler_main.cc +++ b/services/dart/content_handler_main.cc
@@ -242,9 +242,11 @@ .connection_context() .connection_url); if (default_strict_ || strict) { - connection->AddService(&strict_content_handler_factory_); + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + strict_content_handler_factory_.GetInterfaceRequestHandler()); } else { - connection->AddService(&content_handler_factory_); + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); } return true; }
diff --git a/services/java_handler/java_handler.cc b/services/java_handler/java_handler.cc index 6493233..d8e2d91 100644 --- a/services/java_handler/java_handler.cc +++ b/services/java_handler/java_handler.cc
@@ -120,7 +120,8 @@ bool JavaHandler::ConfigureIncomingConnection( mojo::ApplicationConnection* connection) { - connection->AddService(&content_handler_factory_); + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); return true; }
diff --git a/services/js/content_handler_main.cc b/services/js/content_handler_main.cc index 43cbcb8..e102661 100644 --- a/services/js/content_handler_main.cc +++ b/services/js/content_handler_main.cc
@@ -32,7 +32,8 @@ // Overridden from ApplicationDelegate: bool ConfigureIncomingConnection( mojo::ApplicationConnection* connection) override { - connection->AddService(&content_handler_factory_); + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); return true; }
diff --git a/services/nacl/nonsfi/content_handler_main_nexe.cc b/services/nacl/nonsfi/content_handler_main_nexe.cc index 441ceda..003bfbe 100644 --- a/services/nacl/nonsfi/content_handler_main_nexe.cc +++ b/services/nacl/nonsfi/content_handler_main_nexe.cc
@@ -28,7 +28,8 @@ // Overridden from ApplicationDelegate: bool ConfigureIncomingConnection( mojo::ApplicationConnection* connection) override { - connection->AddService(&content_handler_factory_); + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); return true; }
diff --git a/services/nacl/nonsfi/content_handler_main_pexe.cc b/services/nacl/nonsfi/content_handler_main_pexe.cc index 7fcc2a1..4e0bb76 100644 --- a/services/nacl/nonsfi/content_handler_main_pexe.cc +++ b/services/nacl/nonsfi/content_handler_main_pexe.cc
@@ -51,7 +51,8 @@ // Overridden from ApplicationDelegate: bool ConfigureIncomingConnection( mojo::ApplicationConnection* connection) override { - connection->AddService(&content_handler_factory_); + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); return true; }
diff --git a/services/nacl/sfi/content_handler_main.cc b/services/nacl/sfi/content_handler_main.cc index a5ebec6..dcca4a7 100644 --- a/services/nacl/sfi/content_handler_main.cc +++ b/services/nacl/sfi/content_handler_main.cc
@@ -105,7 +105,8 @@ // Overridden from ApplicationDelegate: bool ConfigureIncomingConnection( mojo::ApplicationConnection* connection) override { - connection->AddService(&content_handler_factory_); + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); return true; }
diff --git a/services/python/content_handler/content_handler_main.cc b/services/python/content_handler/content_handler_main.cc index be6897d..d4d6f0a 100644 --- a/services/python/content_handler/content_handler_main.cc +++ b/services/python/content_handler/content_handler_main.cc
@@ -215,10 +215,13 @@ bool ConfigureIncomingConnection(ApplicationConnection* connection) override { if (IsDebug(connection->GetServiceProviderImpl() .connection_context() - .connection_url)) - connection->AddService(&debug_content_handler_factory_); - else - connection->AddService(&content_handler_factory_); + .connection_url)) { + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + debug_content_handler_factory_.GetInterfaceRequestHandler()); + } else { + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); + } return true; }
diff --git a/shell/android/android_handler.cc b/shell/android/android_handler.cc index c52b340..2f0097f 100644 --- a/shell/android/android_handler.cc +++ b/shell/android/android_handler.cc
@@ -132,7 +132,8 @@ bool AndroidHandler::ConfigureIncomingConnection( mojo::ApplicationConnection* connection) { - connection->AddService(&content_handler_factory_); + connection->GetServiceProviderImpl().AddService<mojo::ContentHandler>( + content_handler_factory_.GetInterfaceRequestHandler()); return true; }