// Copyright 2020 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.modular.session;

using fuchsia.mem;

/// A protocol used to launch sessionmgr.
///
/// basemgr serves this protocol to session components.
@discoverable
protocol Launcher {
    /// Launches an instance of sessionmgr with the given Modular configuration.
    ///
    /// |config| should contain all configuration necessary for starting a
    /// session. When LaunchSessionmgr is called, basemgr uses only |config| to
    /// configure the session. It does not use any fields from its startup
    /// configuration (/config(_override)/data/startup.config).
    ///
    /// |config| cannot include a session launcher component.
    ///
    /// If sessionmgr is already running, it will be stopped and restarted with
    /// the new configuration.
    ///
    /// On error, the protocol channel is closed with:
    ///
    ///   * `ZX_ERR_INVALID_ARGS`: |config| is invalid, could not be read, or
    ///     includes a session launcher component.
    ///   * `ZX_ERR_BAD_STATE`: The session cannot be launched because
    ///     basemgr is shutting down.
    ///
    /// * `config` Modular configuration serialized as UTF-8 JSON
    LaunchSessionmgr(resource struct {
        config fuchsia.mem.Buffer;
    });
};
