blob: bdc4f91833b84df75c7e3d4fa81bca9bda624c79 [file] [log] [blame]
// 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.
component_url 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);
};