| // Copyright 2018 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.sys2; |
| |
| /// A component is a unit of executable software. |
| /// |
| /// This object provides the component's declaration, access to its package's |
| /// content, and relevant metadata. |
| resource table Component { |
| /// The resolved URL of the component. |
| /// This is the canonical URL obtained by the component resolver after |
| /// following redirects and resolving relative paths. |
| 1: string resolved_url; |
| |
| /// The component's declaration. |
| /// This information is typically obtained from the component's manifest |
| /// or generated by the component resolver. |
| 2: ComponentDecl decl; |
| |
| /// The package that contains the component. |
| /// By convention, the component's package is mapped to "/pkg" in its |
| /// namespace at runtime. |
| /// |
| /// This is null if the component is not represented as a package. |
| /// In that case, it is the runner's responsibility to load the component's |
| /// resource from the `resolved_url`. This mechanism is used for web |
| /// applications. |
| /// |
| /// Most runners, including but not limited to the builtin ELF runner, |
| /// require the package's directory connection to have OPEN_RIGHT_EXECUTABLE |
| /// rights in order to run the resolved component. |
| /// |
| // TODO(fxbug.dev/4051): It might be better to return a package loader interface |
| // here instead of immediately providing the package's content. |
| // That would allow for finer grained pipelining of component installation |
| // and launching of the component's runner. Moreover, sometimes we only |
| // need the component's declarative information. |
| 3: Package package; |
| }; |