// 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? 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? 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 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? host_directory; }; // An interface for creating component instances. // // Typically obtained via |Environment.GetLauncher|. [Discoverable] interface 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. 1: CreateComponent(LaunchInfo launch_info, request? controller); };