Add absl::string_view version of PortInterface::SupportsProtocol()

This is the first step of migrating SupportsProtocol() to
absl::string_view. The std::string version will be removed once all
downstream users have migrated and have implemented the
absl::string_view version.

Bug: webrtc:13579
Change-Id: Ib609b9bab0c2e525553daddb1e365050bbe1c1f5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265806
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Ali Tofigh <alito@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37211}
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index 69a2bc4..1579f06 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -290,6 +290,7 @@
     absl_deps = [
       "//third_party/abseil-cpp/absl/algorithm:container",
       "//third_party/abseil-cpp/absl/memory",
+      "//third_party/abseil-cpp/absl/strings",
       "//third_party/abseil-cpp/absl/types:optional",
     ]
   }
diff --git a/p2p/base/port_interface.cc b/p2p/base/port_interface.cc
index 9175ca5..ae9f320 100644
--- a/p2p/base/port_interface.cc
+++ b/p2p/base/port_interface.cc
@@ -10,10 +10,18 @@
 
 #include "p2p/base/port_interface.h"
 
+#include <string>
+
+#include "absl/strings/string_view.h"
+
 namespace cricket {
 
 PortInterface::PortInterface() = default;
 
 PortInterface::~PortInterface() = default;
 
+bool PortInterface::SupportsProtocol(absl::string_view protocol) const {
+  return SupportsProtocol(std::string(protocol));
+}
+
 }  // namespace cricket
diff --git a/p2p/base/port_interface.h b/p2p/base/port_interface.h
index babe27d..431de06 100644
--- a/p2p/base/port_interface.h
+++ b/p2p/base/port_interface.h
@@ -15,6 +15,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
 #include "api/candidate.h"
 #include "p2p/base/transport_description.h"
@@ -60,7 +61,10 @@
 
   virtual bool SharedSocket() const = 0;
 
+  // TODO(webrtc:13579): Remove std::string version once downstream users have
+  // migrated to the absl::string_view version.
   virtual bool SupportsProtocol(const std::string& protocol) const = 0;
+  virtual bool SupportsProtocol(absl::string_view protocol) const;
 
   // PrepareAddress will attempt to get an address for this port that other
   // clients can send to.  It may take some time before the address is ready.
diff --git a/p2p/base/port_unittest.cc b/p2p/base/port_unittest.cc
index 22d58ff..c350034 100644
--- a/p2p/base/port_unittest.cc
+++ b/p2p/base/port_unittest.cc
@@ -20,6 +20,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
 #include "api/candidate.h"
 #include "api/packet_socket_factory.h"
@@ -179,6 +180,10 @@
   }
 
   virtual bool SupportsProtocol(const std::string& protocol) const {
+    return SupportsProtocol(absl::string_view(protocol));
+  }
+
+  virtual bool SupportsProtocol(absl::string_view protocol) const {
     return true;
   }
 
@@ -3546,22 +3551,29 @@
 
 TEST_F(PortTest, TestSupportsProtocol) {
   auto udp_port = CreateUdpPort(kLocalAddr1);
-  EXPECT_TRUE(udp_port->SupportsProtocol(UDP_PROTOCOL_NAME));
-  EXPECT_FALSE(udp_port->SupportsProtocol(TCP_PROTOCOL_NAME));
+  EXPECT_TRUE(udp_port->SupportsProtocol(absl::string_view(UDP_PROTOCOL_NAME)));
+  EXPECT_FALSE(
+      udp_port->SupportsProtocol(absl::string_view(TCP_PROTOCOL_NAME)));
 
   auto stun_port = CreateStunPort(kLocalAddr1, nat_socket_factory1());
-  EXPECT_TRUE(stun_port->SupportsProtocol(UDP_PROTOCOL_NAME));
-  EXPECT_FALSE(stun_port->SupportsProtocol(TCP_PROTOCOL_NAME));
+  EXPECT_TRUE(
+      stun_port->SupportsProtocol(absl::string_view(UDP_PROTOCOL_NAME)));
+  EXPECT_FALSE(
+      stun_port->SupportsProtocol(absl::string_view(TCP_PROTOCOL_NAME)));
 
   auto tcp_port = CreateTcpPort(kLocalAddr1);
-  EXPECT_TRUE(tcp_port->SupportsProtocol(TCP_PROTOCOL_NAME));
-  EXPECT_TRUE(tcp_port->SupportsProtocol(SSLTCP_PROTOCOL_NAME));
-  EXPECT_FALSE(tcp_port->SupportsProtocol(UDP_PROTOCOL_NAME));
+  EXPECT_TRUE(tcp_port->SupportsProtocol(absl::string_view(TCP_PROTOCOL_NAME)));
+  EXPECT_TRUE(
+      tcp_port->SupportsProtocol(absl::string_view(SSLTCP_PROTOCOL_NAME)));
+  EXPECT_FALSE(
+      tcp_port->SupportsProtocol(absl::string_view(UDP_PROTOCOL_NAME)));
 
   auto turn_port =
       CreateTurnPort(kLocalAddr1, nat_socket_factory1(), PROTO_UDP, PROTO_UDP);
-  EXPECT_TRUE(turn_port->SupportsProtocol(UDP_PROTOCOL_NAME));
-  EXPECT_FALSE(turn_port->SupportsProtocol(TCP_PROTOCOL_NAME));
+  EXPECT_TRUE(
+      turn_port->SupportsProtocol(absl::string_view(UDP_PROTOCOL_NAME)));
+  EXPECT_FALSE(
+      turn_port->SupportsProtocol(absl::string_view(TCP_PROTOCOL_NAME)));
 }
 
 // Test that SetIceParameters updates the component, ufrag and password
diff --git a/p2p/base/stun_port.cc b/p2p/base/stun_port.cc
index e1a6820..866d517 100644
--- a/p2p/base/stun_port.cc
+++ b/p2p/base/stun_port.cc
@@ -14,6 +14,7 @@
 #include <vector>
 
 #include "absl/memory/memory.h"
+#include "absl/strings/string_view.h"
 #include "api/transport/stun.h"
 #include "p2p/base/connection.h"
 #include "p2p/base/p2p_constants.h"
@@ -348,6 +349,10 @@
 }
 
 bool UDPPort::SupportsProtocol(const std::string& protocol) const {
+  return SupportsProtocol(absl::string_view(protocol));
+}
+
+bool UDPPort::SupportsProtocol(absl::string_view protocol) const {
   return protocol == UDP_PROTOCOL_NAME;
 }
 
diff --git a/p2p/base/stun_port.h b/p2p/base/stun_port.h
index 3968c17..cf865f9 100644
--- a/p2p/base/stun_port.h
+++ b/p2p/base/stun_port.h
@@ -17,6 +17,7 @@
 #include <string>
 
 #include "absl/memory/memory.h"
+#include "absl/strings/string_view.h"
 #include "p2p/base/port.h"
 #include "p2p/base/stun_request.h"
 #include "rtc_base/async_packet_socket.h"
@@ -101,6 +102,7 @@
                             int64_t packet_time_us) override;
 
   bool SupportsProtocol(const std::string& protocol) const override;
+  bool SupportsProtocol(absl::string_view protocol) const override;
   ProtocolType GetProtocol() const override;
 
   void GetStunStats(absl::optional<StunStats>* stats) override;
diff --git a/p2p/base/tcp_port.cc b/p2p/base/tcp_port.cc
index d04ec8d..8407134 100644
--- a/p2p/base/tcp_port.cc
+++ b/p2p/base/tcp_port.cc
@@ -73,6 +73,7 @@
 
 #include "absl/algorithm/container.h"
 #include "absl/memory/memory.h"
+#include "absl/strings/string_view.h"
 #include "p2p/base/p2p_constants.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/ip_address.h"
@@ -269,6 +270,10 @@
 }
 
 bool TCPPort::SupportsProtocol(const std::string& protocol) const {
+  return SupportsProtocol(absl::string_view(protocol));
+}
+
+bool TCPPort::SupportsProtocol(absl::string_view protocol) const {
   return protocol == TCP_PROTOCOL_NAME || protocol == SSLTCP_PROTOCOL_NAME;
 }
 
diff --git a/p2p/base/tcp_port.h b/p2p/base/tcp_port.h
index 958666e..70fa584 100644
--- a/p2p/base/tcp_port.h
+++ b/p2p/base/tcp_port.h
@@ -16,6 +16,7 @@
 #include <string>
 
 #include "absl/memory/memory.h"
+#include "absl/strings/string_view.h"
 #include "p2p/base/connection.h"
 #include "p2p/base/port.h"
 #include "rtc_base/async_packet_socket.h"
@@ -63,6 +64,7 @@
   int SetOption(rtc::Socket::Option opt, int value) override;
   int GetError() override;
   bool SupportsProtocol(const std::string& protocol) const override;
+  bool SupportsProtocol(absl::string_view protocol) const override;
   ProtocolType GetProtocol() const override;
 
  protected:
diff --git a/p2p/base/turn_port.cc b/p2p/base/turn_port.cc
index 9f8c8d2..7117bee 100644
--- a/p2p/base/turn_port.cc
+++ b/p2p/base/turn_port.cc
@@ -17,6 +17,7 @@
 
 #include "absl/algorithm/container.h"
 #include "absl/strings/match.h"
+#include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
 #include "api/transport/stun.h"
 #include "p2p/base/connection.h"
@@ -763,6 +764,10 @@
 }
 
 bool TurnPort::SupportsProtocol(const std::string& protocol) const {
+  return SupportsProtocol(absl::string_view(protocol));
+}
+
+bool TurnPort::SupportsProtocol(absl::string_view protocol) const {
   // Turn port only connects to UDP candidates.
   return protocol == UDP_PROTOCOL_NAME;
 }
diff --git a/p2p/base/turn_port.h b/p2p/base/turn_port.h
index 2d9166e..7dd6d3f 100644
--- a/p2p/base/turn_port.h
+++ b/p2p/base/turn_port.h
@@ -21,6 +21,7 @@
 #include <vector>
 
 #include "absl/memory/memory.h"
+#include "absl/strings/string_view.h"
 #include "api/async_dns_resolver.h"
 #include "p2p/base/port.h"
 #include "p2p/client/basic_port_allocator.h"
@@ -159,6 +160,7 @@
                     const rtc::SentPacket& sent_packet) override;
   virtual void OnReadyToSend(rtc::AsyncPacketSocket* socket);
   bool SupportsProtocol(const std::string& protocol) const override;
+  bool SupportsProtocol(absl::string_view protocol) const override;
 
   void OnSocketConnect(rtc::AsyncPacketSocket* socket);
   void OnSocketClose(rtc::AsyncPacketSocket* socket, int error);