| // Copyright 2016 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. |
| library fuchsia.sys; |
| |
| using fuchsia.mem; |
| using zx; |
| |
| /// Information given to components at startup. |
| /// |
| /// For ELF binaries, this information is provided in the initialization |
| /// message given to `libc` by `fuchsia.process.Launcher`. |
| type StartupInfo = resource struct { |
| /// The launch info for the component to start. |
| launch_info LaunchInfo; |
| |
| /// The namespace in which to run the component. |
| flat_namespace FlatNamespace; |
| |
| /// Key string value string map of the component's program metadata, |
| /// obtained from its component manifest. |
| program_metadata vector<ProgramMetadata>:optional; |
| |
| // TODO(abarth): Add more fields to this struct relating to component and |
| // environment identity. |
| }; |
| |
| /// Program information about a component. |
| type ProgramMetadata = struct { |
| /// Key for program metadata pair. E.g. "binary" for an ELF binary |
| /// component, or "data" for a flutter/dart component. |
| key string; |
| |
| /// Value for program metadata pair. E.g. "bin/app" for a "binary" key, or |
| /// "data/foo" for a flutter/dart component. |
| value string; |
| }; |
| |
| /// A binary representation of a component. |
| /// |
| /// Typically provided to `Runner.StartComponent` when starting a component. |
| type Package = resource struct { |
| /// A read-only binary representation of the component. For example, if the |
| /// component is intended to run in the Dart virtual machine, this data |
| /// might contain a dartx package. |
| data box<fuchsia.mem.Buffer>; |
| |
| /// A directory containing the contents of the package. For example, if the |
| /// component is stored in pkgfs, this directory will be the pkgfs |
| /// directory containing the package. |
| directory zx.handle:<CHANNEL, optional>; |
| |
| /// Resolved URL of the component. This is the url specified in |
| /// `startup_info` after following redirects and resolving relative paths. |
| resolved_url component_url; |
| }; |
| |
| /// An interface for running components. |
| /// |
| /// Typically exposed by components that provide execution environments for |
| /// particular classes of programs. For example, the Dart virtual machine |
| /// exposes this interface to run Dart programs. |
| @discoverable |
| protocol Runner { |
| /// Execute the given component. |
| /// |
| /// Upon startup, the component is to be given the information in |
| /// `startup_info`, but the mechanism by which the component receives that |
| /// information is up to the component runner. |
| /// |
| /// The `controller` interface request typically originates from the |
| /// `Launcher.CreateComponent` message that caused this component to be |
| /// started. |
| StartComponent(resource struct { |
| package Package; |
| startup_info StartupInfo; |
| controller server_end:<ComponentController, optional>; |
| }); |
| }; |