blob: c0f0b6d7823dcea67933dee32daf1d0feec1d5af [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.auth;
/// An instance of this service is exposed to agents in their namespace.
/// |AgentContext| allows an agent to schedule tasks which run in response to
/// triggers. Triggers are conditions such as a message arriving on a
/// MessageQueue.
[Discoverable]
interface AgentContext {
/// DEPRECATED: ComponentContext is now available in the
/// namespace/environment for Modules.
1: GetComponentContext(request<ComponentContext> request);
/// Connects to an EntityReferenceFactory for this Agent. Entity references
/// obtained from this EntityReferenceFactory will be resolved back to this
/// Agent.
4: GetEntityReferenceFactory(request<EntityReferenceFactory> request);
/// Schedules a task described in |task_info|. When this task is scheduled to
/// run, Agent.RunTask() is called.
///
/// TODO(MI4-962): Add a callback to task scheduling.
5: ScheduleTask(TaskInfo task_info);
/// No new runs of this task will be scheduled.
6: DeleteTask(string task_id);
/// The auth token manager this Agent may use for accessing external services.
7: GetTokenManager(request<fuchsia.auth.TokenManager> request);
};
/// Used to describe a task to the framework.
struct TaskInfo {
/// An agent provided task id that can be used later to refer to this task.
string task_id;
/// The condition that would cause this task to get scheduled.
TriggerCondition trigger_condition;
/// If set to true, the trigger condition will be persisted on the user's
/// ledger and will be available across reboots and devices.
bool persistent;
};
/// Describes the condition that needs to be met for a task to become scheduled.
/// This is not yet complete and will be extended or changed.
union TriggerCondition {
/// Triggers when there is a new message on a message queue.
///
/// |message_on_queue| is the name of the message queue to be watched. This
/// means that only the component that originally obtained the message queue
/// will be able to observe new message events.
string message_on_queue;
/// Triggers when a message queue is deleted.
///
/// |queue_deleted| is the token for the message queue that is to be watched.
/// This allows both message queue readers and writers to watch for queue
/// deletions.
string queue_deleted;
/// Fires an inexact repeating alarm every |alarm_in_seconds| seconds that'll
/// satisfy this trigger condition. The first alarm fires in
/// |alarm_in_seconds| seconds.
uint32 alarm_in_seconds;
};