// 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;

enum TerminationReason {
    /// The channel closed without giving a termination reason.
    UNKNOWN = 0;
    /// Component ran and exited with a given return_code.
    EXITED = 1;
    /// The given URL given to launch was invalid.
    URL_INVALID = 2;
    /// The requested package could not be found.
    PACKAGE_NOT_FOUND = 3;
    /// An internal error happened during the launch process.
    INTERNAL_ERROR = 4;
    /// Process creation failed.
    PROCESS_CREATION_ERROR = 5;
    /// A Runner failed to start.
    RUNNER_FAILED = 6;
    /// A Runner terminated while attempting to run a component.
    RUNNER_TERMINATED = 7;
    /// Attempted to use an unsupported feature.
    UNSUPPORTED = 8;
};

/// An interface for controlling components.
///
/// Closing this interface implicitly kills the controlled component unless
/// the `Detach` method has been called.
///
/// If the component exits, this interface will be closed.
///
/// Typically obtained via `Launcher.CreateComponent`.
protocol ComponentController {
    /// Terminates the component.
    ///
    /// This ComponentController connection is closed when the component has
    /// terminated.
    Kill();

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

    /// DEPRECATED: Use OnTerminated instead of Wait().
    /// 3: Wait()

    /// Event that is triggered when the component is terminated.
    ///
    /// This event provides the return code of the process and reason for
    /// its termination. The return_code is only valid if the termination
    /// reason is EXITED. If the termination reason is not EXITED, the
    /// return code is guaranteed not to be 0.
    -> OnTerminated(int64 return_code, TerminationReason termination_reason);

    /// Event that is triggered when the component's output directory is mounted.
    ///
    /// This event will not be triggered for every component, only those that
    /// serve a directory over their `PA_DIRECTORY_REQUEST` handle.
    -> OnDirectoryReady();
};
