// 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; using fuchsia.mem; // Information given to components at startup. // // For ELF binaries, this information is provided in the initialization message // given to libc by fuchsia.process.Launcher. struct StartupInfo { // The launch info for the to start. LaunchInfo launch_info; // The namespace in which to run the component. FlatNamespace flat_namespace; // Key string value string map of the component's program metadata, obtained // from its component manifest. vector? program_metadata; // TODO(abarth): Add more fields to this struct relating to component and // environment identity. }; // Program information about a component. struct ProgramMetadata { // Key for program metadata pair. E.g. "binary" for an ELF binary component, // or "data" for a flutter/dart component. string key; // Value for program metadata pair. E.g. "bin/app" for a "binary" key, or // "data/foo" for a flutter/dart component. string value; }; // A binary representation of a component. // // Typically provided to |Runner.StartComponent| when starting a // component. struct Package { // 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. fuchsia.mem.Buffer? data; // 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. handle? directory; // Resolved URL of the component. This is the url specified in startup_info // after following redirects and resolving relative paths. string resolved_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] interface 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. 1: StartComponent(Package package, StartupInfo startup_info, request? controller); };