// 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 a user was logged in, this will return
    /// when the same user is logged back in. Otherwise, this will return when
    /// sessionmgr has been torn down.
    RestartSession() -> ();

    /// Toggles to the next session defined in the basemgr.config file.
    SelectNextSessionShell() -> ();

    /// Logs in as a guest user.
    LoginAsGuest();

    /// Kills the running instance of basemgr.
    Shutdown();
};
