// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/fuchsia/process_lifecycle.h" #include #include #include #include "base/check.h" #include "base/fuchsia/fuchsia_logging.h" namespace base { ProcessLifecycle::ProcessLifecycle(base::OnceClosure on_stop) : on_stop_(std::move(on_stop)) { // Sanity-check that an instance was not already created. static bool was_created = false; DCHECK(!was_created); was_created = true; // Under Components Framework v2 the ELF runner provides PA_LIFECYCLE. zx::channel lifecycle_server_channel(zx_take_startup_handle(PA_LIFECYCLE)); CHECK(lifecycle_server_channel.is_valid()); fidl::ServerEnd lifecycle_server_end( std::move(lifecycle_server_channel)); binding_.emplace(async_get_default_dispatcher(), std::move(lifecycle_server_end), this, fidl::kIgnoreBindingClosure); } ProcessLifecycle::~ProcessLifecycle() = default; void ProcessLifecycle::Stop(ProcessLifecycle::StopCompleter::Sync& completer) { if (on_stop_) { std::move(on_stop_).Run(); } } } // namespace base