// 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.modular.internal;

/// A debug interface exposed by `basemgr` to allow developer tools to control
/// state within the `basemgr` process.
[Discoverable]
protocol BasemgrDebug {
    /// Restarts the current session.
    ///
    /// If the original session was started with a random session ID the new
    /// session will use a different random ID. If the original session was
    /// started with a stable ID the new session will use the same ID.
    ///
    /// The restarted session will use the same configuration as the
    /// current session.
    ///
    /// If no session is running, does nothing.
    RestartSession() -> ();

    /// Starts a new session using a randomly generated session ID.
    ///
    /// This has no effect if a session is already running.
    StartSessionWithRandomId();

    /// Kills the running instance of basemgr.
    ///
    /// Closes the channel with ZX_OK after successful shutdown.
    Shutdown();
};
