Source code

Revision control

Copy as Markdown

Other Tools

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at
* The origin of this IDL file is
enum RTCStatsType {
dictionary RTCStats {
DOMHighResTimeStamp timestamp;
RTCStatsType type;
DOMString id;
dictionary RTCRtpStreamStats : RTCStats {
unsigned long ssrc;
DOMString mediaType;
DOMString kind;
DOMString transportId;
DOMString codecId;
dictionary RTCCodecStats : RTCStats {
required unsigned long payloadType;
RTCCodecType codecType;
required DOMString transportId;
required DOMString mimeType;
unsigned long clockRate;
unsigned long channels;
DOMString sdpFmtpLine;
enum RTCCodecType {
dictionary RTCReceivedRtpStreamStats: RTCRtpStreamStats {
unsigned long packetsReceived;
unsigned long packetsLost;
double jitter;
unsigned long discardedPackets; // non-standard alias for packetsDiscarded
unsigned long packetsDiscarded;
dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats {
DOMString remoteId;
unsigned long framesDecoded;
unsigned long frameWidth;
unsigned long frameHeight;
double framesPerSecond;
unsigned long long bytesReceived;
unsigned long nackCount;
unsigned long firCount;
unsigned long pliCount;
double jitterBufferDelay;
unsigned long long jitterBufferEmittedCount;
unsigned long long totalSamplesReceived;
unsigned long long concealedSamples;
unsigned long long silentConcealedSamples;
unsigned long framesReceived;
dictionary RTCRemoteInboundRtpStreamStats : RTCReceivedRtpStreamStats {
DOMString localId;
double roundTripTime;
dictionary RTCSentRtpStreamStats : RTCRtpStreamStats {
unsigned long packetsSent;
unsigned long long bytesSent;
dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats {
DOMString remoteId;
unsigned long framesEncoded;
unsigned long long qpSum;
unsigned long nackCount;
unsigned long firCount;
unsigned long pliCount;
unsigned long long headerBytesSent;
unsigned long long retransmittedPacketsSent;
unsigned long long retransmittedBytesSent;
unsigned long long totalEncodedBytesTarget;
unsigned long frameWidth;
unsigned long frameHeight;
unsigned long framesSent;
unsigned long hugeFramesSent;
double totalEncodeTime;
dictionary RTCRemoteOutboundRtpStreamStats : RTCSentRtpStreamStats {
DOMString localId;
DOMHighResTimeStamp remoteTimestamp;
dictionary RTCRTPContributingSourceStats : RTCStats {
unsigned long contributorSsrc;
DOMString inboundRtpStreamId;
dictionary RTCDataChannelStats : RTCStats {
DOMString label;
DOMString protocol;
long dataChannelIdentifier;
// RTCTransportId is not yet implemented - Bug 1225723
// DOMString transportId;
RTCDataChannelState state;
unsigned long messagesSent;
unsigned long long bytesSent;
unsigned long messagesReceived;
unsigned long long bytesReceived;
enum RTCStatsIceCandidatePairState {
dictionary RTCIceCandidatePairStats : RTCStats {
DOMString transportId;
DOMString localCandidateId;
DOMString remoteCandidateId;
RTCStatsIceCandidatePairState state;
unsigned long long priority;
boolean nominated;
boolean writable;
boolean readable;
unsigned long long bytesSent;
unsigned long long bytesReceived;
DOMHighResTimeStamp lastPacketSentTimestamp;
DOMHighResTimeStamp lastPacketReceivedTimestamp;
boolean selected;
unsigned long componentId; // moz
enum RTCIceCandidateType {
dictionary RTCIceCandidateStats : RTCStats {
DOMString address;
long port;
DOMString protocol;
RTCIceCandidateType candidateType;
long priority;
DOMString relayProtocol;
// Because we use this internally but don't support RTCIceCandidateStats,
// we need to keep the field as ChromeOnly. Bug 1225723
DOMString transportId;
DOMString proxied;
// This is for tracking the frame rate in about:webrtc
dictionary RTCVideoFrameHistoryEntryInternal {
required unsigned long width;
required unsigned long height;
required unsigned long rotationAngle;
required DOMHighResTimeStamp firstFrameTimestamp;
required DOMHighResTimeStamp lastFrameTimestamp;
required unsigned long long consecutiveFrames;
required unsigned long localSsrc;
required unsigned long remoteSsrc;
// Collection over the entries for a single track for about:webrtc
dictionary RTCVideoFrameHistoryInternal {
required DOMString trackIdentifier;
sequence<RTCVideoFrameHistoryEntryInternal> entries = [];
// Collection over the libwebrtc bandwidth estimation stats
dictionary RTCBandwidthEstimationInternal {
required DOMString trackIdentifier;
long sendBandwidthBps; // Estimated available send bandwidth
long maxPaddingBps; // Cumulative configured max padding
long receiveBandwidthBps; // Estimated available receive bandwidth
long pacerDelayMs;
long rttMs;
// This is used by about:webrtc to report SDP parsing errors
dictionary RTCSdpParsingErrorInternal {
required unsigned long lineNumber;
required DOMString error;
// This is for tracking the flow of SDP for about:webrtc
dictionary RTCSdpHistoryEntryInternal {
required DOMHighResTimeStamp timestamp;
required boolean isLocal;
required DOMString sdp;
sequence<RTCSdpParsingErrorInternal> errors = [];
// This is intended to be a list of dictionaries that inherit from RTCStats
// (with some raw ICE candidates thrown in). Unfortunately, we cannot simply
// store a sequence<RTCStats> because of slicing. So, we have to have a
// separate list for each type. Used in c++ gecko code.
dictionary RTCStatsCollection {
sequence<RTCInboundRtpStreamStats> inboundRtpStreamStats = [];
sequence<RTCOutboundRtpStreamStats> outboundRtpStreamStats = [];
sequence<RTCRemoteInboundRtpStreamStats> remoteInboundRtpStreamStats = [];
sequence<RTCRemoteOutboundRtpStreamStats> remoteOutboundRtpStreamStats = [];
sequence<RTCRTPContributingSourceStats> rtpContributingSourceStats = [];
sequence<RTCIceCandidatePairStats> iceCandidatePairStats = [];
sequence<RTCIceCandidateStats> iceCandidateStats = [];
sequence<RTCIceCandidateStats> trickledIceCandidateStats = [];
sequence<RTCDataChannelStats> dataChannelStats = [];
sequence<RTCCodecStats> codecStats = [];
// For internal use only
sequence<DOMString> rawLocalCandidates = [];
sequence<DOMString> rawRemoteCandidates = [];
sequence<RTCVideoFrameHistoryInternal> videoFrameHistories = [];
sequence<RTCBandwidthEstimationInternal> bandwidthEstimations = [];
// Details that about:webrtc can display about configured ICE servers
dictionary RTCIceServerInternal {
sequence<DOMString> urls = [];
required boolean credentialProvided;
required boolean userNameProvided;
// Details that about:webrtc can display about the RTCConfiguration
// Chrome only
dictionary RTCConfigurationInternal {
RTCBundlePolicy bundlePolicy;
required boolean certificatesProvided;
sequence<RTCIceServerInternal> iceServers = [];
RTCIceTransportPolicy iceTransportPolicy;
required boolean peerIdentityProvided;
DOMString sdpSemantics;
// A collection of RTCStats dictionaries, plus some other info. Used by
// WebrtcGlobalInformation for about:webrtc, and telemetry.
dictionary RTCStatsReportInternal : RTCStatsCollection {
required DOMString pcid;
required unsigned long browserId;
RTCConfigurationInternal configuration;
DOMString jsepSessionErrors;
DOMString localSdp;
DOMString remoteSdp;
sequence<RTCSdpHistoryEntryInternal> sdpHistory = [];
required DOMHighResTimeStamp timestamp;
double callDurationMs;
required unsigned long iceRestarts;
required unsigned long iceRollbacks;
boolean offerer; // Is the PC the offerer
required boolean closed; // Is the PC now closed
interface RTCStatsReport {
// TODO(bug 1586109): Remove this once we no longer need to be able to
// construct empty RTCStatsReports from JS.
readonly maplike<DOMString, object>;