| // 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; | 
 | using fuchsia.sys; | 
 |  | 
 | /// 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(fuchsia.mem.Buffer config); | 
 |  | 
 |     /// Launches an instance of sessionmgr with the given Modular configuration and | 
 |     /// a list of services to be provided to agents in | 
 |     /// ModularConfig.sessionmgr_config.session_agents and .startup_agents. | 
 |     /// | 
 |     /// |additional_services.host_directory| is required. The channel will close with | 
 |     /// ZX_ERR_INVALID_ARGS if not present. | 
 |     LaunchSessionmgrWithServices(fuchsia.mem.Buffer config, | 
 |                                  fuchsia.sys.ServiceList additional_services); | 
 | }; |