| Index: services/service_manager/public/cpp/connector.h
|
| diff --git a/services/service_manager/public/cpp/connector.h b/services/service_manager/public/cpp/connector.h
|
| index 37d833815445f21a456b900f3c087edaeeb462ac..ae15116292acc928d3a5150fd84bcdfb1a675411 100644
|
| --- a/services/service_manager/public/cpp/connector.h
|
| +++ b/services/service_manager/public/cpp/connector.h
|
| @@ -7,7 +7,6 @@
|
|
|
| #include <memory>
|
|
|
| -#include "services/service_manager/public/cpp/connection.h"
|
| #include "services/service_manager/public/cpp/identity.h"
|
| #include "services/service_manager/public/interfaces/connector.mojom.h"
|
| #include "services/service_manager/public/interfaces/service.mojom.h"
|
| @@ -17,27 +16,31 @@ namespace service_manager {
|
|
|
| // An interface that encapsulates the Service Manager's brokering interface, by
|
| // which
|
| -// connections between services are established. Once Connect() is called,
|
| -// this class is bound to the thread the call was made on and it cannot be
|
| -// passed to another thread without calling Clone().
|
| +// connections between services are established. Once either StartService() or
|
| +// BindInterface() is called, this class is bound to the thread the call was
|
| +// made on and it cannot be passed to another thread without calling Clone().
|
| //
|
| // An instance of this class is created internally by ServiceContext for use
|
| // on the thread ServiceContext is instantiated on.
|
| //
|
| // To use this interface on another thread, call Clone() and pass the new
|
| -// instance to the desired thread before calling Connect().
|
| +// instance to the desired thread before calling StartService() or
|
| +// BindInterface().
|
| //
|
| // While instances of this object are owned by the caller, the underlying
|
| // connection with the service manager is bound to the lifetime of the instance
|
| -// that
|
| -// created it, i.e. when the application is terminated the Connector pipe is
|
| -// closed.
|
| +// that created it, i.e. when the application is terminated the Connector pipe
|
| +// is closed.
|
| class Connector {
|
| public:
|
| + using StartServiceCallback =
|
| + base::Callback<void(mojom::ConnectResult, const Identity& identity)>;
|
| +
|
| class TestApi {
|
| public:
|
| using Binder = base::Callback<void(mojo::ScopedMessagePipeHandle)>;
|
| explicit TestApi(Connector* connector) : connector_(connector) {}
|
| + ~TestApi() { connector_->ResetStartServiceCallback(); }
|
|
|
| // Allows caller to specify a callback to bind requests for |interface_name|
|
| // from |service_name| locally, rather than passing the request through the
|
| @@ -50,6 +53,13 @@ class Connector {
|
| }
|
| void ClearBinderOverrides() { connector_->ClearBinderOverrides(); }
|
|
|
| + // Register a callback to be run with the result of an attempt to start a
|
| + // service. This will be run in response to calls to StartService() or
|
| + // BindInterface().
|
| + void SetStartServiceCallback(const StartServiceCallback& callback) {
|
| + connector_->SetStartServiceCallback(callback);
|
| + }
|
| +
|
| private:
|
| Connector* connector_;
|
| };
|
| @@ -60,22 +70,20 @@ class Connector {
|
| // for the other end the Connector's interface.
|
| static std::unique_ptr<Connector> Create(mojom::ConnectorRequest* request);
|
|
|
| + // Creates an instance of a service for |identity|.
|
| + virtual void StartService(const Identity& identity) = 0;
|
| +
|
| + // Creates an instance of the service |name| inheriting the caller's identity.
|
| + virtual void StartService(const std::string& name) = 0;
|
| +
|
| // Creates an instance of a service for |identity| in a process started by the
|
| - // client (or someone else). Must be called before Connect() may be called to
|
| - // |identity|.
|
| + // client (or someone else). Must be called before BindInterface() may be
|
| + // called to |identity|.
|
| virtual void StartService(
|
| const Identity& identity,
|
| mojom::ServicePtr service,
|
| mojom::PIDReceiverRequest pid_receiver_request) = 0;
|
|
|
| - // Requests a new connection to a service. Returns a pointer to the
|
| - // connection if the connection is permitted by that service, nullptr
|
| - // otherwise. Once this method is called, this object is bound to the thread
|
| - // on which the call took place. To pass to another thread, call Clone() and
|
| - // pass the result.
|
| - virtual std::unique_ptr<Connection> Connect(const std::string& name) = 0;
|
| - virtual std::unique_ptr<Connection> Connect(const Identity& target) = 0;
|
| -
|
| // Connect to |target| & request to bind |Interface|.
|
| template <typename Interface>
|
| void BindInterface(const Identity& target,
|
| @@ -100,8 +108,9 @@ class Connector {
|
| mojo::ScopedMessagePipeHandle interface_pipe) = 0;
|
|
|
| // Creates a new instance of this class which may be passed to another thread.
|
| - // The returned object may be passed multiple times until Connect() is called,
|
| - // at which point this method must be called again to pass again.
|
| + // The returned object may be passed multiple times until StartService() or
|
| + // BindInterface() is called, at which point this method must be called again
|
| + // to pass again.
|
| virtual std::unique_ptr<Connector> Clone() = 0;
|
|
|
| // Binds a Connector request to the other end of this Connector.
|
| @@ -114,6 +123,9 @@ class Connector {
|
| const std::string& interface_name,
|
| const TestApi::Binder& binder) = 0;
|
| virtual void ClearBinderOverrides() = 0;
|
| + virtual void SetStartServiceCallback(
|
| + const StartServiceCallback& callback) = 0;
|
| + virtual void ResetStartServiceCallback() = 0;
|
| };
|
|
|
| } // namespace service_manager
|
|
|