blob: f8c599c76f5b1c389387aa6a058590b89b75ab2c [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The <code>chrome.displaySource</code> API creates a Display
// session using WebMediaStreamTrack as sources.
namespace displaySource {
enum ErrorType {
// The connection with sink cannot be established or has dropped
// unexpectedly.
// The capabilities of this Display Source and the connected
// sink do not fit (e.g. the sink cannot play the media content of
// the formats given by the source).
// There was an error in media pipeline: while encoding, packetizing or
// sending the media content.
// The sink became unresponsive.
// Unspecified error.
dictionary ErrorInfo {
ErrorType type;
DOMString? description;
enum SinkState {
// Connected using this Display Source (i.e., there is an active session)
// In process of connection to this Display Source
// Disconnected from this Display Source
dictionary SinkInfo {
// Id of the sink. It is guaranteed to be unique during the browser session.
long id;
// Human readable name of the sink.
DOMString name;
// State of the sink.
SinkState state;
enum AuthenticationMethod {
// Push Button Config authentication method.
// PIN authentication method.
dictionary AuthenticationInfo {
// Authentication method.
AuthenticationMethod method;
// Authentication data (e.g. PIN value).
DOMString? data;
dictionary StartSessionInfo {
// Id of the sink to connect.
long sinkId;
// Authentication information.
AuthenticationInfo? authenticationInfo;
// The source audio track.
[instanceOf=MediaStreamTrack] object? audioTrack;
// The source audio track.
[instanceOf=MediaStreamTrack] object? videoTrack;
callback GetSinksCallback = void (SinkInfo[] result);
callback RequestAuthenticationCallback = void (AuthenticationInfo result);
// The callback is used by <code>startSession, terminateSession</code>
// to signal completion. The callback is called with
// <code>chrome.runtime.lastError</code> set to error
// message if the call has failed.
[inline_doc] callback CallCompleteCallback = void ();
interface Functions {
// Queries the list of the currently available Display sinks.
// |callback| : Called when the request is completed. The argument list
// is empty if no available sinks were found.
static void getAvailableSinks(GetSinksCallback callback);
// Queries authentication data from the sink device.
// |sinkId| : Id of the sink
// |callback| : Called when authentication info retrieved from the sink.
// The argument |method| field contains the authentication method required
// by the sink for connection; the |data| field can be null or can contain
// some supplementary data provided by the sink. If authentication info
// cannot be retrieved from the sink the "chrome.runtime.lastError" property
// is defined.
static void requestAuthentication(long sinkId,
RequestAuthenticationCallback callback);
// Creates a Display session using the provided StartSessionInfo instance.
// The input argument fields must be initialized as described below:
// The |sinkId| must be a valid id of a sink (obtained via
// ‘getAvailableSinks’).
// The |audioTrack| or |videoTrack| must be of type MediaStreamTrack.
// Either |audioTrack| or |videoTrack| can be null but not both. This
// means creating a session with only audio or video.
// The |authenticationInfo| can be null if no additional authentication data
// are required by the sink; otherwise its |data| field must contain the
// required authentication data (e.g. PIN value) and its |method| field must
// be the same as one obtained from ‘requestAuthentication’.
// |callback| : Called when the session is started.
[nocompile] static void startSession(
StartSessionInfo sessionInfo, optional CallCompleteCallback callback);
// Terminates the active Display session.
// |sinkId| : Id of the connected sink.
// |callback| : Called when the session is terminated.
[nocompile] static void terminateSession(
long sinkId, optional CallCompleteCallback callback);
interface Events {
// Event fired when the available sinks are modified (either their amount
// or properties)
// |sinks| the list of all currently available sinks
static void onSinksUpdated(SinkInfo[] sinks);
// Event fired when the Display session is terminated.
// |sinkId| Id of the peer sink
[nocompile] static void onSessionTerminated(long sinkId);
// Event fired when an error occurs.
// |sinkId| Id of the peer sink
// |errorInfo| error description
[nocompile] static void onSessionErrorOccured(long sinkId,
ErrorInfo errorInfo);