Replace Invoke in tests with SendTask test helper

Bug: webrtc:11318
Change-Id: I14e3fbc694d41c785a61c88d8207005c681576c4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/271540
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37774}
diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn
index afba43f..fba4538 100644
--- a/modules/desktop_capture/BUILD.gn
+++ b/modules/desktop_capture/BUILD.gn
@@ -134,6 +134,7 @@
       # TODO(bugs.webrtc.org/9987): Remove this dep on rtc_base:rtc_base once
       # rtc_base:threading is fully defined.
       "../../rtc_base:rtc_base",
+      "../../rtc_base:task_queue_for_test",
       "../../rtc_base:threading",
       "../../system_wrappers",
       "../../test:test_support",
diff --git a/modules/desktop_capture/win/wgc_capturer_win_unittest.cc b/modules/desktop_capture/win/wgc_capturer_win_unittest.cc
index 9339526..a7b656f 100644
--- a/modules/desktop_capture/win/wgc_capturer_win_unittest.cc
+++ b/modules/desktop_capture/win/wgc_capturer_win_unittest.cc
@@ -22,6 +22,7 @@
 #include "modules/desktop_capture/win/window_capture_utils.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/time_utils.h"
 #include "rtc_base/win/scoped_com_initializer.h"
@@ -128,8 +129,7 @@
     window_thread_ = rtc::Thread::Create();
     window_thread_->SetName(kWindowThreadName, nullptr);
     window_thread_->Start();
-    window_thread_->Invoke<void>(RTC_FROM_HERE, [this, window_width,
-                                                 window_height]() {
+    SendTask(window_thread_.get(), [this, window_width, window_height]() {
       window_thread_id_ = GetCurrentThreadId();
       window_info_ =
           CreateTestWindow(kWindowTitle, window_height, window_width);
diff --git a/modules/desktop_capture/win/window_capture_utils_unittest.cc b/modules/desktop_capture/win/window_capture_utils_unittest.cc
index 913b920..137440b 100644
--- a/modules/desktop_capture/win/window_capture_utils_unittest.cc
+++ b/modules/desktop_capture/win/window_capture_utils_unittest.cc
@@ -18,6 +18,7 @@
 
 #include "modules/desktop_capture/desktop_capturer.h"
 #include "modules/desktop_capture/win/test_support/test_window.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/thread.h"
 #include "test/gtest.h"
 
@@ -34,8 +35,7 @@
   window_thread->SetName(kWindowThreadName, nullptr);
   window_thread->Start();
 
-  window_thread->Invoke<void>(
-      RTC_FROM_HERE, [&info]() { info = CreateTestWindow(kWindowTitle); });
+  SendTask(window_thread.get(), [&] { info = CreateTestWindow(kWindowTitle); });
 
   // Intentionally create a deadlock to cause the window to become unresponsive.
   mtx.lock();
@@ -82,8 +82,7 @@
             window_list.end());
 
   mtx.unlock();
-  window_thread->Invoke<void>(RTC_FROM_HERE,
-                              [&info]() { DestroyTestWindow(info); });
+  SendTask(window_thread.get(), [&info]() { DestroyTestWindow(info); });
   window_thread->Stop();
 }
 
@@ -106,8 +105,7 @@
             window_list.end());
 
   mtx.unlock();
-  window_thread->Invoke<void>(RTC_FROM_HERE,
-                              [&info]() { DestroyTestWindow(info); });
+  SendTask(window_thread.get(), [&info]() { DestroyTestWindow(info); });
   window_thread->Stop();
 }
 
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index 60fe37d..30a82e6 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -167,8 +167,8 @@
       "../api:libjingle_peerconnection_api",
       "../api/task_queue:pending_task_safety_flag",
       "../api/units:time_delta",
-      "../rtc_base",
       "../rtc_base:copy_on_write_buffer",
+      "../rtc_base:task_queue_for_test",
     ]
     absl_deps = [
       "//third_party/abseil-cpp/absl/algorithm:container",
@@ -183,8 +183,8 @@
     sources = [ "base/fake_port_allocator.h" ]
     deps = [
       ":rtc_p2p",
-      "../rtc_base",
       "../rtc_base:net_helpers",
+      "../rtc_base:task_queue_for_test",
       "../rtc_base:threading",
       "../rtc_base/memory:always_valid_pointer",
       "../test:scoped_key_value_config",
diff --git a/p2p/base/fake_ice_transport.h b/p2p/base/fake_ice_transport.h
index 31db829..ae7bf89 100644
--- a/p2p/base/fake_ice_transport.h
+++ b/p2p/base/fake_ice_transport.h
@@ -24,6 +24,7 @@
 #include "api/units/time_delta.h"
 #include "p2p/base/ice_transport_internal.h"
 #include "rtc_base/copy_on_write_buffer.h"
+#include "rtc_base/task_queue_for_test.h"
 
 namespace cricket {
 using ::webrtc::SafeTask;
@@ -357,7 +358,7 @@
   void SetNetworkRoute(absl::optional<rtc::NetworkRoute> network_route) {
     RTC_DCHECK_RUN_ON(network_thread_);
     network_route_ = network_route;
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
+    SendTask(network_thread_, [this] {
       RTC_DCHECK_RUN_ON(network_thread_);
       SignalNetworkRouteChanged(network_route_);
     });
diff --git a/p2p/base/fake_port_allocator.h b/p2p/base/fake_port_allocator.h
index e92825e..174d630 100644
--- a/p2p/base/fake_port_allocator.h
+++ b/p2p/base/fake_port_allocator.h
@@ -22,6 +22,7 @@
 #include "p2p/base/udp_port.h"
 #include "rtc_base/memory/always_valid_pointer.h"
 #include "rtc_base/net_helpers.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/thread.h"
 #include "test/scoped_key_value_config.h"
 
@@ -256,7 +257,7 @@
       Initialize();
       return;
     }
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this] { Initialize(); });
+    SendTask(network_thread_, [this] { Initialize(); });
   }
 
   webrtc::test::ScopedKeyValueConfig field_trials_;
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 684f3ac..2b41243 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -2114,12 +2114,12 @@
       "../rtc_base:checks",
       "../rtc_base:copy_on_write_buffer",
       "../rtc_base:gunit_helpers",
-      "../rtc_base:location",
       "../rtc_base:logging",
       "../rtc_base:macromagic",
       "../rtc_base:rtc_base_tests_utils",
       "../rtc_base:socket_address",
       "../rtc_base:stringutils",
+      "../rtc_base:task_queue_for_test",
       "../rtc_base:threading",
       "../rtc_base/containers:flat_set",
       "../rtc_base/third_party/sigslot",
@@ -2182,10 +2182,10 @@
       "../rtc_base",
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
-      "../rtc_base:location",
       "../rtc_base:rtc_base_tests_utils",
       "../rtc_base:socket_address",
       "../rtc_base:socket_factory",
+      "../rtc_base:task_queue_for_test",
       "../rtc_base:threading",
       "../system_wrappers",
       "../test:perf_test",
@@ -2399,7 +2399,6 @@
       "../rtc_base:event_tracer",
       "../rtc_base:gunit_helpers",
       "../rtc_base:ip_address",
-      "../rtc_base:location",
       "../rtc_base:logging",
       "../rtc_base:macromagic",
       "../rtc_base:network_constants",
@@ -2408,6 +2407,7 @@
       "../rtc_base:rtc_json",
       "../rtc_base:socket_address",
       "../rtc_base:stringutils",
+      "../rtc_base:task_queue_for_test",
       "../rtc_base:threading",
       "../rtc_base:timeutils",
       "../rtc_base/synchronization:mutex",
@@ -2591,7 +2591,6 @@
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
       "../rtc_base:ip_address",
-      "../rtc_base:location",
       "../rtc_base:logging",
       "../rtc_base:macromagic",
       "../rtc_base:rtc_base_tests_utils",
@@ -2599,6 +2598,7 @@
       "../rtc_base:rtc_json",
       "../rtc_base:safe_conversions",
       "../rtc_base:socket_address",
+      "../rtc_base:task_queue_for_test",
       "../rtc_base:threading",
       "../rtc_base:timeutils",
       "../rtc_base/synchronization:mutex",
diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc
index 40beff8..2dd5d09 100644
--- a/pc/channel_unittest.cc
+++ b/pc/channel_unittest.cc
@@ -41,9 +41,9 @@
 #include "rtc_base/buffer.h"
 #include "rtc_base/byte_order.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/location.h"
 #include "rtc_base/rtc_certificate.h"
 #include "rtc_base/ssl_identity.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/scoped_key_value_config.h"
@@ -134,7 +134,7 @@
 
   ~ChannelTest() {
     if (network_thread_) {
-      network_thread_->Invoke<void>(RTC_FROM_HERE, [this]() {
+      SendTask(network_thread_, [this]() {
         network_thread_safety_->SetNotAlive();
         DeinitChannels();
       });
@@ -285,7 +285,7 @@
   void DeinitChannels() {
     if (!channel1_ && !channel2_)
       return;
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this]() {
+    SendTask(network_thread_, [this]() {
       if (channel1_) {
         RTC_DCHECK_RUN_ON(channel1_->network_thread());
         channel1_->SetRtpTransport(nullptr);
@@ -303,14 +303,13 @@
     auto rtp_transport = std::make_unique<webrtc::RtpTransport>(
         rtcp_packet_transport == nullptr);
 
-    network_thread_->Invoke<void>(
-        RTC_FROM_HERE,
-        [&rtp_transport, rtp_packet_transport, rtcp_packet_transport] {
-          rtp_transport->SetRtpPacketTransport(rtp_packet_transport);
-          if (rtcp_packet_transport) {
-            rtp_transport->SetRtcpPacketTransport(rtcp_packet_transport);
-          }
-        });
+    SendTask(network_thread_,
+             [&rtp_transport, rtp_packet_transport, rtcp_packet_transport] {
+               rtp_transport->SetRtpPacketTransport(rtp_packet_transport);
+               if (rtcp_packet_transport) {
+                 rtp_transport->SetRtcpPacketTransport(rtcp_packet_transport);
+               }
+             });
     return rtp_transport;
   }
 
@@ -320,17 +319,16 @@
     auto dtls_srtp_transport = std::make_unique<webrtc::DtlsSrtpTransport>(
         rtcp_dtls_transport == nullptr, field_trials_);
 
-    network_thread_->Invoke<void>(
-        RTC_FROM_HERE,
-        [&dtls_srtp_transport, rtp_dtls_transport, rtcp_dtls_transport] {
-          dtls_srtp_transport->SetDtlsTransports(rtp_dtls_transport,
-                                                 rtcp_dtls_transport);
-        });
+    SendTask(network_thread_,
+             [&dtls_srtp_transport, rtp_dtls_transport, rtcp_dtls_transport] {
+               dtls_srtp_transport->SetDtlsTransports(rtp_dtls_transport,
+                                                      rtcp_dtls_transport);
+             });
     return dtls_srtp_transport;
   }
 
   void ConnectFakeTransports() {
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
+    SendTask(network_thread_, [this] {
       bool asymmetric = false;
       // Depending on test flags, could be using DTLS or raw packet transport.
       if (fake_rtp_dtls_transport1_ && fake_rtp_dtls_transport2_) {
@@ -536,18 +534,21 @@
   // network thread, which callers need to factor in.
   bool IsSrtpActive(std::unique_ptr<typename T::Channel>& channel) {
     RTC_DCHECK(channel.get());
-    return network_thread_->Invoke<bool>(
-        RTC_FROM_HERE, [&] { return channel->srtp_active(); });
+    bool result;
+    SendTask(network_thread_, [&] { result = channel->srtp_active(); });
+    return result;
   }
 
   // Returns true iff the transport is set for a channel and rtcp_mux_enabled()
   // returns true.
   bool IsRtcpMuxEnabled(std::unique_ptr<typename T::Channel>& channel) {
     RTC_DCHECK(channel.get());
-    return network_thread_->Invoke<bool>(RTC_FROM_HERE, [&] {
-      return channel->rtp_transport() &&
-             channel->rtp_transport()->rtcp_mux_enabled();
+    bool result;
+    SendTask(network_thread_, [&] {
+      result = channel->rtp_transport() &&
+               channel->rtp_transport()->rtcp_mux_enabled();
     });
+    return result;
   }
 
   // Tests that can be used by derived classes.
@@ -863,7 +864,7 @@
     // when creating the channel.
     WaitForThreads();
     media_channel1->set_num_network_route_changes(0);
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
+    SendTask(network_thread_, [this] {
       rtc::NetworkRoute network_route;
       // The transport channel becomes disconnected.
       fake_rtp_dtls_transport1_->ice_transport()->SignalNetworkRouteChanged(
@@ -874,7 +875,7 @@
     EXPECT_FALSE(media_channel1->last_network_route().connected);
     media_channel1->set_num_network_route_changes(0);
 
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
+    SendTask(network_thread_, [this] {
       rtc::NetworkRoute network_route;
       network_route.connected = true;
       network_route.local =
@@ -1034,9 +1035,8 @@
     EXPECT_TRUE(CheckNoRtp2());
 
     // Lose writability, which should fail.
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
-      fake_rtp_dtls_transport1_->SetWritable(false);
-    });
+    SendTask(network_thread_,
+             [this] { fake_rtp_dtls_transport1_->SetWritable(false); });
     SendRtp1();
     SendRtp2();
     WaitForThreads();
@@ -1044,9 +1044,8 @@
     EXPECT_TRUE(CheckNoRtp2());
 
     // Regain writability
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
-      fake_rtp_dtls_transport1_->SetWritable(true);
-    });
+    SendTask(network_thread_,
+             [this] { fake_rtp_dtls_transport1_->SetWritable(true); });
     EXPECT_TRUE(media_channel1()->sending());
     SendRtp1();
     SendRtp2();
@@ -1057,7 +1056,7 @@
     EXPECT_TRUE(CheckNoRtp2());
 
     // Lose writability completely
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
+    SendTask(network_thread_, [this] {
       bool asymmetric = true;
       fake_rtp_dtls_transport1_->SetDestination(nullptr, asymmetric);
     });
@@ -1072,7 +1071,7 @@
     EXPECT_TRUE(CheckNoRtp1());
 
     // Gain writability back
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
+    SendTask(network_thread_, [this] {
       bool asymmetric = true;
       fake_rtp_dtls_transport1_->SetDestination(fake_rtp_dtls_transport2_.get(),
                                                 asymmetric);
@@ -1303,7 +1302,7 @@
 
     bool rcv_success, send_success;
     int rcv_buf, send_buf;
-    network_thread_->Invoke<void>(RTC_FROM_HERE, [&] {
+    SendTask(network_thread_, [&] {
       channel1_->SetOption(cricket::BaseChannel::ST_RTP,
                            rtc::Socket::Option::OPT_SNDBUF, kSndBufSize);
       channel2_->SetOption(cricket::BaseChannel::ST_RTP,
@@ -1386,14 +1385,13 @@
   void WaitForThreads(rtc::ArrayView<rtc::Thread*> threads) {
     // `threads` and current thread post packets to network thread.
     for (rtc::Thread* thread : threads) {
-      thread->Invoke<void>(RTC_FROM_HERE,
-                           [thread] { ProcessThreadQueue(thread); });
+      SendTask(thread, [thread] { ProcessThreadQueue(thread); });
     }
     ProcessThreadQueue(rtc::Thread::Current());
     // Network thread move them around and post back to worker = current thread.
     if (!network_thread_->IsCurrent()) {
-      network_thread_->Invoke<void>(
-          RTC_FROM_HERE, [this] { ProcessThreadQueue(network_thread_); });
+      SendTask(network_thread_,
+               [this] { ProcessThreadQueue(network_thread_); });
     }
     // Worker thread = current Thread process received messages.
     ProcessThreadQueue(rtc::Thread::Current());
@@ -1457,7 +1455,7 @@
       worker_thread, network_thread, signaling_thread, std::move(ch),
       cricket::CN_AUDIO, (flags & DTLS) != 0, webrtc::CryptoOptions(),
       &ssrc_generator_);
-  network_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
+  SendTask(network_thread, [&]() {
     RTC_DCHECK_RUN_ON(channel->network_thread());
     channel->SetRtpTransport(rtp_transport);
   });
@@ -1543,7 +1541,7 @@
       worker_thread, network_thread, signaling_thread, std::move(ch),
       cricket::CN_VIDEO, (flags & DTLS) != 0, webrtc::CryptoOptions(),
       &ssrc_generator_);
-  network_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
+  SendTask(network_thread, [&]() {
     RTC_DCHECK_RUN_ON(channel->network_thread());
     channel->SetRtpTransport(rtp_transport);
   });
diff --git a/pc/jsep_transport_controller_unittest.cc b/pc/jsep_transport_controller_unittest.cc
index ce8d161..c30f381 100644
--- a/pc/jsep_transport_controller_unittest.cc
+++ b/pc/jsep_transport_controller_unittest.cc
@@ -24,12 +24,12 @@
 #include "p2p/base/transport_info.h"
 #include "rtc_base/fake_ssl_identity.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/location.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/net_helper.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/ssl_fingerprint.h"
 #include "rtc_base/ssl_identity.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/thread.h"
 #include "test/gtest.h"
 #include "test/scoped_key_value_config.h"
@@ -104,8 +104,7 @@
     transport_controller_ = std::make_unique<JsepTransportController>(
         network_thread, port_allocator, nullptr /* async_resolver_factory */,
         config);
-    network_thread->Invoke<void>(RTC_FROM_HERE,
-                                 [&] { ConnectTransportControllerSignals(); });
+    SendTask(network_thread, [&] { ConnectTransportControllerSignals(); });
   }
 
   void ConnectTransportControllerSignals() {
@@ -259,7 +258,7 @@
 
   void CreateLocalDescriptionAndCompleteConnectionOnNetworkThread() {
     if (!network_thread_->IsCurrent()) {
-      network_thread_->Invoke<void>(RTC_FROM_HERE, [&] {
+      SendTask(network_thread_.get(), [&] {
         CreateLocalDescriptionAndCompleteConnectionOnNetworkThread();
       });
       return;
@@ -978,8 +977,7 @@
 
   EXPECT_EQ(ice_signaled_on_thread_, network_thread_.get());
 
-  network_thread_->Invoke<void>(RTC_FROM_HERE,
-                                [&] { transport_controller_.reset(); });
+  SendTask(network_thread_.get(), [&] { transport_controller_.reset(); });
 }
 
 // Test that if the TransportController was created with the
diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc
index 638e7ed..ffe64fe 100644
--- a/pc/peer_connection_integrationtest.cc
+++ b/pc/peer_connection_integrationtest.cc
@@ -82,13 +82,13 @@
 #include "rtc_base/firewall_socket_server.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/helpers.h"
-#include "rtc_base/location.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/ssl_certificate.h"
 #include "rtc_base/ssl_fingerprint.h"
 #include "rtc_base/ssl_identity.h"
 #include "rtc_base/ssl_stream_adapter.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/test_certificate_verifier.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/time_utils.h"
@@ -2371,10 +2371,10 @@
       turn_server_2_internal_address, turn_server_2_external_address);
   // Bypass permission check on received packets so media can be sent before
   // the candidate is signaled.
-  network_thread()->Invoke<void>(RTC_FROM_HERE, [turn_server_1] {
+  SendTask(network_thread(), [turn_server_1] {
     turn_server_1->set_enable_permission_checks(false);
   });
-  network_thread()->Invoke<void>(RTC_FROM_HERE, [turn_server_2] {
+  SendTask(network_thread(), [turn_server_2] {
     turn_server_2->set_enable_permission_checks(false);
   });
 
diff --git a/pc/peer_connection_rampup_tests.cc b/pc/peer_connection_rampup_tests.cc
index 3fed5ee..3e39ffc 100644
--- a/pc/peer_connection_rampup_tests.cc
+++ b/pc/peer_connection_rampup_tests.cc
@@ -45,10 +45,10 @@
 #include "rtc_base/firewall_socket_server.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/helpers.h"
-#include "rtc_base/location.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/socket_factory.h"
 #include "rtc_base/ssl_certificate.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/test_certificate_verifier.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/virtual_socket_server.h"
@@ -163,8 +163,7 @@
   }
 
   virtual ~PeerConnectionRampUpTest() {
-    network_thread()->Invoke<void>(RTC_FROM_HERE,
-                                   [this] { turn_servers_.clear(); });
+    SendTask(network_thread(), [this] { turn_servers_.clear(); });
   }
 
   bool CreatePeerConnectionWrappers(const RTCConfiguration& caller_config,
@@ -235,18 +234,17 @@
                         const std::string& common_name = "test turn server") {
     rtc::Thread* thread = network_thread();
     rtc::SocketFactory* factory = firewall_socket_server_.get();
-    std::unique_ptr<cricket::TestTurnServer> turn_server =
-        network_thread_->Invoke<std::unique_ptr<cricket::TestTurnServer>>(
-            RTC_FROM_HERE, [thread, factory, type, common_name] {
-              static const rtc::SocketAddress turn_server_internal_address{
-                  kTurnInternalAddress, kTurnInternalPort};
-              static const rtc::SocketAddress turn_server_external_address{
-                  kTurnExternalAddress, kTurnExternalPort};
-              return std::make_unique<cricket::TestTurnServer>(
-                  thread, factory, turn_server_internal_address,
-                  turn_server_external_address, type,
-                  true /*ignore_bad_certs=*/, common_name);
-            });
+    std::unique_ptr<cricket::TestTurnServer> turn_server;
+    SendTask(network_thread_.get(), [&] {
+      static const rtc::SocketAddress turn_server_internal_address{
+          kTurnInternalAddress, kTurnInternalPort};
+      static const rtc::SocketAddress turn_server_external_address{
+          kTurnExternalAddress, kTurnExternalPort};
+      turn_server = std::make_unique<cricket::TestTurnServer>(
+          thread, factory, turn_server_internal_address,
+          turn_server_external_address, type, true /*ignore_bad_certs=*/,
+          common_name);
+    });
     turn_servers_.push_back(std::move(turn_server));
   }
 
diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc
index 333fde5..d66ee65 100644
--- a/pc/rtp_sender_receiver_unittest.cc
+++ b/pc/rtp_sender_receiver_unittest.cc
@@ -62,7 +62,6 @@
 #include "pc/video_track.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/location.h"
 #include "rtc_base/thread.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
diff --git a/pc/test/integration_test_helpers.h b/pc/test/integration_test_helpers.h
index 82d4bab..7e5cc74 100644
--- a/pc/test/integration_test_helpers.h
+++ b/pc/test/integration_test_helpers.h
@@ -107,13 +107,13 @@
 #include "rtc_base/gunit.h"
 #include "rtc_base/helpers.h"
 #include "rtc_base/ip_address.h"
-#include "rtc_base/location.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/mdns_responder_interface.h"
 #include "rtc_base/numerics/safe_conversions.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/ssl_stream_adapter.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/task_utils/repeating_task.h"
 #include "rtc_base/test_certificate_verifier.h"
 #include "rtc_base/thread.h"
@@ -1429,7 +1429,7 @@
 
     // If turn servers were created for the test they need to be destroyed on
     // the network thread.
-    network_thread()->Invoke<void>(RTC_FROM_HERE, [this] {
+    SendTask(network_thread(), [this] {
       turn_servers_.clear();
       turn_customizers_.clear();
     });
@@ -1641,25 +1641,22 @@
       const std::string& common_name = "test turn server") {
     rtc::Thread* thread = network_thread();
     rtc::SocketFactory* socket_factory = fss_.get();
-    std::unique_ptr<cricket::TestTurnServer> turn_server =
-        network_thread()->Invoke<std::unique_ptr<cricket::TestTurnServer>>(
-            RTC_FROM_HERE, [thread, socket_factory, internal_address,
-                            external_address, type, common_name] {
-              return std::make_unique<cricket::TestTurnServer>(
-                  thread, socket_factory, internal_address, external_address,
-                  type,
-                  /*ignore_bad_certs=*/true, common_name);
-            });
+    std::unique_ptr<cricket::TestTurnServer> turn_server;
+    SendTask(network_thread(), [&] {
+      turn_server = std::make_unique<cricket::TestTurnServer>(
+          thread, socket_factory, internal_address, external_address, type,
+          /*ignore_bad_certs=*/true, common_name);
+    });
     turn_servers_.push_back(std::move(turn_server));
     // Interactions with the turn server should be done on the network thread.
     return turn_servers_.back().get();
   }
 
   cricket::TestTurnCustomizer* CreateTurnCustomizer() {
-    std::unique_ptr<cricket::TestTurnCustomizer> turn_customizer =
-        network_thread()->Invoke<std::unique_ptr<cricket::TestTurnCustomizer>>(
-            RTC_FROM_HERE,
-            [] { return std::make_unique<cricket::TestTurnCustomizer>(); });
+    std::unique_ptr<cricket::TestTurnCustomizer> turn_customizer;
+    SendTask(network_thread(), [&] {
+      turn_customizer = std::make_unique<cricket::TestTurnCustomizer>();
+    });
     turn_customizers_.push_back(std::move(turn_customizer));
     // Interactions with the turn customizer should be done on the network
     // thread.
@@ -1670,16 +1667,10 @@
   // 0.
   void ExpectTurnCustomizerCountersIncremented(
       cricket::TestTurnCustomizer* turn_customizer) {
-    unsigned int allow_channel_data_counter =
-        network_thread()->Invoke<unsigned int>(
-            RTC_FROM_HERE, [turn_customizer] {
-              return turn_customizer->allow_channel_data_cnt_;
-            });
-    EXPECT_GT(allow_channel_data_counter, 0u);
-    unsigned int modify_counter = network_thread()->Invoke<unsigned int>(
-        RTC_FROM_HERE,
-        [turn_customizer] { return turn_customizer->modify_cnt_; });
-    EXPECT_GT(modify_counter, 0u);
+    SendTask(network_thread(), [turn_customizer] {
+      EXPECT_GT(turn_customizer->allow_channel_data_cnt_, 0u);
+      EXPECT_GT(turn_customizer->modify_cnt_, 0u);
+    });
   }
 
   // Once called, SDP blobs and ICE candidates will be automatically signaled
@@ -1758,10 +1749,10 @@
   }
 
   void SetPortAllocatorFlags(uint32_t caller_flags, uint32_t callee_flags) {
-    network_thread()->Invoke<void>(RTC_FROM_HERE, [this, caller_flags] {
+    SendTask(network_thread(), [this, caller_flags] {
       caller()->port_allocator()->set_flags(caller_flags);
     });
-    network_thread()->Invoke<void>(RTC_FROM_HERE, [this, callee_flags] {
+    SendTask(network_thread(), [this, callee_flags] {
       callee()->port_allocator()->set_flags(callee_flags);
     });
   }
diff --git a/pc/video_rtp_receiver_unittest.cc b/pc/video_rtp_receiver_unittest.cc
index 3367c6e..4019879 100644
--- a/pc/video_rtp_receiver_unittest.cc
+++ b/pc/video_rtp_receiver_unittest.cc
@@ -17,7 +17,7 @@
 #include "api/video/recordable_encoded_frame.h"
 #include "api/video/test/mock_recordable_encoded_frame.h"
 #include "media/base/fake_media_engine.h"
-#include "rtc_base/location.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 
@@ -77,8 +77,8 @@
   }
 
   void SetMediaChannel(cricket::MediaChannel* media_channel) {
-    worker_thread_->Invoke<void>(
-        RTC_FROM_HERE, [&]() { receiver_->SetMediaChannel(media_channel); });
+    SendTask(worker_thread_.get(),
+             [&]() { receiver_->SetMediaChannel(media_channel); });
   }
 
   webrtc::VideoTrackSourceInterface* Source() {
@@ -178,7 +178,7 @@
   EXPECT_CALL(sink, OnFrame).Times(2);
   MockRecordableEncodedFrame frame;
   broadcast(frame);
-  worker_thread_->Invoke<void>(RTC_FROM_HERE, [&] { broadcast(frame); });
+  SendTask(worker_thread_.get(), [&] { broadcast(frame); });
 }
 
 TEST_F(VideoRtpReceiverTest, EnablesEncodedOutputOnChannelRestart) {
diff --git a/rtc_base/task_queue_for_test.h b/rtc_base/task_queue_for_test.h
index 260827f..616ec8e 100644
--- a/rtc_base/task_queue_for_test.h
+++ b/rtc_base/task_queue_for_test.h
@@ -26,8 +26,11 @@
 
 inline void SendTask(TaskQueueBase* task_queue,
                      rtc::FunctionView<void()> task) {
-  RTC_CHECK(!task_queue->IsCurrent())
-      << "Called SendTask to a queue from the same queue";
+  if (task_queue->IsCurrent()) {
+    task();
+    return;
+  }
+
   rtc::Event event;
   absl::Cleanup cleanup = [&event] { event.Set(); };
   task_queue->PostTask([task, cleanup = std::move(cleanup)] { task(); });
@@ -53,6 +56,7 @@
   // Wait for the completion of all tasks posted prior to the
   // WaitForPreviouslyPostedTasks() call.
   void WaitForPreviouslyPostedTasks() {
+    RTC_DCHECK(!Get()->IsCurrent());
     // Post an empty task on the queue and wait for it to finish, to ensure
     // that all already posted tasks on the queue get executed.
     SendTask([]() {});
diff --git a/test/network/BUILD.gn b/test/network/BUILD.gn
index 2624bc6..71cf2d7 100644
--- a/test/network/BUILD.gn
+++ b/test/network/BUILD.gn
@@ -102,6 +102,7 @@
     "../../rtc_base:gunit_helpers",
     "../../rtc_base:logging",
     "../../rtc_base:rtc_event",
+    "../../rtc_base:task_queue_for_test",
     "../../rtc_base/synchronization:mutex",
   ]
 }
@@ -131,6 +132,7 @@
       "../../rtc_base:gunit_helpers",
       "../../rtc_base:logging",
       "../../rtc_base:rtc_event",
+      "../../rtc_base:task_queue_for_test",
     ]
   }
 }
diff --git a/test/network/emulated_turn_server.cc b/test/network/emulated_turn_server.cc
index 98267a8..0bc7ec6 100644
--- a/test/network/emulated_turn_server.cc
+++ b/test/network/emulated_turn_server.cc
@@ -15,6 +15,7 @@
 
 #include "api/packet_socket_factory.h"
 #include "rtc_base/strings/string_builder.h"
+#include "rtc_base/task_queue_for_test.h"
 
 namespace {
 
@@ -121,7 +122,7 @@
     : thread_(std::move(thread)), client_(client), peer_(peer) {
   ice_config_.username = "keso";
   ice_config_.password = "keso";
-  thread_->Invoke<void>(RTC_FROM_HERE, [=]() {
+  SendTask(thread_.get(), [=]() {
     RTC_DCHECK_RUN_ON(thread_.get());
     turn_server_ = std::make_unique<cricket::TurnServer>(thread_.get());
     turn_server_->set_realm(kTestRealm);
@@ -142,14 +143,14 @@
 }
 
 void EmulatedTURNServer::Stop() {
-  thread_->Invoke<void>(RTC_FROM_HERE, [=]() {
+  SendTask(thread_.get(), [=]() {
     RTC_DCHECK_RUN_ON(thread_.get());
     sockets_.clear();
   });
 }
 
 EmulatedTURNServer::~EmulatedTURNServer() {
-  thread_->Invoke<void>(RTC_FROM_HERE, [=]() {
+  SendTask(thread_.get(), [=]() {
     RTC_DCHECK_RUN_ON(thread_.get());
     turn_server_.reset(nullptr);
   });
diff --git a/test/network/network_emulation_pc_unittest.cc b/test/network/network_emulation_pc_unittest.cc
index 7662b1c..0519dd8 100644
--- a/test/network/network_emulation_pc_unittest.cc
+++ b/test/network/network_emulation_pc_unittest.cc
@@ -26,6 +26,7 @@
 #include "pc/peer_connection_wrapper.h"
 #include "pc/test/mock_peer_connection_observers.h"
 #include "rtc_base/gunit.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/network/network_emulation.h"
@@ -146,7 +147,7 @@
   std::unique_ptr<MockPeerConnectionObserver> bob_observer =
       std::make_unique<MockPeerConnectionObserver>();
 
-  signaling_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
+  SendTask(signaling_thread.get(), [&]() {
     alice_pcf = CreatePeerConnectionFactory(signaling_thread.get(),
                                             alice_network->network_thread());
     alice_pc = CreatePeerConnection(alice_pcf, alice_observer.get(),
@@ -167,7 +168,7 @@
       std::make_unique<PeerConnectionWrapper>(bob_pcf, bob_pc,
                                               std::move(bob_observer));
 
-  signaling_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
+  SendTask(signaling_thread.get(), [&]() {
     rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
         alice_pcf->CreateAudioSource(cricket::AudioOptions());
     rtc::scoped_refptr<AudioTrackInterface> track =
@@ -256,7 +257,7 @@
   std::unique_ptr<MockPeerConnectionObserver> bob_observer =
       std::make_unique<MockPeerConnectionObserver>();
 
-  signaling_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
+  SendTask(signaling_thread.get(), [&]() {
     alice_pcf = CreatePeerConnectionFactory(signaling_thread.get(),
                                             alice_network->network_thread());
     alice_pc = CreatePeerConnection(
@@ -277,7 +278,7 @@
       std::make_unique<PeerConnectionWrapper>(bob_pcf, bob_pc,
                                               std::move(bob_observer));
 
-  signaling_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
+  SendTask(signaling_thread.get(), [&]() {
     rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
         alice_pcf->CreateAudioSource(cricket::AudioOptions());
     rtc::scoped_refptr<AudioTrackInterface> track =
diff --git a/test/network/network_emulation_unittest.cc b/test/network/network_emulation_unittest.cc
index e985ae1..591cc2c 100644
--- a/test/network/network_emulation_unittest.cc
+++ b/test/network/network_emulation_unittest.cc
@@ -20,6 +20,7 @@
 #include "rtc_base/event.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/synchronization/mutex.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/network/network_emulation_manager.h"
@@ -209,10 +210,10 @@
   for (uint64_t j = 0; j < 2; j++) {
     rtc::Socket* s1 = nullptr;
     rtc::Socket* s2 = nullptr;
-    t1->Invoke<void>(RTC_FROM_HERE, [&] {
+    SendTask(t1, [&] {
       s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
     });
-    t2->Invoke<void>(RTC_FROM_HERE, [&] {
+    SendTask(t2, [&] {
       s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
     });
 
@@ -222,17 +223,17 @@
     rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
     rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
 
-    t1->Invoke<void>(RTC_FROM_HERE, [&] {
+    SendTask(t1, [&] {
       s1->Bind(a1);
       a1 = s1->GetLocalAddress();
     });
-    t2->Invoke<void>(RTC_FROM_HERE, [&] {
+    SendTask(t2, [&] {
       s2->Bind(a2);
       a2 = s2->GetLocalAddress();
     });
 
-    t1->Invoke<void>(RTC_FROM_HERE, [&] { s1->Connect(a2); });
-    t2->Invoke<void>(RTC_FROM_HERE, [&] { s2->Connect(a1); });
+    SendTask(t1, [&] { s1->Connect(a2); });
+    SendTask(t2, [&] { s2->Connect(a1); });
 
     for (uint64_t i = 0; i < 1000; i++) {
       t1->PostTask([&]() { s1->Send(data.data(), data.size()); });
@@ -244,8 +245,8 @@
     EXPECT_EQ(r1.ReceivedCount(), 1000);
     EXPECT_EQ(r2.ReceivedCount(), 1000);
 
-    t1->Invoke<void>(RTC_FROM_HERE, [&] { delete s1; });
-    t2->Invoke<void>(RTC_FROM_HERE, [&] { delete s2; });
+    SendTask(t1, [&] { delete s1; });
+    SendTask(t2, [&] { delete s2; });
   }
 
   const int64_t single_packet_size = data.size() + kOverheadIpv4Udp;
@@ -363,10 +364,10 @@
   for (uint64_t j = 0; j < 2; j++) {
     rtc::Socket* s1 = nullptr;
     rtc::Socket* s2 = nullptr;
-    t1->Invoke<void>(RTC_FROM_HERE, [&] {
+    SendTask(t1, [&] {
       s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
     });
-    t2->Invoke<void>(RTC_FROM_HERE, [&] {
+    SendTask(t2, [&] {
       s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
     });
 
@@ -376,17 +377,17 @@
     rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
     rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
 
-    t1->Invoke<void>(RTC_FROM_HERE, [&] {
+    SendTask(t1, [&] {
       s1->Bind(a1);
       a1 = s1->GetLocalAddress();
     });
-    t2->Invoke<void>(RTC_FROM_HERE, [&] {
+    SendTask(t2, [&] {
       s2->Bind(a2);
       a2 = s2->GetLocalAddress();
     });
 
-    t1->Invoke<void>(RTC_FROM_HERE, [&] { s1->Connect(a2); });
-    t2->Invoke<void>(RTC_FROM_HERE, [&] { s2->Connect(a1); });
+    SendTask(t1, [&] { s1->Connect(a2); });
+    SendTask(t2, [&] { s2->Connect(a1); });
 
     for (uint64_t i = 0; i < 1000; i++) {
       t1->PostTask([&]() { s1->Send(data.data(), data.size()); });
@@ -398,8 +399,8 @@
     EXPECT_EQ(r1.ReceivedCount(), 1000);
     EXPECT_EQ(r2.ReceivedCount(), 1000);
 
-    t1->Invoke<void>(RTC_FROM_HERE, [&] { delete s1; });
-    t2->Invoke<void>(RTC_FROM_HERE, [&] { delete s2; });
+    SendTask(t1, [&] { delete s1; });
+    SendTask(t2, [&] { delete s2; });
   }
 
   const int64_t single_packet_size = data.size() + kOverheadIpv4Udp;
@@ -465,12 +466,10 @@
 
   rtc::Socket* s1 = nullptr;
   rtc::Socket* s2 = nullptr;
-  t1->Invoke<void>(RTC_FROM_HERE, [&] {
-    s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
-  });
-  t2->Invoke<void>(RTC_FROM_HERE, [&] {
-    s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM);
-  });
+  SendTask(t1,
+           [&] { s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); });
+  SendTask(t2,
+           [&] { s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); });
 
   SocketReader r1(s1, t1);
   SocketReader r2(s2, t2);
@@ -478,17 +477,17 @@
   rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
   rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
 
-  t1->Invoke<void>(RTC_FROM_HERE, [&] {
+  SendTask(t1, [&] {
     s1->Bind(a1);
     a1 = s1->GetLocalAddress();
   });
-  t2->Invoke<void>(RTC_FROM_HERE, [&] {
+  SendTask(t2, [&] {
     s2->Bind(a2);
     a2 = s2->GetLocalAddress();
   });
 
-  t1->Invoke<void>(RTC_FROM_HERE, [&] { s1->Connect(a2); });
-  t2->Invoke<void>(RTC_FROM_HERE, [&] { s2->Connect(a1); });
+  SendTask(t1, [&] { s1->Connect(a2); });
+  SendTask(t2, [&] { s2->Connect(a1); });
 
   // Send 11 packets, totalizing 1 second between the first and the last.
   const int kNumPacketsSent = 11;
@@ -518,8 +517,8 @@
   EXPECT_EQ(r1.ReceivedCount(), 11);
   EXPECT_EQ(r2.ReceivedCount(), 11);
 
-  t1->Invoke<void>(RTC_FROM_HERE, [&] { delete s1; });
-  t2->Invoke<void>(RTC_FROM_HERE, [&] { delete s2; });
+  SendTask(t1, [&] { delete s1; });
+  SendTask(t2, [&] { delete s2; });
 }
 
 // Testing that packets are delivered via all routes using a routing scheme as
diff --git a/test/pc/e2e/peer_connection_quality_test.cc b/test/pc/e2e/peer_connection_quality_test.cc
index 596d118..89d5da0 100644
--- a/test/pc/e2e/peer_connection_quality_test.cc
+++ b/test/pc/e2e/peer_connection_quality_test.cc
@@ -28,6 +28,7 @@
 #include "rtc_base/gunit.h"
 #include "rtc_base/numerics/safe_conversions.h"
 #include "rtc_base/strings/string_builder.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "system_wrappers/include/cpu_info.h"
 #include "system_wrappers/include/field_trial.h"
 #include "test/field_trial.h"
@@ -345,18 +346,17 @@
                               });
 
   // Setup call.
-  signaling_thread->Invoke<void>(RTC_FROM_HERE, [this, &run_params] {
-    SetupCallOnSignalingThread(run_params);
-  });
+  SendTask(signaling_thread.get(),
+           [this, &run_params] { SetupCallOnSignalingThread(run_params); });
   std::unique_ptr<SignalingInterceptor> signaling_interceptor =
       CreateSignalingInterceptor(run_params);
   // Connect peers.
-  signaling_thread->Invoke<void>(RTC_FROM_HERE, [this, &signaling_interceptor] {
+  SendTask(signaling_thread.get(), [this, &signaling_interceptor] {
     ExchangeOfferAnswer(signaling_interceptor.get());
   });
   WaitUntilIceCandidatesGathered(signaling_thread.get());
 
-  signaling_thread->Invoke<void>(RTC_FROM_HERE, [this, &signaling_interceptor] {
+  SendTask(signaling_thread.get(), [this, &signaling_interceptor] {
     ExchangeIceCandidates(signaling_interceptor.get());
   });
   WaitUntilPeersAreConnected(signaling_thread.get());
@@ -388,8 +388,7 @@
   alice_->DetachAecDump();
   bob_->DetachAecDump();
   // Tear down the call.
-  signaling_thread->Invoke<void>(RTC_FROM_HERE,
-                                 [this] { TearDownCallOnSignalingThread(); });
+  SendTask(signaling_thread.get(), [this] { TearDownCallOnSignalingThread(); });
 
   Timestamp end_time = Now();
   RTC_LOG(LS_INFO) << "All peers are disconnected.";
@@ -597,9 +596,11 @@
     rtc::Thread* signaling_thread) {
   ASSERT_TRUE(time_controller_.Wait(
       [&]() {
-        return signaling_thread->Invoke<bool>(RTC_FROM_HERE, [&]() {
-          return alice_->IsIceGatheringDone() && bob_->IsIceGatheringDone();
+        bool result;
+        SendTask(signaling_thread, [&]() {
+          result = alice_->IsIceGatheringDone() && bob_->IsIceGatheringDone();
         });
+        return result;
       },
       2 * kDefaultTimeout));
 }
@@ -609,14 +610,16 @@
   // This means that ICE and DTLS are connected.
   alice_connected_ = time_controller_.Wait(
       [&]() {
-        return signaling_thread->Invoke<bool>(
-            RTC_FROM_HERE, [&]() { return alice_->IsIceConnected(); });
+        bool result;
+        SendTask(signaling_thread, [&] { result = alice_->IsIceConnected(); });
+        return result;
       },
       kDefaultTimeout);
   bob_connected_ = time_controller_.Wait(
       [&]() {
-        return signaling_thread->Invoke<bool>(
-            RTC_FROM_HERE, [&]() { return bob_->IsIceConnected(); });
+        bool result;
+        SendTask(signaling_thread, [&] { result = bob_->IsIceConnected(); });
+        return result;
       },
       kDefaultTimeout);
 }
diff --git a/test/peer_scenario/BUILD.gn b/test/peer_scenario/BUILD.gn
index 9410a0b..43d203b 100644
--- a/test/peer_scenario/BUILD.gn
+++ b/test/peer_scenario/BUILD.gn
@@ -52,6 +52,7 @@
       "../../rtc_base",
       "../../rtc_base:null_socket_server",
       "../../rtc_base:stringutils",
+      "../../rtc_base:task_queue_for_test",
       "../../test:explicit_key_value_config",
       "../../test:scoped_key_value_config",
       "../logging:log_writer",
diff --git a/test/peer_scenario/scenario_connection.cc b/test/peer_scenario/scenario_connection.cc
index bd95da0..66eca27 100644
--- a/test/peer_scenario/scenario_connection.cc
+++ b/test/peer_scenario/scenario_connection.cc
@@ -17,6 +17,7 @@
 #include "pc/jsep_transport_controller.h"
 #include "pc/rtp_transport_internal.h"
 #include "pc/session_description.h"
+#include "rtc_base/task_queue_for_test.h"
 
 namespace webrtc {
 class ScenarioIceConnectionImpl : public ScenarioIceConnection,
@@ -103,7 +104,7 @@
                                       port_allocator_.get(),
                                       /*async_resolver_factory*/ nullptr,
                                       CreateJsepConfig())) {
-  network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
+  SendTask(network_thread_, [this] {
     RTC_DCHECK_RUN_ON(network_thread_);
     uint32_t flags = cricket::PORTALLOCATOR_DISABLE_TCP;
     port_allocator_->set_flags(port_allocator_->flags() | flags);
@@ -116,7 +117,7 @@
 }
 
 ScenarioIceConnectionImpl::~ScenarioIceConnectionImpl() {
-  network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
+  SendTask(network_thread_, [this] {
     RTC_DCHECK_RUN_ON(network_thread_);
     jsep_controller_.reset();
     port_allocator_.reset();
diff --git a/test/time_controller/BUILD.gn b/test/time_controller/BUILD.gn
index 11c6b77..c810eae 100644
--- a/test/time_controller/BUILD.gn
+++ b/test/time_controller/BUILD.gn
@@ -64,6 +64,7 @@
       "../../rtc_base:macromagic",
       "../../rtc_base:rtc_event",
       "../../rtc_base:rtc_task_queue",
+      "../../rtc_base:task_queue_for_test",
       "../../rtc_base:threading",
       "../../rtc_base/synchronization:mutex",
       "../../rtc_base/task_utils:repeating_task",
diff --git a/test/time_controller/simulated_time_controller_unittest.cc b/test/time_controller/simulated_time_controller_unittest.cc
index d9a5c16..78d8909 100644
--- a/test/time_controller/simulated_time_controller_unittest.cc
+++ b/test/time_controller/simulated_time_controller_unittest.cc
@@ -15,6 +15,7 @@
 
 #include "rtc_base/event.h"
 #include "rtc_base/task_queue.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/task_utils/repeating_task.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
@@ -123,7 +124,7 @@
   EXPECT_TRUE(delay_task_executed);
 }
 
-TEST(SimulatedTimeControllerTest, ThreadYeildsOnInvoke) {
+TEST(SimulatedTimeControllerTest, ThreadYeildsOnSynchronousCall) {
   GlobalSimulatedTimeController sim(kStartTime);
   auto main_thread = sim.GetMainThread();
   auto t2 = sim.CreateThread("thread", nullptr);
@@ -131,7 +132,7 @@
   // Posting a task to the main thread, this should not run until AdvanceTime is
   // called.
   main_thread->PostTask([&] { task_has_run = true; });
-  t2->Invoke<void>(RTC_FROM_HERE, [] {
+  SendTask(t2.get(), [] {
     rtc::Event yield_event;
     // Wait() triggers YieldExecution() which will runs message processing on
     // all threads that are not in the yielded set.