// 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_KEEPALIVE_H_ #define SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_KEEPALIVE_H_ #include <optional> #include "base/component_export.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/observer_list_types.h" #include "base/time/time.h" #include "base/timer/timer.h" namespace service_manager { class ServiceReceiver; class ServiceKeepaliveRef; // Service implementations are responsible for managing their own lifetime and // as such are expected to call |ServiceReceiver::RequestClose()| on their own // ServiceReceiver when they are no longer in use by any clients and otherwise // have no reason to keep running (e.g. no active UI visible). // // ServiceKeepalive helps Service implementations accomplish this by vending // instances of ServiceKeepaliveRef (see |CreateRef()| below). Once any // ServiceKeepaliveRef has been created by a ServiceKeepalive, the // ServiceKeepalive begins keeping track of the number of existing // ServiceKeepaliveRefs. // // If the ServiceKeepalive's number of living ServiceKeepaliveRef instances goes // to zero, the service is considered idle. If the ServiceKeepalive is // configured with an idle timeout, it will automatically invoke // |ServiceReceiver::RequestClose()| on its associated ServiceReceiver once the // service has remained idle for that continuous duration. // // Services can use this mechanism to vend ServiceKeepaliveRefs to various parts // of their implementation (e.g. to individual bound interface implementations) // in order to safely and cleanly distribute their lifetime control. class COMPONENT_EXPORT(SERVICE_MANAGER_CPP) ServiceKeepalive { … }; // Objects which can be created by a |ServiceKeepalive| and cloned from each // other. The ServiceReceiver referenced by a ServiceKeepalive is considered // active as long as one of these objects exists and is associated with that // ServiceKeepalive. class COMPONENT_EXPORT(SERVICE_MANAGER_CPP) ServiceKeepaliveRef { … }; } // namespace service_manager #endif // SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_KEEPALIVE_H_