|  | // 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. | 
|  | connection_error, | 
|  |  | 
|  | // 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). | 
|  | capabilities_negotiation_error, | 
|  |  | 
|  | // There was an error in media pipeline: while encoding, packetizing or | 
|  | // sending the media content. | 
|  | media_pipeline_error, | 
|  |  | 
|  | // The sink became unresponsive. | 
|  | timeout_error, | 
|  |  | 
|  | // Unspecified error. | 
|  | unknown_error | 
|  | }; | 
|  |  | 
|  | dictionary ErrorInfo { | 
|  | ErrorType type; | 
|  | DOMString? description; | 
|  | }; | 
|  |  | 
|  | enum SinkState { | 
|  | // Connected using this Display Source (i.e., there is an active session) | 
|  | Connected, | 
|  | // In process of connection to this Display Source | 
|  | Connecting, | 
|  | // Disconnected from this Display Source | 
|  | Disconnected | 
|  | }; | 
|  |  | 
|  | 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. | 
|  | PBC, | 
|  | // PIN authentication method. | 
|  | PIN | 
|  | }; | 
|  |  | 
|  | 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); | 
|  | }; | 
|  | }; |