| Index: services/service_manager/public/cpp/service.h
|
| diff --git a/services/service_manager/public/cpp/service.h b/services/service_manager/public/cpp/service.h
|
| index 2b8e780d0b815c9bfad0241c168def0431467a70..958f10f16bb9971ce42c0729cdffd37dda03c3fe 100644
|
| --- a/services/service_manager/public/cpp/service.h
|
| +++ b/services/service_manager/public/cpp/service.h
|
| @@ -12,26 +12,33 @@
|
| struct ServiceInfo;
|
|
|
| // The primary contract between a Service and the Service Manager, receiving
|
| -// lifecycle notifications and connection requests.
|
| +// lifecycle notifications and connection requests. Every Service must minimally
|
| +// implement OnConnect().
|
| class Service {
|
| public:
|
| - Service();
|
| virtual ~Service();
|
|
|
| - // Called exactly once, when a bidirectional connection with the Service
|
| - // Manager has been established. No calls to OnConnect() will be received
|
| - // before this.
|
| - virtual void OnStart();
|
| + // Called once a bidirectional connection with the Service Manager has been
|
| + // established.
|
| + //
|
| + // |context| is the ServiceContext for this instance of the service. It's
|
| + // guaranteed to outlive the Service instance and therefore may be retained by
|
| + // it.
|
| + //
|
| + // Use the context to retrieve information about the service instance, make
|
| + // outgoing service connections, and issue other requests to the Service
|
| + // Manager on behalf of this instance.
|
| + //
|
| + // Called exactly once before any calls to OnConnect().
|
| + virtual void OnStart(ServiceContext* context);
|
|
|
| // Called each time a connection to this service is brokered by the Service
|
| // Manager. Implement this to expose interfaces to other services.
|
| //
|
| // Return true if the connection should succeed or false if the connection
|
| // should be rejected.
|
| - //
|
| - // The default implementation returns false.
|
| virtual bool OnConnect(const ServiceInfo& remote_info,
|
| - InterfaceRegistry* registry);
|
| + InterfaceRegistry* registry) = 0;
|
|
|
| // Called when the Service Manager has stopped tracking this instance. The
|
| // service should use this as a signal to shut down, and in fact its process
|
| @@ -49,40 +56,6 @@
|
| // OnConnect() is invoked, neither will be invoked at any point after this
|
| // OnStop().
|
| virtual bool OnStop();
|
| -
|
| - protected:
|
| - // Access the ServiceContext associated with this Service. Note that this is
|
| - // only valid to call during or after OnStart(), but never before! As such,
|
| - // it's always safe to call in OnStart() and OnConnect(), but should generally
|
| - // be avoided in OnStop().
|
| - ServiceContext* context() const;
|
| -
|
| - private:
|
| - friend class ForwardingService;
|
| - friend class ServiceContext;
|
| -
|
| - // NOTE: This is guaranteed to be called before OnStart().
|
| - void set_context(ServiceContext* context) { service_context_ = context; }
|
| -
|
| - ServiceContext* service_context_ = nullptr;
|
| -};
|
| -
|
| -// TODO(rockot): Remove this. It's here to satisfy a few remaining use cases
|
| -// where a Service impl is owned by something other than its ServiceContext.
|
| -class ForwardingService : public Service {
|
| - public:
|
| - // |target| must outlive this object.
|
| - explicit ForwardingService(Service* target);
|
| - ~ForwardingService() override;
|
| -
|
| - private:
|
| - // Service:
|
| - void OnStart() override;
|
| - bool OnConnect(const ServiceInfo& remote_info,
|
| - InterfaceRegistry* registry) override;
|
| - bool OnStop() override;
|
| -
|
| - Service* const target_ = nullptr;
|
| };
|
|
|
| } // namespace service_manager
|
|
|