// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_RECEIVER_H_ #define SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_RECEIVER_H_ #include <memory> #include "base/component_export.h" #include "base/functional/bind.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "mojo/public/cpp/bindings/associated_remote.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver_set.h" #include "services/service_manager/public/cpp/connector.h" #include "services/service_manager/public/mojom/connector.mojom.h" #include "services/service_manager/public/mojom/service.mojom.h" #include "services/service_manager/public/mojom/service_control.mojom.h" namespace service_manager { class Service; // Encapsulates service-side bindings to Service Manager interfaces. Namely, // this helps receive and dispatch Service interface events to a service // implementation, while also exposing a working Connector interface the service // can use to make outgoing interface requests. // // A ServiceReceiver is considered to be "bound" after |Bind()| is invoked with // a valid Service receiver (or the equivalent constructor is used -- see // below). Upon connection error or an explicit call to |Close()|, the // ServiceReceiver will be considered "unbound" until another call to |Bind()| // is made. // // NOTE: A well-behaved service should aim to always close its ServiceReceiver // gracefully by calling |RequestClose()|. Closing a ServiceReceiver abruptly // (by either destroying it or explicitly calling |Close()|) introduces inherent // flakiness into the system unless the Service's |OnDisconnected()| has already // been invoked, because otherwise the Service Manager may have in-flight // interface requests directed at your service instance and these will be // dropped to the dismay of the service instance which issued them. Exceptions // can reasonably be made for system-wide shutdown situations where even the // Service Manager itself will be imminently torn down. class COMPONENT_EXPORT(SERVICE_MANAGER_CPP) ServiceReceiver : public mojom::Service { … }; } // namespace service_manager #endif // SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_RECEIVER_H_