// Copyright 2016 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.sys;

/// An interface for controlling an environment.
///
/// Closing this interface implicitly kills the controlled environment unless
/// the `Detach` method has been called.
///
/// If the environment is destroyed, this interface will be closed.
///
/// Typically obtained via `Environment.CreateNestedEnvironment`.
protocol EnvironmentController {
    /// Terminates the environment.
    ///
    /// When an `Environment` is terminated, all applications launched
    /// in the environment (and in all transitively nested environments) are also
    /// killed.
    Kill() -> ();

    /// Decouples the lifetime of the environment from this controller.
    ///
    /// After calling `Detach`, the environment will not be implicitly killed when
    /// this interface is closed.
    Detach();

    /// Event that is triggered when the environment is created.
    -> OnCreated();
};
