| // Copyright 2019 The Fuchsia Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef SRC_DEVELOPER_DEBUG_DEBUG_AGENT_COMPONENT_LAUNCHER_H_ | |
| #define SRC_DEVELOPER_DEBUG_DEBUG_AGENT_COMPONENT_LAUNCHER_H_ | |
| #include <fuchsia/sys/cpp/fidl.h> | |
| #include <zircon/types.h> | |
| #include <string> | |
| #include "lib/sys/cpp/service_directory.h" | |
| #include "src/developer/debug/shared/component_utils.h" | |
| namespace debug_agent { | |
| // When preparing a component, this is information the debugger will use in | |
| // order to be able to attach to the newly starting process. | |
| struct ComponentDescription { | |
| uint64_t component_id = 0; // 0 is invalid. | |
| std::string url; | |
| std::string process_name; | |
| std::string filter; | |
| }; | |
| struct ComponentHandles { | |
| zx::socket out; | |
| zx::socket err; | |
| }; | |
| // Class designed to help setup a component and then launch it. These setups are | |
| // necessary because the agent needs some information about how the component | |
| // will be launch before it actually launches it. This is because the debugger | |
| // will set itself to "catch" the component when it starts as a process. | |
| class ComponentLauncher { | |
| public: | |
| explicit ComponentLauncher(std::shared_ptr<sys::ServiceDirectory> services); | |
| // Will fail if |argv| is invalid. The first element should be the component | |
| // url needed to launch. | |
| zx_status_t Prepare(std::vector<std::string> argv, ComponentDescription* description, | |
| ComponentHandles* handles); | |
| // The launcher has to be already successfully prepared. | |
| // The lifetime of the controller is bound to the lifetime of the component. | |
| fuchsia::sys::ComponentControllerPtr Launch(); | |
| private: | |
| std::shared_ptr<sys::ServiceDirectory> services_; | |
| fuchsia::sys::LaunchInfo launch_info_; | |
| }; | |
| } // namespace debug_agent | |
| #endif // SRC_DEVELOPER_DEBUG_DEBUG_AGENT_COMPONENT_LAUNCHER_H_ |