| 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
 | 
| 
 |