Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1893)

Unified Diff: mojo/shell/public/cpp/connection.h

Issue 1681933005: Extracts InterfaceRegistry from ConnectionImpl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@nested
Patch Set: . Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/shell/public/cpp/BUILD.gn ('k') | mojo/shell/public/cpp/interface_registry.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/shell/public/cpp/connection.h
diff --git a/mojo/shell/public/cpp/connection.h b/mojo/shell/public/cpp/connection.h
index ddae4fce9847fb348f19060b8124a8e9539edf4c..84f428b8f3d91e7d939ff6d19200a4fee84d9557 100644
--- a/mojo/shell/public/cpp/connection.h
+++ b/mojo/shell/public/cpp/connection.h
@@ -11,7 +11,8 @@
#include <utility>
#include "base/memory/weak_ptr.h"
-#include "mojo/shell/public/cpp/lib/interface_factory_binder.h"
+#include "mojo/shell/public/cpp/connect.h"
+#include "mojo/shell/public/cpp/interface_registry.h"
#include "mojo/shell/public/interfaces/interface_provider.mojom.h"
namespace mojo {
@@ -22,24 +23,13 @@ class InterfaceBinder;
// returned from Shell's ConnectToApplication(), and passed to ShellClient's
// AcceptConnection() each time an incoming connection is received.
//
-// To use, define a class that implements your specific interface. Then
-// implement an InterfaceFactory<Foo> that binds instances of FooImpl to
-// InterfaceRequest<Foo>s and register that on the connection like this:
+// Call AddService<T>(factory) to expose an interface to the remote application,
+// and GetInterface(&interface_ptr) to consume an interface exposed by the
+// remote application.
//
-// connection->AddInterface(&factory);
-//
-// Or, if you have multiple factories implemented by the same type, explicitly
-// specify the interface to register the factory for:
-//
-// connection->AddInterface<Foo>(&my_foo_and_bar_factory_);
-// connection->AddInterface<Bar>(&my_foo_and_bar_factory_);
-//
-// The InterfaceFactory must outlive the Connection.
-//
-// Additionally you may specify a default InterfaceBinder to handle requests for
-// interfaces unhandled by any registered InterfaceFactory. Just as with
-// InterfaceFactory, the default InterfaceBinder supplied must outlive
-// Connection.
+// Internally, this class wraps an InterfaceRegistry that accepts interfaces
+// that may be exposed to a remote application. See documentation in
+// interface_registry.h for more information.
//
// A Connection returned via Shell::ConnectToApplication() is owned by the
// caller.
@@ -60,18 +50,13 @@ class Connection {
Connection* connection_;
};
- // See class description for details.
- virtual void SetDefaultInterfaceBinder(InterfaceBinder* binder) = 0;
-
// Allow the remote application to request instances of Interface.
// |factory| will create implementations of Interface on demand.
// Returns true if the interface was exposed, false if capability filtering
// from the shell prevented the interface from being exposed.
template <typename Interface>
bool AddInterface(InterfaceFactory<Interface>* factory) {
- return SetInterfaceBinderForName(
- new internal::InterfaceFactoryBinder<Interface>(factory),
- Interface::Name_);
+ return GetLocalRegistry()->AddInterface<Interface>(factory);
}
// Binds |ptr| to an implemention of Interface in the remote application.
@@ -79,11 +64,7 @@ class Connection {
// interface.
template <typename Interface>
void GetInterface(InterfacePtr<Interface>* ptr) {
- if (shell::mojom::InterfaceProvider* ip = GetRemoteInterfaces()) {
- MessagePipe pipe;
- ptr->Bind(InterfacePtrInfo<Interface>(std::move(pipe.handle0), 0u));
- ip->GetInterface(Interface::Name_, std::move(pipe.handle1));
- }
+ mojo::GetInterface(GetRemoteInterfaces(), ptr);
}
// Returns the URL that was used by the source application to establish a
@@ -101,15 +82,6 @@ class Connection {
// Returns the URL identifying the remote application on this connection.
virtual const std::string& GetRemoteApplicationURL() = 0;
- // Returns the raw proxy to the remote application's InterfaceProvider
- // interface. Most applications will just use GetInterface() instead.
- // Caller does not take ownership.
- virtual shell::mojom::InterfaceProvider* GetRemoteInterfaces() = 0;
-
- // Returns the local application's InterfaceProvider interface. The return
- // value is owned by this connection.
- virtual shell::mojom::InterfaceProvider* GetLocalInterfaces() = 0;
-
// Register a handler to receive an error notification on the pipe to the
// remote application's InterfaceProvider.
virtual void SetRemoteInterfaceProviderConnectionErrorHandler(
@@ -134,11 +106,17 @@ class Connection {
// the ids are available, |callback| is run immediately.
virtual void AddRemoteIDCallback(const Closure& callback) = 0;
+ // Returns true if the Shell allows |interface_name| to be exposed to the
+ // remote application.
+ virtual bool AllowsInterface(const std::string& interface_name) const = 0;
+
+ // Returns the raw proxy to the remote application's InterfaceProvider
+ // interface. Most applications will just use GetInterface() instead.
+ // Caller does not take ownership.
+ virtual shell::mojom::InterfaceProvider* GetRemoteInterfaces() = 0;
+
protected:
- // Returns true if the binder was set, false if it was not set (e.g. by
- // some filtering policy preventing this interface from being exposed).
- virtual bool SetInterfaceBinderForName(InterfaceBinder* binder,
- const std::string& name) = 0;
+ virtual InterfaceRegistry* GetLocalRegistry() = 0;
virtual base::WeakPtr<Connection> GetWeakPtr() = 0;
};
« no previous file with comments | « mojo/shell/public/cpp/BUILD.gn ('k') | mojo/shell/public/cpp/interface_registry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698