Add IceTransportInterface object

This creates the API for an ICE transport object, and lets it
be accessible from a DTLS transport object.

Bug: chromium:907849
Change-Id: Ieb24570217dec75ce0deca8420739c1f116fbba4
Reviewed-on: https://webrtc-review.googlesource.com/c/118703
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26472}
diff --git a/pc/ice_transport_unittest.cc b/pc/ice_transport_unittest.cc
index c299b2c..8d668de 100644
--- a/pc/ice_transport_unittest.cc
+++ b/pc/ice_transport_unittest.cc
@@ -9,18 +9,39 @@
  */
 
 #include "pc/ice_transport.h"
-#include "p2p/base/fake_port_allocator.h"
 
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include "absl/memory/memory.h"
+#include "api/ice_transport_factory.h"
+#include "p2p/base/fake_ice_transport.h"
+#include "p2p/base/fake_port_allocator.h"
+#include "rtc_base/gunit.h"
+#include "test/gmock.h"
 #include "test/gtest.h"
 
 namespace webrtc {
 
 class IceTransportTest : public testing::Test {};
 
-TEST_F(IceTransportTest, CreateStandaloneIceTransport) {
-  auto port_allocator = new cricket::FakePortAllocator(nullptr, nullptr);
-  auto transport = CreateIceTransport(port_allocator);
-  ASSERT_TRUE(transport->internal());
+TEST_F(IceTransportTest, CreateNonSelfDeletingTransport) {
+  auto cricket_transport =
+      absl::make_unique<cricket::FakeIceTransport>("name", 0, nullptr);
+  rtc::scoped_refptr<IceTransportWithPointer> ice_transport =
+      new rtc::RefCountedObject<IceTransportWithPointer>(
+          cricket_transport.get());
+  EXPECT_EQ(ice_transport->internal(), cricket_transport.get());
+  ice_transport->Clear();
+  EXPECT_NE(ice_transport->internal(), cricket_transport.get());
+}
+
+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());
+  EXPECT_NE(nullptr, ice_transport->internal());
 }
 
 }  // namespace webrtc