// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module chromecast.mojom;
import "mojo/public/mojom/base/values.mojom";
// The following APIs define a simple messaging protocol between the Assistant
// Service and a Cast App web client. All messages are either dictionary values
// or a list of dictionary values (for multiple messages). The message protocol
// is specific to each app, though the general command format uses a "className"
// key which identifies the type of command to be handled by the Assistant.
// A handle to the Assistant message API. Returned by CreateMessagePipe().
// Each client has unique copy.
//
// Security: See notes for AssistantMessageService.
interface AssistantMessagePipe {
// Send a message to the Assistant service.
SendMessage(mojo_base.mojom.Value message);
};
// The interface for clients of the Assistant message API. Clients should
// register with AssistantMessageService::CreateMessagePipe() below.
//
// Security: This interface is hosted by the render frame. It receives messages
// from the Assistant service (see notes for AssistantMessageService).
interface AssistantMessageClient {
// Receive a message from the Assistant service.
OnMessage(mojo_base.mojom.Value message);
};
// Assistant service messaging endpoint.
//
// Security: This interface is hosted by the Cast Service. It is exposed to a
// small set of allow-listed renderers, based on the Cast App ID. These
// renderers exclusively belong to trusted first-party apps. This interface
// allows for communication with the Assistant service using an opaque messaging
// protocol.
interface AssistantMessageService {
// Request a handle to the Assistant message API. |client|'s OnMessage will be
// called to alert the client of this interface of messages and other events.
// For JS clients, |client_id| is the Cast App ID.
CreateMessagePipe(
string client_id,
pending_remote<AssistantMessageClient> client,
pending_receiver<AssistantMessagePipe> pipe);
};