Use sigslot trampoline in ProxyBinding

Bug: webrtc:42222066
Change-Id: I12d04f2b906ab3eea7b1ad4d0230648d6d63b342
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/410580
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45767}
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 49245ac..0c89bed 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -1836,6 +1836,7 @@
     "third_party/sigslot",
     "//third_party/abseil-cpp/absl/algorithm:container",
     "//third_party/abseil-cpp/absl/base:core_headers",
+    "//third_party/abseil-cpp/absl/functional:any_invocable",
     "//third_party/abseil-cpp/absl/memory",
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/strings:string_view",
diff --git a/rtc_base/proxy_server.cc b/rtc_base/proxy_server.cc
index 8ef45cf..31fdc50 100644
--- a/rtc_base/proxy_server.cc
+++ b/rtc_base/proxy_server.cc
@@ -71,7 +71,8 @@
       ext_socket_(ext_socket),
       connected_(false),
       out_buffer_(kBufferSize),
-      in_buffer_(kBufferSize) {
+      in_buffer_(kBufferSize),
+      destroyed_trampoline_(this) {
   int_socket_->SignalConnectRequest.connect(this,
                                             &ProxyBinding::OnConnectRequest);
   int_socket_->SignalReadEvent.connect(this, &ProxyBinding::OnInternalRead);
@@ -151,7 +152,7 @@
 }
 
 void ProxyBinding::Destroy() {
-  SignalDestroyed(this);
+  NotifyDestroyed(this);
 }
 
 }  // namespace webrtc
diff --git a/rtc_base/proxy_server.h b/rtc_base/proxy_server.h
index 81fd84b..9f334c5 100644
--- a/rtc_base/proxy_server.h
+++ b/rtc_base/proxy_server.h
@@ -12,10 +12,13 @@
 #define RTC_BASE_PROXY_SERVER_H_
 
 #include <memory>
+#include <utility>
 #include <vector>
 
+#include "absl/functional/any_invocable.h"
 #include "rtc_base/memory/fifo_buffer.h"
 #include "rtc_base/server_socket_adapters.h"
+#include "rtc_base/sigslot_trampoline.h"
 #include "rtc_base/socket.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/socket_factory.h"
@@ -39,6 +42,11 @@
   ProxyBinding& operator=(const ProxyBinding&) = delete;
 
   sigslot::signal1<ProxyBinding*> SignalDestroyed;
+  void SubscribeDestroyed(
+      absl::AnyInvocable<void(ProxyBinding* proxy)> callback) {
+    destroyed_trampoline_.Subscribe(std::move(callback));
+  }
+  void NotifyDestroyed(ProxyBinding* proxy) { SignalDestroyed(proxy); }
 
  private:
   void OnConnectRequest(AsyncProxyServerSocket* socket,
@@ -61,6 +69,9 @@
   bool connected_;
   FifoBuffer out_buffer_;
   FifoBuffer in_buffer_;
+
+  SignalTrampoline<ProxyBinding, &ProxyBinding::SignalDestroyed>
+      destroyed_trampoline_;
 };
 
 class ProxyServer : public sigslot::has_slots<> {