Delete FunctorMessageHandler, in tests use alternative ways to post functors

Bug: None
Change-Id: I22c7623300c2370269651b67a919a3c4a2ff3926
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161080
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29969}
diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc
index d88b706..8ce3729 100644
--- a/pc/channel_unittest.cc
+++ b/pc/channel_unittest.cc
@@ -476,11 +476,9 @@
    public:
     template <class FunctorT>
     explicit ScopedCallThread(FunctorT&& functor)
-        : thread_(rtc::Thread::Create()),
-          task_(new rtc::FunctorMessageHandler<void, FunctorT>(
-              std::forward<FunctorT>(functor))) {
+        : thread_(rtc::Thread::Create()) {
       thread_->Start();
-      thread_->Post(RTC_FROM_HERE, task_.get());
+      thread_->PostTask(RTC_FROM_HERE, std::forward<FunctorT>(functor));
     }
 
     ~ScopedCallThread() { thread_->Stop(); }
@@ -489,7 +487,6 @@
 
    private:
     std::unique_ptr<rtc::Thread> thread_;
-    std::unique_ptr<rtc::MessageHandler> task_;
   };
 
   bool CodecMatches(const typename T::Codec& c1, const typename T::Codec& c2) {
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 2b10d1e..9ff86dd 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -1234,6 +1234,7 @@
       "../test:test_main",
       "../test:test_support",
       "memory:unittests",
+      "task_utils:to_queued_task",
       "third_party/base64",
       "third_party/sigslot",
       "//third_party/abseil-cpp/absl/base:core_headers",
@@ -1385,6 +1386,7 @@
       "../test:test_support",
       "memory:fifo_buffer",
       "synchronization:synchronization_unittests",
+      "task_utils:to_queued_task",
       "third_party/sigslot",
       "//third_party/abseil-cpp/absl/algorithm:container",
       "//third_party/abseil-cpp/absl/memory",
diff --git a/rtc_base/message_handler.h b/rtc_base/message_handler.h
index 9836594..85cb785 100644
--- a/rtc_base/message_handler.h
+++ b/rtc_base/message_handler.h
@@ -13,6 +13,7 @@
 
 #include <utility>
 
+#include "api/function_view.h"
 #include "rtc_base/constructor_magic.h"
 #include "rtc_base/system/rtc_export.h"
 
@@ -21,7 +22,6 @@
 struct Message;
 
 // Messages get dispatched to a MessageHandler
-
 class RTC_EXPORT MessageHandler {
  public:
   virtual ~MessageHandler();
@@ -34,38 +34,6 @@
   RTC_DISALLOW_COPY_AND_ASSIGN(MessageHandler);
 };
 
-// Helper class to facilitate executing a functor on a thread.
-template <class ReturnT, class FunctorT>
-class FunctorMessageHandler : public MessageHandler {
- public:
-  explicit FunctorMessageHandler(FunctorT&& functor)
-      : functor_(std::forward<FunctorT>(functor)) {}
-  virtual void OnMessage(Message* msg) { result_ = functor_(); }
-  const ReturnT& result() const { return result_; }
-
-  // Returns moved result. Should not call result() or MoveResult() again
-  // after this.
-  ReturnT MoveResult() { return std::move(result_); }
-
- private:
-  FunctorT functor_;
-  ReturnT result_;
-};
-
-// Specialization for ReturnT of void.
-template <class FunctorT>
-class FunctorMessageHandler<void, FunctorT> : public MessageHandler {
- public:
-  explicit FunctorMessageHandler(FunctorT&& functor)
-      : functor_(std::forward<FunctorT>(functor)) {}
-  virtual void OnMessage(Message* msg) { functor_(); }
-  void result() const {}
-  void MoveResult() {}
-
- private:
-  FunctorT functor_;
-};
-
 }  // namespace rtc
 
 #endif  // RTC_BASE_MESSAGE_HANDLER_H_
diff --git a/rtc_base/message_queue_unittest.cc b/rtc_base/message_queue_unittest.cc
index b31ea6c..0c0cfc4 100644
--- a/rtc_base/message_queue_unittest.cc
+++ b/rtc_base/message_queue_unittest.cc
@@ -20,12 +20,15 @@
 #include "rtc_base/null_socket_server.h"
 #include "rtc_base/ref_count.h"
 #include "rtc_base/ref_counted_object.h"
+#include "rtc_base/task_utils/to_queued_task.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/time_utils.h"
 
 namespace rtc {
 namespace {
 
+using ::webrtc::ToQueuedTask;
+
 class MessageQueueTest : public ::testing::Test, public MessageQueue {
  public:
   MessageQueueTest() : MessageQueue(SocketServer::CreateDefault(), true) {}
@@ -132,26 +135,25 @@
   b->Start();
 
   volatile int messages_processed = 0;
-  FunctorMessageHandler<void, std::function<void()>> incrementer(
-      [&messages_processed, &entered_process_all_message_queues] {
-        // Wait for event as a means to ensure Increment doesn't occur outside
-        // of ProcessAllMessageQueues. The event is set by a message posted to
-        // the main thread, which is guaranteed to be handled inside
-        // ProcessAllMessageQueues.
-        entered_process_all_message_queues.Wait(Event::kForever);
-        AtomicOps::Increment(&messages_processed);
-      });
-  FunctorMessageHandler<void, std::function<void()>> event_signaler(
-      [&entered_process_all_message_queues] {
-        entered_process_all_message_queues.Set();
-      });
+  auto incrementer = [&messages_processed,
+                      &entered_process_all_message_queues] {
+    // Wait for event as a means to ensure Increment doesn't occur outside
+    // of ProcessAllMessageQueues. The event is set by a message posted to
+    // the main thread, which is guaranteed to be handled inside
+    // ProcessAllMessageQueues.
+    entered_process_all_message_queues.Wait(Event::kForever);
+    AtomicOps::Increment(&messages_processed);
+  };
+  auto event_signaler = [&entered_process_all_message_queues] {
+    entered_process_all_message_queues.Set();
+  };
 
   // Post messages (both delayed and non delayed) to both threads.
-  a->Post(RTC_FROM_HERE, &incrementer);
-  b->Post(RTC_FROM_HERE, &incrementer);
-  a->PostDelayed(RTC_FROM_HERE, 0, &incrementer);
-  b->PostDelayed(RTC_FROM_HERE, 0, &incrementer);
-  rtc::Thread::Current()->Post(RTC_FROM_HERE, &event_signaler);
+  a->PostTask(ToQueuedTask(incrementer));
+  b->PostTask(ToQueuedTask(incrementer));
+  a->PostDelayedTask(ToQueuedTask(incrementer), 0);
+  b->PostDelayedTask(ToQueuedTask(incrementer), 0);
+  rtc::Thread::Current()->PostTask(ToQueuedTask(event_signaler));
 
   MessageQueueManager::ProcessAllMessageQueuesForTesting();
   EXPECT_EQ(4, AtomicOps::AcquireLoad(&messages_processed));
@@ -172,23 +174,21 @@
   auto t = Thread::CreateWithSocketServer();
   t->Start();
 
-  FunctorMessageHandler<void, std::function<void()>> clearer(
-      [&entered_process_all_message_queues] {
-        // Wait for event as a means to ensure Clear doesn't occur outside of
-        // ProcessAllMessageQueues. The event is set by a message posted to the
-        // main thread, which is guaranteed to be handled inside
-        // ProcessAllMessageQueues.
-        entered_process_all_message_queues.Wait(Event::kForever);
-        rtc::Thread::Current()->Clear(nullptr);
-      });
-  FunctorMessageHandler<void, std::function<void()>> event_signaler(
-      [&entered_process_all_message_queues] {
-        entered_process_all_message_queues.Set();
-      });
+  auto clearer = [&entered_process_all_message_queues] {
+    // Wait for event as a means to ensure Clear doesn't occur outside of
+    // ProcessAllMessageQueues. The event is set by a message posted to the
+    // main thread, which is guaranteed to be handled inside
+    // ProcessAllMessageQueues.
+    entered_process_all_message_queues.Wait(Event::kForever);
+    rtc::Thread::Current()->Clear(nullptr);
+  };
+  auto event_signaler = [&entered_process_all_message_queues] {
+    entered_process_all_message_queues.Set();
+  };
 
   // Post messages (both delayed and non delayed) to both threads.
-  t->Post(RTC_FROM_HERE, &clearer);
-  rtc::Thread::Current()->Post(RTC_FROM_HERE, &event_signaler);
+  t->PostTask(RTC_FROM_HERE, clearer);
+  rtc::Thread::Current()->PostTask(RTC_FROM_HERE, event_signaler);
   MessageQueueManager::ProcessAllMessageQueuesForTesting();
 }
 
diff --git a/rtc_base/time_utils_unittest.cc b/rtc_base/time_utils_unittest.cc
index aeb9daf..824c2c0 100644
--- a/rtc_base/time_utils_unittest.cc
+++ b/rtc_base/time_utils_unittest.cc
@@ -18,6 +18,7 @@
 #include "rtc_base/helpers.h"
 #include "rtc_base/location.h"
 #include "rtc_base/message_handler.h"
+#include "rtc_base/task_utils/to_queued_task.h"
 #include "rtc_base/thread.h"
 #include "test/gtest.h"
 
@@ -269,11 +270,10 @@
 
   // Post an event that won't be executed for 10 seconds.
   Event message_handler_dispatched;
-  auto functor = [&message_handler_dispatched] {
-    message_handler_dispatched.Set();
-  };
-  FunctorMessageHandler<void, decltype(functor)> handler(std::move(functor));
-  worker->PostDelayed(RTC_FROM_HERE, 60000, &handler);
+  worker->PostDelayedTask(webrtc::ToQueuedTask([&message_handler_dispatched] {
+                            message_handler_dispatched.Set();
+                          }),
+                          /*milliseconds=*/60000);
 
   // Wait for a bit for the worker thread to be started and enter its socket
   // select(). Otherwise this test would be trivial since the worker thread