Bug 1290948 - Part 2: webidl for RTCRtpTransceiver and supporting interfaces r+jib, r+ehsan r=ehsan+251051,jib

MozReview-Commit-ID: DmXufKwCAyW

--HG--
extra : rebase_source : 30948762aa31846ac6ae89cd757010a60e6f44db
This commit is contained in:
Byron Campen [:bwc] 2017-08-23 15:47:54 -05:00
Родитель d76133fd0a
Коммит 5daf41d807
11 изменённых файлов: 148 добавлений и 38 удалений

Просмотреть файл

@ -683,6 +683,12 @@ DOMInterfaces = {
'wrapperCache': False
},
'TransceiverImpl': {
'nativeType': 'mozilla::TransceiverImpl',
'headerFile': 'TransceiverImpl.h',
'wrapperCache': False
},
'Plugin': {
'headerFile' : 'nsPluginArray.h',
'nativeType': 'nsPluginElement',

Просмотреть файл

@ -43,4 +43,9 @@ interface MediaStream : EventTarget {
[ChromeOnly, Throws]
static Promise<long> countUnderlyingStreams();
// Webrtc allows the remote side to name a stream whatever it wants, and we
// need to surface this to content.
[ChromeOnly]
void assignId(DOMString id);
};

Просмотреть файл

@ -1,11 +0,0 @@
/* -*- 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 http://mozilla.org/MPL/2.0/.
*/
[ChromeOnly]
interface MediaStreamList {
getter MediaStream? (unsigned long index);
readonly attribute unsigned long length;
};

Просмотреть файл

@ -41,28 +41,24 @@ interface PeerConnectionImpl {
/* Adds the tracks created by GetUserMedia */
[Throws]
void addTrack(MediaStreamTrack track, MediaStream... streams);
[Throws]
void removeTrack(MediaStreamTrack track);
[Throws]
void insertDTMF(RTCRtpSender sender, DOMString tones,
TransceiverImpl createTransceiverImpl(DOMString kind,
MediaStreamTrack? track);
[Throws]
boolean checkNegotiationNeeded();
[Throws]
void insertDTMF(TransceiverImpl transceiver, DOMString tones,
optional unsigned long duration = 100,
optional unsigned long interToneGap = 70);
[Throws]
DOMString getDTMFToneBuffer(RTCRtpSender sender);
[Throws]
void replaceTrack(MediaStreamTrack thisTrack, MediaStreamTrack withTrack);
[Throws]
void setParameters(MediaStreamTrack track,
optional RTCRtpParameters parameters);
[Throws]
RTCRtpParameters getParameters(MediaStreamTrack track);
void replaceTrackNoRenegotiation(TransceiverImpl transceiverImpl,
MediaStreamTrack? withTrack);
[Throws]
void closeStreams();
sequence<MediaStream> getLocalStreams();
sequence<MediaStream> getRemoteStreams();
void addRIDExtension(MediaStreamTrack recvTrack, unsigned short extensionId);
void addRIDFilter(MediaStreamTrack recvTrack, DOMString rid);

Просмотреть файл

@ -23,16 +23,11 @@ interface PeerConnectionObserver
void onAddIceCandidateSuccess();
void onAddIceCandidateError(unsigned long name, DOMString message);
void onIceCandidate(unsigned short level, DOMString mid, DOMString candidate);
void onNegotiationNeeded();
/* Stats callbacks */
void onGetStatsSuccess(optional RTCStatsReportInternal report);
void onGetStatsError(unsigned long name, DOMString message);
/* replaceTrack callbacks */
void onReplaceTrackSuccess();
void onReplaceTrackError(unsigned long name, DOMString message);
/* Data channel callbacks */
void notifyDataChannel(DataChannel channel);
@ -40,15 +35,20 @@ interface PeerConnectionObserver
void onStateChange(PCObserverStateType state);
/* Changes to MediaStreamTracks */
void onAddStream(MediaStream stream);
void onRemoveStream(MediaStream stream);
void onAddTrack(MediaStreamTrack track, sequence<MediaStream> streams);
void onRemoveTrack(MediaStreamTrack track);
void onTrack(DOMString webrtcTrackId, sequence<DOMString> streamIds);
/* Transceiver management; called when setRemoteDescription causes a
transceiver to be created on the C++ side */
void onTransceiverNeeded(DOMString kind, TransceiverImpl transceiverImpl);
/* DTMF callback */
void onDTMFToneChange(DOMString trackId, DOMString tone);
void onDTMFToneChange(MediaStreamTrack track, DOMString tone);
/* Packet dump callback */
void onPacket(unsigned long level, mozPacketDumpType type, boolean sending,
ArrayBuffer packet);
/* Transceiver sync */
void syncTransceivers();
};

Просмотреть файл

@ -128,8 +128,12 @@ interface RTCPeerConnection : EventTarget {
MediaStream... moreStreams);
void removeTrack(RTCRtpSender sender);
RTCRtpTransceiver addTransceiver((MediaStreamTrack or DOMString) trackOrKind,
optional RTCRtpTransceiverInit init);
sequence<RTCRtpSender> getSenders();
sequence<RTCRtpReceiver> getReceivers();
sequence<RTCRtpTransceiver> getTransceivers();
[ChromeOnly]
void mozAddRIDExtension(RTCRtpReceiver receiver, unsigned short extensionId);

Просмотреть файл

@ -69,11 +69,20 @@ dictionary RTCRtpParameters {
[Pref="media.peerconnection.enabled",
JSImplementation="@mozilla.org/dom/rtpsender;1"]
interface RTCRtpSender {
readonly attribute MediaStreamTrack track;
readonly attribute MediaStreamTrack? track;
Promise<void> setParameters (optional RTCRtpParameters parameters);
RTCRtpParameters getParameters();
Promise<void> replaceTrack(MediaStreamTrack track);
Promise<void> replaceTrack(MediaStreamTrack? withTrack);
Promise<RTCStatsReport> getStats();
[Pref="media.peerconnection.dtmf.enabled"]
readonly attribute RTCDTMFSender? dtmf;
// Ugh, can't use a ChromeOnly attibute sequence<MediaStream>...
[ChromeOnly]
sequence<MediaStream> getStreams();
[ChromeOnly]
void setStreams(sequence<MediaStream> streams);
[ChromeOnly]
void setTrack(MediaStreamTrack? track);
[ChromeOnly]
void checkWasCreatedByPc(RTCPeerConnection pc);
};

Просмотреть файл

@ -0,0 +1,78 @@
/* -*- 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 http://mozilla.org/MPL/2.0/.
*
* The origin of this IDL file is
* http://w3c.github.io/webrtc-pc/#rtcrtptransceiver-interface
*/
enum RTCRtpTransceiverDirection {
"sendrecv",
"sendonly",
"recvonly",
"inactive"
};
dictionary RTCRtpTransceiverInit {
RTCRtpTransceiverDirection direction = "sendrecv";
sequence<MediaStream> streams = [];
// TODO: bug 1396918
// sequence<RTCRtpEncodingParameters> sendEncodings;
};
[Pref="media.peerconnection.enabled",
JSImplementation="@mozilla.org/dom/rtptransceiver;1"]
interface RTCRtpTransceiver {
readonly attribute DOMString? mid;
[SameObject]
readonly attribute RTCRtpSender sender;
[SameObject]
readonly attribute RTCRtpReceiver receiver;
readonly attribute boolean stopped;
attribute RTCRtpTransceiverDirection direction;
readonly attribute RTCRtpTransceiverDirection? currentDirection;
void stop();
// TODO: bug 1396922
// void setCodecPreferences(sequence<RTCRtpCodecCapability> codecs);
[ChromeOnly]
void setRemoteTrackId(DOMString trackId);
[ChromeOnly]
boolean remoteTrackIdIs(DOMString trackId);
// Mostly for testing
[Pref="media.peerconnection.remoteTrackId.enabled"]
DOMString getRemoteTrackId();
[ChromeOnly]
void setAddTrackMagic();
[ChromeOnly]
readonly attribute boolean addTrackMagic;
[ChromeOnly]
void setCurrentDirection(RTCRtpTransceiverDirection direction);
[ChromeOnly]
void setDirectionInternal(RTCRtpTransceiverDirection direction);
[ChromeOnly]
void setMid(DOMString mid);
[ChromeOnly]
void unsetMid();
[ChromeOnly]
void setStopped();
[ChromeOnly]
void remove();
[ChromeOnly]
DOMString getKind();
[ChromeOnly]
boolean hasBeenUsedToSend();
[ChromeOnly]
void sync();
[ChromeOnly]
void insertDTMF(DOMString tones,
optional unsigned long duration = 100,
optional unsigned long interToneGap = 70);
};

Просмотреть файл

@ -11,6 +11,7 @@ dictionary RTCTrackEventInit : EventInit {
required RTCRtpReceiver receiver;
required MediaStreamTrack track;
sequence<MediaStream> streams = [];
required RTCRtpTransceiver transceiver;
};
[Pref="media.peerconnection.enabled",
@ -24,4 +25,5 @@ interface RTCTrackEvent : Event {
[Frozen, Cached, Pure]
readonly attribute sequence<MediaStream> streams; // workaround
readonly attribute RTCRtpTransceiver transceiver;
};

Просмотреть файл

@ -0,0 +1,23 @@
/* -*- 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 http://mozilla.org/MPL/2.0/.
*
* PeerConnection.js' interface to the C++ TransceiverImpl.
*
* Do not confuse with RTCRtpTransceiver. This interface is purely for
* communication between the PeerConnection JS DOM binding and the C++
* implementation.
*
* See media/webrtc/signaling/src/peerconnection/TransceiverImpl.h
*
*/
// Constructed by PeerConnectionImpl::CreateTransceiverImpl.
[ChromeOnly]
interface TransceiverImpl {
MediaStreamTrack getReceiveTrack();
[Throws]
void syncWithJS(RTCRtpTransceiver transceiver);
};

Просмотреть файл

@ -202,9 +202,6 @@ with Files("MediaKey*"):
with Files("Media*List*"):
BUG_COMPONENT = ("Core", "CSS Parsing and Computation")
with Files("MediaStreamList.webidl"):
BUG_COMPONENT = ("Core", "Web Audio")
with Files("*Record*"):
BUG_COMPONENT = ("Core", "Audio/Video: Recording")
@ -985,7 +982,6 @@ WEBIDL_FILES = [
if CONFIG['MOZ_WEBRTC']:
WEBIDL_FILES += [
'DataChannel.webidl',
'MediaStreamList.webidl',
'PeerConnectionImpl.webidl',
'PeerConnectionImplEnums.webidl',
'PeerConnectionObserver.webidl',
@ -1000,7 +996,9 @@ if CONFIG['MOZ_WEBRTC']:
'RTCPeerConnectionStatic.webidl',
'RTCRtpReceiver.webidl',
'RTCRtpSender.webidl',
'RTCRtpTransceiver.webidl',
'RTCSessionDescription.webidl',
'TransceiverImpl.webidl',
'WebrtcDeprecated.webidl',
'WebrtcGlobalInformation.webidl',
]