blob: 23869d182f2c36fe8adab812fef30df88cfc319c [file] [log] [blame]
// Copyright 2017 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;
using fuchsia.ledger;
using fuchsia.sys;
// Provided to all component instances in their respective initialization
// information by the framework. For example, a Module gets it from its
// ModuleContext and an Agent gets it from its AgentContext.
[Discoverable]
protocol ComponentContext {
// Gets the Ledger associated with this component. This ledger instance is
// unique to this component (nb. not the component instance) under this user.
GetLedger(request<fuchsia.ledger.Ledger> request);
// Used to start an agent in the user scope if it isn't already running, and
// connect to it.
ConnectToAgent(string url,
request<fuchsia.sys.ServiceProvider> incoming_services,
request<AgentController> controller);
// Connects to an agent that provides the given |request.service_name|, and
// then connects the given |request.channel| to that service.
// |request.agent_controller| must be kept alive until the service is no
// longer required.
//
// If an error is encountered, the |request.channel| will be closed with
// a status code, such as:
// * ZX_ERR_NOT_FOUND -- if a |request.handler| agent URL is not
// specified, and an agent for the |request.service_name| is not found
// * ZX_ERR_PEER_CLOSED -- if |request.service_name| is not available from
// the agent (either specified or discovered)
[Transitional]
ConnectToAgentService(AgentServiceRequest request);
// Used to create or delete a message queue or retrieve an existing queue
// identified by |name|. |name| is local to the calling component instance.
ObtainMessageQueue(string name, request<MessageQueue> queue);
DeleteMessageQueue(string name);
// Gets a MessageSender service that can be used to send a message to a queue
// identified by |queue_token|. Token for a MessageQueue is obtained from its
// GetToken() method. The token is unique within the scope of the user, i.e.
// it can be used by other component instances than the one that created the
// message queue.
GetMessageSender(string queue_token, request<MessageSender> sender);
// Gets the EntityResolver service, which can be used to resolve an entity
// reference to an Entity interface.
GetEntityResolver(request<EntityResolver> request);
// Creates a new entity from |type_to_data| such that duplicate types are
// overriden by subsequent entries.
//
// This is a useful way to represent small immutable entities without having
// to provide the entity using an Agent. The types and data together must be
// within 16KB in size.
CreateEntityWithData(vector<TypeToDataEntry> type_to_data)
-> (string? entity_reference);
// Gets the package name of this component.
//
// TODO(vardhan): MI4-939. This information should likely be exposed by a
// lower level (component-level, or application level). This information is
// most meant for a component to identify itself automatically when publishing
// metrics.
GetPackageName() -> (string package_name);
};
// Used by ComponentContext.ConnectToAgentService
table AgentServiceRequest {
// The name of the requested service.
1: string service_name;
// The channel that will be used to communicate with the requested service.
2: handle<channel> channel;
// The component URL of the Agent that is to provide the specified service.
// If no handler is specified, the framework will perform resolution to
// find an appropriate handler.
3: fuchsia.sys.component_url handler;
// The AgentController that keeps the agent alive.
4: request<AgentController> agent_controller;
};
// Used by ComponentContext.CreateEntityWithData().
struct TypeToDataEntry {
string type;
string data;
};