// 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();
};
