Move DTMF sender to RtpSender (as opposed to WebRtcSession).

Previously in the spec, there was a createDtmfSender method on
PeerConnection, but that's been replaced by a "dtmf" attribute
on RtpSender, which allows getting a DTMF sender without having
an audio track.

This also simplifies the code slightly, since tracks are now not
necessary for identification.

BUG=webrtc:4180

Review-Url: https://codereview.webrtc.org/2666853002
Cr-Commit-Position: refs/heads/master@{#16409}
diff --git a/webrtc/pc/rtpsender.h b/webrtc/pc/rtpsender.h
index ed244b4..0322399 100644
--- a/webrtc/pc/rtpsender.h
+++ b/webrtc/pc/rtpsender.h
@@ -24,6 +24,7 @@
 #include "webrtc/base/criticalsection.h"
 #include "webrtc/media/base/audiosource.h"
 #include "webrtc/pc/channel.h"
+#include "webrtc/pc/dtmfsender.h"
 #include "webrtc/pc/statscollector.h"
 
 namespace webrtc {
@@ -68,7 +69,8 @@
   rtc::CriticalSection lock_;
 };
 
-class AudioRtpSender : public ObserverInterface,
+class AudioRtpSender : public DtmfProviderInterface,
+                       public ObserverInterface,
                        public rtc::RefCountedObject<RtpSenderInternal> {
  public:
   // StatsCollector provided so that Add/RemoveLocalAudioTrack can be called
@@ -91,10 +93,15 @@
 
   virtual ~AudioRtpSender();
 
-  // ObserverInterface implementation
+  // DtmfSenderProvider implementation.
+  bool CanInsertDtmf() override;
+  bool InsertDtmf(int code, int duration) override;
+  sigslot::signal0<>* GetOnDestroyedSignal() override;
+
+  // ObserverInterface implementation.
   void OnChanged() override;
 
-  // RtpSenderInterface implementation
+  // RtpSenderInterface implementation.
   bool SetTrack(MediaStreamTrackInterface* track) override;
   rtc::scoped_refptr<MediaStreamTrackInterface> track() const override {
     return track_;
@@ -116,6 +123,8 @@
   RtpParameters GetParameters() const override;
   bool SetParameters(const RtpParameters& parameters) override;
 
+  rtc::scoped_refptr<DtmfSenderInterface> GetDtmfSender() const override;
+
   // RtpSenderInternal implementation.
   void SetSsrc(uint32_t ssrc) override;
 
@@ -140,11 +149,16 @@
   // Helper function to call SetAudioSend with "stop sending" parameters.
   void ClearAudioSend();
 
+  void CreateDtmfSender();
+
+  sigslot::signal0<> SignalDestroyed;
+
   std::string id_;
   std::string stream_id_;
   cricket::VoiceChannel* channel_ = nullptr;
   StatsCollector* stats_;
   rtc::scoped_refptr<AudioTrackInterface> track_;
+  rtc::scoped_refptr<DtmfSenderInterface> dtmf_sender_proxy_;
   uint32_t ssrc_ = 0;
   bool cached_track_enabled_ = false;
   bool stopped_ = false;
@@ -197,6 +211,8 @@
   RtpParameters GetParameters() const override;
   bool SetParameters(const RtpParameters& parameters) override;
 
+  rtc::scoped_refptr<DtmfSenderInterface> GetDtmfSender() const override;
+
   // RtpSenderInternal implementation.
   void SetSsrc(uint32_t ssrc) override;