Use AsyncInvoker in DtmfSender instead of MessageHandler

Bug: webrtc:9702
Change-Id: Ib9a9a2cf5bbb7aff24e6690deca51a021961ead3
Reviewed-on: https://webrtc-review.googlesource.com/97182
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Seth Hampson <shampson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24518}
diff --git a/pc/dtmfsender.h b/pc/dtmfsender.h
index 7b45a1f..59ab549 100644
--- a/pc/dtmfsender.h
+++ b/pc/dtmfsender.h
@@ -15,14 +15,14 @@
 
 #include "api/dtmfsenderinterface.h"
 #include "api/proxy.h"
+#include "rtc_base/asyncinvoker.h"
 #include "rtc_base/constructormagic.h"
-#include "rtc_base/messagehandler.h"
 #include "rtc_base/refcount.h"
 #include "rtc_base/thread.h"
 
 // DtmfSender is the native implementation of the RTCDTMFSender defined by
 // the WebRTC W3C Editor's Draft.
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html
+// https://w3c.github.io/webrtc-pc/#rtcdtmfsender
 
 namespace webrtc {
 
@@ -45,9 +45,7 @@
   virtual ~DtmfProviderInterface() {}
 };
 
-class DtmfSender : public DtmfSenderInterface,
-                   public sigslot::has_slots<>,
-                   public rtc::MessageHandler {
+class DtmfSender : public DtmfSenderInterface, public sigslot::has_slots<> {
  public:
   static rtc::scoped_refptr<DtmfSender> Create(rtc::Thread* signaling_thread,
                                                DtmfProviderInterface* provider);
@@ -70,8 +68,7 @@
  private:
   DtmfSender();
 
-  // Implements MessageHandler.
-  void OnMessage(rtc::Message* msg) override;
+  void QueueInsertDtmf(const rtc::Location& posted_from, uint32_t delay_ms);
 
   // The DTMF sending task.
   void DoInsertDtmf();
@@ -86,6 +83,9 @@
   std::string tones_;
   int duration_;
   int inter_tone_gap_;
+  // Invoker for running delayed tasks which feed the DTMF provider one tone at
+  // a time.
+  rtc::AsyncInvoker dtmf_driver_;
 
   RTC_DISALLOW_COPY_AND_ASSIGN(DtmfSender);
 };