// 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<ProgramMetadata>? 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<channel>? 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<ComponentController>? controller);
};
