Add overload to CreateIceTransport that takes additional dependencies

Bug: chromium:927579
Change-Id: I99c77af69b529ebd38c9f5a83882dfe6a2a1ffe9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144320
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Qingsi Wang <qingsi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28437}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 6699b14..77246bc 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -521,6 +521,7 @@
     "../p2p:rtc_p2p",
     "../rtc_base",
     "../rtc_base/system:rtc_export",
+    "rtc_event_log:rtc_event_log",
     "//third_party/abseil-cpp/absl/memory",
   ]
 }
diff --git a/api/ice_transport_factory.cc b/api/ice_transport_factory.cc
index 6cc399a..1fb917d 100644
--- a/api/ice_transport_factory.cc
+++ b/api/ice_transport_factory.cc
@@ -51,8 +51,17 @@
 
 rtc::scoped_refptr<IceTransportInterface> CreateIceTransport(
     cricket::PortAllocator* port_allocator) {
+  IceTransportInit init;
+  init.set_port_allocator(port_allocator);
+  return CreateIceTransport(std::move(init));
+}
+
+rtc::scoped_refptr<IceTransportInterface> CreateIceTransport(
+    IceTransportInit init) {
   return new rtc::RefCountedObject<IceTransportWithTransportChannel>(
-      absl::make_unique<cricket::P2PTransportChannel>("", 0, port_allocator));
+      absl::make_unique<cricket::P2PTransportChannel>(
+          "", 0, init.port_allocator(), init.async_resolver_factory(),
+          init.event_log()));
 }
 
 }  // namespace webrtc
diff --git a/api/ice_transport_factory.h b/api/ice_transport_factory.h
index f3a174f..d981e0b 100644
--- a/api/ice_transport_factory.h
+++ b/api/ice_transport_factory.h
@@ -11,7 +11,9 @@
 #ifndef API_ICE_TRANSPORT_FACTORY_H_
 #define API_ICE_TRANSPORT_FACTORY_H_
 
+#include "api/async_resolver_factory.h"
 #include "api/ice_transport_interface.h"
+#include "api/rtc_event_log/rtc_event_log.h"
 #include "api/scoped_refptr.h"
 #include "rtc_base/system/rtc_export.h"
 
@@ -21,14 +23,57 @@
 
 namespace webrtc {
 
+struct IceTransportInit final {
+ public:
+  IceTransportInit() = default;
+  IceTransportInit(const IceTransportInit&) = delete;
+  IceTransportInit(IceTransportInit&&) = default;
+  IceTransportInit& operator=(const IceTransportInit&) = delete;
+  IceTransportInit& operator=(IceTransportInit&&) = default;
+
+  cricket::PortAllocator* port_allocator() { return port_allocator_; }
+  void set_port_allocator(cricket::PortAllocator* port_allocator) {
+    port_allocator_ = port_allocator;
+  }
+
+  AsyncResolverFactory* async_resolver_factory() {
+    return async_resolver_factory_;
+  }
+  void set_async_resolver_factory(
+      AsyncResolverFactory* async_resolver_factory) {
+    async_resolver_factory_ = async_resolver_factory;
+  }
+
+  RtcEventLog* event_log() { return event_log_; }
+  void set_event_log(RtcEventLog* event_log) { event_log_ = event_log; }
+
+ private:
+  cricket::PortAllocator* port_allocator_ = nullptr;
+  AsyncResolverFactory* async_resolver_factory_ = nullptr;
+  RtcEventLog* event_log_ = nullptr;
+};
+
 // Static factory for an IceTransport object that can be created
 // without using a webrtc::PeerConnection.
 // The returned object must be accessed and destroyed on the thread that
 // created it.
 // The PortAllocator must outlive the created IceTransportInterface object.
+// TODO(steveanton): Remove in favor of the overload that takes
+// IceTransportInit.
 RTC_EXPORT rtc::scoped_refptr<IceTransportInterface> CreateIceTransport(
     cricket::PortAllocator* port_allocator);
 
+// Static factory for an IceTransport object that can be created
+// without using a webrtc::PeerConnection.
+// The returned object must be accessed and destroyed on the thread that
+// created it.
+// |init.port_allocator()| is required and must outlive the created
+//     IceTransportInterface object.
+// |init.async_resolver_factory()| and |init.event_log()| are optional, but if
+//     provided must outlive the created IceTransportInterface object.
+RTC_EXPORT rtc::scoped_refptr<IceTransportInterface> CreateIceTransport(
+    IceTransportInit);
+
 }  // namespace webrtc
 
 #endif  // API_ICE_TRANSPORT_FACTORY_H_
diff --git a/pc/ice_transport_unittest.cc b/pc/ice_transport_unittest.cc
index 62d7953..a801bba 100644
--- a/pc/ice_transport_unittest.cc
+++ b/pc/ice_transport_unittest.cc
@@ -40,7 +40,9 @@
 TEST_F(IceTransportTest, CreateSelfDeletingTransport) {
   std::unique_ptr<cricket::FakePortAllocator> port_allocator(
       absl::make_unique<cricket::FakePortAllocator>(nullptr, nullptr));
-  auto ice_transport = CreateIceTransport(port_allocator.get());
+  IceTransportInit init;
+  init.set_port_allocator(port_allocator.get());
+  auto ice_transport = CreateIceTransport(std::move(init));
   EXPECT_NE(nullptr, ice_transport->internal());
 }