Rewrite test::DirectTransport to work with any TaskQueue implementation

Bug: webrtc:10933
Change-Id: Ib207a5dac57e0200f1298097edb52689c4748d07
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/154568
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29331}
diff --git a/test/BUILD.gn b/test/BUILD.gn
index 8c1d25f..f2632d3 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -602,11 +602,14 @@
     ":rtp_test_utils",
     "../api:simulated_network_api",
     "../api:transport_api",
+    "../api/task_queue",
+    "../api/units:time_delta",
     "../call:call_interfaces",
     "../call:simulated_packet_receiver",
     "../modules/rtp_rtcp",
     "../rtc_base:rtc_base_approved",
     "../rtc_base/synchronization:sequence_checker",
+    "../rtc_base/task_utils:repeating_task",
     "../system_wrappers",
     "//third_party/abseil-cpp/absl/memory",
   ]
diff --git a/test/direct_transport.cc b/test/direct_transport.cc
index 13d1bd2..0d626de 100644
--- a/test/direct_transport.cc
+++ b/test/direct_transport.cc
@@ -10,8 +10,11 @@
 #include "test/direct_transport.h"
 
 #include "absl/memory/memory.h"
+#include "api/task_queue/task_queue_base.h"
+#include "api/units/time_delta.h"
 #include "call/call.h"
 #include "call/fake_network_pipe.h"
+#include "rtc_base/task_utils/repeating_task.h"
 #include "rtc_base/time_utils.h"
 #include "test/rtp_header_parser.h"
 #include "test/single_threaded_task_queue.h"
@@ -37,7 +40,7 @@
 }
 
 DirectTransport::DirectTransport(
-    DEPRECATED_SingleThreadedTaskQueueForTesting* task_queue,
+    TaskQueueBase* task_queue,
     std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
     Call* send_call,
     const std::map<uint8_t, MediaType>& payload_type_map)
@@ -49,14 +52,7 @@
 }
 
 DirectTransport::~DirectTransport() {
-  if (next_process_task_)
-    task_queue_->CancelTask(*next_process_task_);
-}
-
-void DirectTransport::StopSending() {
-  rtc::CritScope cs(&process_lock_);
-  if (next_process_task_)
-    task_queue_->CancelTask(*next_process_task_);
+  next_process_task_.Stop();
 }
 
 void DirectTransport::SetReceiver(PacketReceiver* receiver) {
@@ -90,7 +86,7 @@
   fake_network_->DeliverPacket(media_type, rtc::CopyOnWriteBuffer(data, length),
                                send_time_us);
   rtc::CritScope cs(&process_lock_);
-  if (!next_process_task_)
+  if (!next_process_task_.Running())
     ProcessPackets();
 }
 
@@ -107,17 +103,22 @@
 }
 
 void DirectTransport::ProcessPackets() {
-  next_process_task_.reset();
-  auto delay_ms = fake_network_->TimeUntilNextProcess();
-  if (delay_ms) {
-    next_process_task_ = task_queue_->PostDelayedTask(
-        [this]() {
-          fake_network_->Process();
-          rtc::CritScope cs(&process_lock_);
-          ProcessPackets();
-        },
-        *delay_ms);
-  }
+  absl::optional<int64_t> initial_delay_ms =
+      fake_network_->TimeUntilNextProcess();
+  if (initial_delay_ms == absl::nullopt)
+    return;
+
+  next_process_task_ = RepeatingTaskHandle::DelayedStart(
+      task_queue_, TimeDelta::ms(*initial_delay_ms), [this] {
+        fake_network_->Process();
+        if (auto delay_ms = fake_network_->TimeUntilNextProcess())
+          return TimeDelta::ms(*delay_ms);
+        // Otherwise stop the task.
+        rtc::CritScope cs(&process_lock_);
+        next_process_task_.Stop();
+        // Since this task is stopped, return value doesn't matter.
+        return TimeDelta::Zero();
+      });
 }
 }  // namespace test
 }  // namespace webrtc
diff --git a/test/direct_transport.h b/test/direct_transport.h
index a73a335..e011664 100644
--- a/test/direct_transport.h
+++ b/test/direct_transport.h
@@ -13,10 +13,12 @@
 #include <memory>
 
 #include "api/call/transport.h"
+#include "api/task_queue/task_queue_base.h"
 #include "api/test/simulated_network.h"
 #include "call/call.h"
 #include "call/simulated_packet_receiver.h"
 #include "rtc_base/synchronization/sequence_checker.h"
+#include "rtc_base/task_utils/repeating_task.h"
 #include "rtc_base/thread_annotations.h"
 #include "test/single_threaded_task_queue.h"
 
@@ -39,15 +41,13 @@
 // same task-queue - the one that's passed in via the constructor.
 class DirectTransport : public Transport {
  public:
-  DirectTransport(DEPRECATED_SingleThreadedTaskQueueForTesting* task_queue,
+  DirectTransport(TaskQueueBase* task_queue,
                   std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
                   Call* send_call,
                   const std::map<uint8_t, MediaType>& payload_type_map);
 
   ~DirectTransport() override;
 
-  RTC_DEPRECATED void StopSending();
-
   // TODO(holmer): Look into moving this to the constructor.
   virtual void SetReceiver(PacketReceiver* receiver);
 
@@ -65,11 +65,10 @@
 
   Call* const send_call_;
 
-  DEPRECATED_SingleThreadedTaskQueueForTesting* const task_queue_;
+  TaskQueueBase* const task_queue_;
 
   rtc::CriticalSection process_lock_;
-  absl::optional<DEPRECATED_SingleThreadedTaskQueueForTesting::TaskId>
-      next_process_task_ RTC_GUARDED_BY(&process_lock_);
+  RepeatingTaskHandle next_process_task_ RTC_GUARDED_BY(&process_lock_);
 
   const Demuxer demuxer_;
   const std::unique_ptr<SimulatedPacketReceiverInterface> fake_network_;