| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.sys; |
| |
| // An FDIO file descriptor. |
| // TODO(abarth): Use the real FDIO declaration once FDIO converts to FIDL2. |
| struct FileDescriptor { |
| // The FDIO types of the handle (e.g., FA_FDIO_REMOTE). |
| int32 type0; |
| int32 type1; |
| int32 type2; |
| |
| // The handles for the file descriptor (e.g., a channel). |
| handle? handle0; |
| handle? handle1; |
| handle? handle2; |
| }; |
| |
| // Information used to create an instance of a component and obtain |
| // services from it. |
| struct LaunchInfo { |
| // The location from which to retrieve this component. |
| // |
| // This field will probably be replaced with a stronger notion of identity, |
| // such as an unforgeable token. This field is included in this iteration to |
| // ease the transition from the previous component interfaces. |
| string url; |
| |
| // The arguments to be provided to the component. |
| vector<string>? arguments; |
| |
| // The file descriptor to use for stdout. |
| // |
| // If null, the component will use the default stdout for the environment. |
| FileDescriptor? out; |
| |
| // The file descriptor to use for stderr. |
| // |
| // If null, the component will use the default stderr for the environment. |
| FileDescriptor? err; |
| |
| // The interface request for a Directory that is passed through to the |
| // component and arrives in the component as its |directory_request| |
| // interface request. |
| handle<channel>? directory_request; |
| |
| // A custom namespace that can be appended to the namespace generated by |
| // appmgr and provided to this component. |
| // Adding a mount point at standard paths like 'pkg' or 'svc' will be ignored. |
| // HACK(alhaad): Adding mount points for deprecated default directories like |
| // '/data' will override the default. |
| FlatNamespace? flat_namespace; |
| |
| // A list of services to be added to this component's svc namespace. These |
| // services are in addition to those coming from Environment. |
| ServiceList? additional_services; |
| }; |
| |
| struct ServiceList { |
| // A list of services that can be requested from |provider|. |
| vector<string> names; |
| |
| // A service provider to get the services listed in |names| from. |
| ServiceProvider? provider; |
| |
| // A channel to the directory hosting the services in |names|. |
| // TODO(CP-124): Support |host_directory| for CreateComponent and deprecate |
| // |provider|. |
| handle<channel>? host_directory; |
| }; |
| |
| // An interface for creating component instances. |
| // |
| // Typically obtained via |Environment.GetLauncher|. |
| [Discoverable] |
| protocol Launcher { |
| // Creates a new instance of the component described by |launch_info|. |
| // |
| // The component instance is created in the |Environment| |
| // associated with this |Launcher|. When creating the component, |
| // the environment requests the environment services for this component from |
| // its |EnvironmentHost|. |
| // |
| // The |controller| can be used to control the lifecycle of the created |
| // component instance. If an |ComponentController|'s interface is |
| // requested, the component instance is killed when the interface is closed. |
| CreateComponent(LaunchInfo launch_info, |
| request<ComponentController>? controller); |
| }; |