| // 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 {}; |