1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_FUCHSIA_PROCESS_LIFECYCLE_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_FUCHSIA_PROCESS_LIFECYCLE_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <fidl/fuchsia.process.lifecycle/cpp/fidl.h> 9*6777b538SAndroid Build Coastguard Worker #include <lib/fidl/cpp/binding.h> 10*6777b538SAndroid Build Coastguard Worker #include <lib/fidl/cpp/wire/channel.h> 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #include <optional> 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 15*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h" 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker namespace base { 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker // Registers a fuchsia.process.lifecycle.Lifecycle protocol implementation to 20*6777b538SAndroid Build Coastguard Worker // receive graceful termination requests from the Component Framework v2 21*6777b538SAndroid Build Coastguard Worker // ELF executable runner. 22*6777b538SAndroid Build Coastguard Worker // 23*6777b538SAndroid Build Coastguard Worker // The implementation consumes the PA_LIFECYCLE handle, which the ELF runner 24*6777b538SAndroid Build Coastguard Worker // will provide only if the Component manifest contains a lifecycle/stop_event 25*6777b538SAndroid Build Coastguard Worker // registration. 26*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT ProcessLifecycle final 27*6777b538SAndroid Build Coastguard Worker : public fidl::Server<fuchsia_process_lifecycle::Lifecycle> { 28*6777b538SAndroid Build Coastguard Worker public: 29*6777b538SAndroid Build Coastguard Worker explicit ProcessLifecycle(base::OnceClosure on_stop); 30*6777b538SAndroid Build Coastguard Worker ~ProcessLifecycle() override; 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker ProcessLifecycle(const ProcessLifecycle&) = delete; 33*6777b538SAndroid Build Coastguard Worker ProcessLifecycle& operator=(const ProcessLifecycle&) = delete; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker // fuchsia_process_lifecycle::Lifecycle implementation. 36*6777b538SAndroid Build Coastguard Worker void Stop(StopCompleter::Sync& completer) override; 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker private: 39*6777b538SAndroid Build Coastguard Worker base::OnceClosure on_stop_; 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker std::optional<fidl::ServerBinding<fuchsia_process_lifecycle::Lifecycle>> 42*6777b538SAndroid Build Coastguard Worker binding_; 43*6777b538SAndroid Build Coastguard Worker }; 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker } // namespace base 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker #endif // BASE_FUCHSIA_PROCESS_LIFECYCLE_H_ 48