blob: b44c552b5b70cf6514ba49dd7fd32ba54e3d5237 [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.modular.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 {
// Connects to the ComponentContext which this AgentContext is a part of.
1: GetComponentContext(request<ComponentContext> @request);
// The auth token provider this Agent may use for accessing external services.
2: GetTokenProvider(request<fuchsia.modular.auth.TokenProvider> @request);
// Connects to the IntelligenceServices for this Agent.
3: GetIntelligenceServices(request<IntelligenceServices> @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);
};
// 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;
};