Bug 1453030 - Only create RTCDTMFSender on audio RTCRtpSender senders; r=bwc draft
authorDan Minor <dminor@mozilla.com>
Tue, 10 Apr 2018 13:19:42 -0400
changeset 780623 2bee2f713ef65ef5baaa6cd37a3f9521beaa9a73
parent 779826 50b945170f334bb5c7c3dad5a8e975251a369b3b
child 780624 fd5cbfc8eb607c274875df60f484a66e126db081
push id106045
push userbmo:dminor@mozilla.com
push dateWed, 11 Apr 2018 16:57:15 +0000
reviewersbwc
bugs1453030
milestone61.0a1
Bug 1453030 - Only create RTCDTMFSender on audio RTCRtpSender senders; r=bwc MozReview-Commit-ID: KsnUYCs8IYU
dom/media/PeerConnection.js
media/webrtc/signaling/src/peerconnection/TransceiverImpl.cpp
--- a/dom/media/PeerConnection.js
+++ b/dom/media/PeerConnection.js
@@ -1910,19 +1910,21 @@ class RTCDTMFSender {
 }
 setupPrototype(RTCDTMFSender, {
   classID: PC_DTMF_SENDER_CID,
   contractID: PC_DTMF_SENDER_CONTRACT,
   QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports])
 });
 
 class RTCRtpSender {
-  constructor(pc, transceiverImpl, transceiver, track, streams) {
-    let dtmf = pc._win.RTCDTMFSender._create(
-        pc._win, new RTCDTMFSender(this));
+  constructor(pc, transceiverImpl, transceiver, track, kind, streams) {
+    let dtmf = null;
+    if (kind == "audio") {
+      dtmf = pc._win.RTCDTMFSender._create(pc._win, new RTCDTMFSender(this));
+    }
 
     Object.assign(this, {
       _pc: pc,
       _transceiverImpl: transceiverImpl,
       _transceiver: transceiver,
       track,
       _streams: streams,
       dtmf });
@@ -2220,17 +2222,17 @@ setupPrototype(RTCRtpReceiver, {
 });
 
 class RTCRtpTransceiver {
   constructor(pc, transceiverImpl, init, kind, sendTrack) {
     let receiver = pc._win.RTCRtpReceiver._create(
         pc._win, new RTCRtpReceiver(pc, transceiverImpl, kind));
     let streams = (init && init.streams) || [];
     let sender = pc._win.RTCRtpSender._create(
-        pc._win, new RTCRtpSender(pc, transceiverImpl, this, sendTrack, streams));
+        pc._win, new RTCRtpSender(pc, transceiverImpl, this, sendTrack, kind, streams));
 
     let direction = (init && init.direction) || "sendrecv";
     Object.assign(this,
         {
           _pc: pc,
           mid: null,
           sender,
           receiver,
--- a/media/webrtc/signaling/src/peerconnection/TransceiverImpl.cpp
+++ b/media/webrtc/signaling/src/peerconnection/TransceiverImpl.cpp
@@ -567,16 +567,18 @@ TransceiverImpl::SyncWithJS(dom::RTCRtpT
 
 void
 TransceiverImpl::InsertDTMFTone(int tone, uint32_t duration)
 {
   if (mJsepTransceiver->IsStopped()) {
     return;
   }
 
+  MOZ_ASSERT(mConduit->type() == MediaSessionConduit::AUDIO);
+
   RefPtr<AudioSessionConduit> conduit(static_cast<AudioSessionConduit*>(
         mConduit.get()));
   mStsThread->Dispatch(WrapRunnableNM([conduit, tone, duration] () {
         //Note: We default to channel 0, not inband, and 6dB attenuation.
         //      here. We might want to revisit these choices in the future.
         conduit->InsertDTMFTone(0, tone, true, duration, 6);
         }), NS_DISPATCH_NORMAL);
 }