// 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; // Maximum length for an environment label. const uint32 kLabelMaxLength = 32; struct EnvironmentOptions { // True if this environment should inherit services provided by the // parent environment. bool inherit_parent_services; // True if components in this environment can share a runner provided // by the parent environment. If false, a new runner will be started // in this environment for components. bool allow_parent_runners; // True if this environment should be killed first in out of memory // situations by setting the ZX_PROP_JOB_KILL_ON_OOM property on this // environment's job. bool kill_on_oom; }; // An interface for managing a set of applications. // // Applications run inside environments, which provide ambient services and // support for their lifecycle. [Discoverable] interface Environment { // Creates a new environment nested inside this environment. // // When applications are created inside the nested environment using the // environment's |Launcher|, the environment requests the // environment services from |host_directory| before passing those services to // the newly created application in its |StartupInfo|. // // The |controller| can be used to control the lifecycle of the created // environment. If an |EnvironmentController|'s interface is // request, the environment will be killed when the interface is closed. // // The |label| is an optional name to associate with the environment for // diagnostic purposes. The label will be truncated if it is longer // than |kLabelMaxLength|. // // |additional_services|, which may be empty, contains a list of services // that the environment provides, which are hosted by // |additional_services.host_directory|. If |options.inherit_parent_services| // is false, |host_directory| must provide a |Loader| service if it wishes to // allow new components to be loaded in the new environment. // // |options| provides additional options, see |EnvironmentOptions| for // details. 1: CreateNestedEnvironment(request<Environment> environment, request<EnvironmentController>? controller, string? label, ServiceList? additional_services, EnvironmentOptions options); // Gets the Launcher associated with this environment. // // Applications created using this application launcher will be given the // environment services provided by this environment's |host_directory|. 2: GetLauncher(request<Launcher> launcher); // Gets a superset of services provided by this environment's // |host_directory|. 3: GetServices(request<ServiceProvider> services); // Gets a superset of services provided by this environment's // |host_directory|. 4: GetDirectory(handle<channel> directory_request); };