blob: 660ae83beda298761fda5c6a9f1e3a23b8a29313 [file] [log] [blame]
// Copyright 2021 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.component.decl;
/// Declares an environment which configures a realm.
type Environment = table {
/// The name of this environment.
1: name name;
/// Specifies how the initial state of this environment is constructed.
2: extends EnvironmentExtends;
/// List of runners available in this environment.
///
/// This list determines the total set of runners that are available for any
/// component in the environment to use.
3: runners vector<RunnerRegistration>:MAX;
/// List of component resolvers and the URL schemes they are registered to resolve.
/// These registrations determine how components are resolved in the realm.
/// If the component URL scheme does not match any of these resolvers, URL resolution
/// is delegated to the parent environment, if this environment `extends` from `REALM`.
4: resolvers vector<ResolverRegistration>:MAX;
/// Expose capabilties to debug section when component manager allows it.
///
/// These capabilities are accessible to any component in the environment
/// with a `use` declaration with `source == debug`. Only capabilities
/// intended to support development should be declared here, and they are
/// only allowed if explicitly included in the component manager allowlist.
5: debug_capabilities vector<DebugRegistration>:MAX;
/// The duration in milliseconds that the component will have to stop before
/// it is killed.
6: stop_timeout_ms uint32;
};
/// Specifies how a declared environment's initial set of properties are assigned.
type EnvironmentExtends = strict enum {
/// The environment has no initial set of properties.
NONE = 0;
/// The environment's initial set of properties are inherited from its realm.
/// Inherited properties include any fields defined in `EnvironmentDecl`.
REALM = 1;
};
/// A repository of the runners available in an environment.
type RunnerRegistration = table {
/// The name of the runner capability as it's exposed to, offered, or
/// defined by this component.
1: source_name name;
/// The provider of the capability relative to the component itself. Must be
/// `parent`, `self`, or `child`.
2: source Ref;
/// The name by which the runner is made available in this environment.
3: target_name name;
};
/// A mapping of URL scheme to resolver name.
type ResolverRegistration = table {
/// The name of the resolver.
1: resolver name;
/// The provider of the capability relative to the component itself. Must be
/// `parent`, `self`, or `child`.
2: source Ref;
/// The URL scheme the resolver is registered to handle.
/// Only one resolver may be registered to a particular URL scheme.
/// The URL scheme must start with a lowercase ASCII letter (a-z), and may contain
/// lowercase ASCII letters, digits, `+`, `-`, and `.`.
3: scheme url_scheme;
};
/// Declares a capability registered in the debug section of an environment.
type DebugRegistration = flexible union {
1: protocol DebugProtocolRegistration;
};
/// Registers a protocol in the environment as a debug capability. This makes
/// it available to any component in the environment that uses it with
/// `source == debug`.
///
/// To learn more about protocols, see:
/// https://fuchsia.dev/fuchsia-src/glossary#protocol
type DebugProtocolRegistration = table {
/// The provider of the capability relative to the component itself. Must be
/// `parent`, `self`, or `child`.
1: source Ref;
/// Name identifying the protocol being offered.
2: source_name name;
/// The name by which the capability is being offered.
3: target_name name;
};