blob: 528d7ea10af5d59c53bc85a81039e038a214b843 [file] [log] [blame]
// Copyright 2019 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.app;
using fuchsia.io;
/// A common base protocol for fuchsia.app.(module`agent|*shell`).Context.
/// Clients of those protocols will have access to all of these methods through those interfaces.
[FragileBase]
protocol Context {
/// Obtains a fuchsia.io.Directory of services from the agent specified in `request.handler`.
/// Services are bound to `request.services`. The agent endpoint may close `request.services`
/// at its discretion, at which point `request.controller` must be closed by the caller.
///
/// If brokering a connection is successful, keeping `request.controller` open will ensure
/// that the agent endpoint is not terminated.
///
/// Failure to provide all required fields in `request` will close the
/// Context channel with an ZX_ERR_INVALID_ARGS.
ConnectToAgent(AgentConnectionRequest request);
};
table AgentConnectionRequest {
/// The component URL of the agent which is to provide services.
///
/// Required.
1: ComponentUrl handler;
/// `services` will be connected to a directory of services provided by `handler`.
///
/// Required.
2: request<fuchsia.io.Directory> services;
/// The agent providing `services` stays alive so long as the channel backing `controller`
/// is not dropped.
///
/// Required.
3: request<AgentController> controller;
};
/// This interface is used by calls to *Context/ConnectToAgent() to signal to the framework to keep
/// the agent alive, so long as the AgentController channel is open.
protocol AgentController {};