commit 904d06a00344d0dcf1e321d37e8183b42f35bcae
parent 9dd6998de89a48e2b2d6ca2a0a058300b8a6e160
Author: Dan Baker <dbaker@mozilla.com>
Date: Mon, 1 Dec 2025 22:11:55 -0700
Bug 2000941 - Vendor libwebrtc from ffc4cdc750
Upstream commit: https://webrtc.googlesource.com/src/+/ffc4cdc750d3748b3ef2957109b173abecc77425
Update test implementations of the PacketSocketFactory to newer api
Replace FakePacketSocketFactory that is used as stub with
MockPacketSocketFactory to rely on unified way to inject fakes rather
than on manual implementation of a stub.
Bug: webrtc:42223992
Change-Id: Iab757ea83b9a7c0a80b7178e7dad186c3bec0345
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/410440
Auto-Submit: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45686}
Diffstat:
9 files changed, 56 insertions(+), 94 deletions(-)
diff --git a/third_party/libwebrtc/README.mozilla.last-vendor b/third_party/libwebrtc/README.mozilla.last-vendor
@@ -1,4 +1,4 @@
# ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc
-libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T05:08:58.016839+00:00.
+libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T05:11:40.657866+00:00.
# base of lastest vendoring
-b1cb4509fc
+ffc4cdc750
diff --git a/third_party/libwebrtc/api/BUILD.gn b/third_party/libwebrtc/api/BUILD.gn
@@ -1401,6 +1401,7 @@ if (rtc_include_tests) {
"../rtc_base:async_packet_socket",
"../rtc_base:socket_address",
"../test:test_support",
+ "environment",
]
}
diff --git a/third_party/libwebrtc/api/test/mock_packet_socket_factory.h b/third_party/libwebrtc/api/test/mock_packet_socket_factory.h
@@ -16,6 +16,7 @@
#include <type_traits>
#include "api/async_dns_resolver.h"
+#include "api/environment/environment.h"
#include "api/packet_socket_factory.h"
#include "rtc_base/async_packet_socket.h"
#include "rtc_base/socket_address.h"
@@ -24,17 +25,19 @@
namespace webrtc {
class MockPacketSocketFactory : public PacketSocketFactory {
public:
- MOCK_METHOD(AsyncPacketSocket*,
+ MOCK_METHOD(std::unique_ptr<AsyncPacketSocket>,
CreateUdpSocket,
- (const SocketAddress&, uint16_t, uint16_t),
+ (const Environment&, const SocketAddress&, uint16_t, uint16_t),
(override));
- MOCK_METHOD(AsyncListenSocket*,
- CreateServerTcpSocket,
- (const SocketAddress&, uint16_t, uint16_t, int opts),
- (override));
- MOCK_METHOD(AsyncPacketSocket*,
+ MOCK_METHOD(
+ std::unique_ptr<AsyncListenSocket>,
+ CreateServerTcpSocket,
+ (const Environment&, const SocketAddress&, uint16_t, uint16_t, int opts),
+ (override));
+ MOCK_METHOD(std::unique_ptr<AsyncPacketSocket>,
CreateClientTcpSocket,
- (const SocketAddress& local_address,
+ (const Environment&,
+ const SocketAddress& local_address,
const SocketAddress&,
const PacketSocketTcpOptions&),
(override));
diff --git a/third_party/libwebrtc/moz-patch-stack/s0027.patch b/third_party/libwebrtc/moz-patch-stack/s0027.patch
@@ -203,7 +203,7 @@ index 3efce2dd19..cbfc05f243 100644
}
diff --git a/api/BUILD.gn b/api/BUILD.gn
-index 042dccefd9..250b0bef76 100644
+index bdb7239070..04b8afc63d 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -44,6 +44,9 @@ rtc_library("enable_media") {
diff --git a/third_party/libwebrtc/moz-patch-stack/s0102.patch b/third_party/libwebrtc/moz-patch-stack/s0102.patch
@@ -126,7 +126,7 @@ index 771e0b196a..7e1e8353ab 100644
"Generated during 'gn gen' by //BUILD.gn.",
"",
diff --git a/api/BUILD.gn b/api/BUILD.gn
-index 250b0bef76..8eacf519ff 100644
+index 04b8afc63d..662d798bd0 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -8,8 +8,8 @@
diff --git a/third_party/libwebrtc/p2p/BUILD.gn b/third_party/libwebrtc/p2p/BUILD.gn
@@ -1254,6 +1254,7 @@ if (rtc_include_tests) {
"../api:local_network_access_permission",
"../api:mock_async_dns_resolver",
"../api:mock_local_network_access_permission",
+ "../api:mock_packet_socket_factory",
"../api:network_emulation_manager_api",
"../api:packet_socket_factory",
"../api:rtc_error",
diff --git a/third_party/libwebrtc/p2p/base/port_unittest.cc b/third_party/libwebrtc/p2p/base/port_unittest.cc
@@ -25,13 +25,13 @@
#include "absl/memory/memory.h"
#include "absl/strings/string_view.h"
#include "api/array_view.h"
-#include "api/async_dns_resolver.h"
#include "api/candidate.h"
#include "api/environment/environment.h"
#include "api/environment/environment_factory.h"
#include "api/field_trials.h"
#include "api/packet_socket_factory.h"
#include "api/rtc_error.h"
+#include "api/test/mock_packet_socket_factory.h"
#include "api/test/rtc_error_matchers.h"
#include "api/transport/stun.h"
#include "api/units/time_delta.h"
@@ -85,6 +85,7 @@ using ::testing::Eq;
using ::testing::IsNull;
using ::testing::IsTrue;
using ::testing::NotNull;
+using ::testing::Return;
constexpr int kDefaultTimeout = 3000;
constexpr int kShortTimeout = 1000;
@@ -1124,60 +1125,6 @@ void PortTest::TestConnectivity(absl::string_view name1,
IsRtcOk());
}
-class FakePacketSocketFactory : public PacketSocketFactory {
- public:
- FakePacketSocketFactory()
- : next_udp_socket_(nullptr), next_server_tcp_socket_(nullptr) {}
- ~FakePacketSocketFactory() override {}
-
- AsyncPacketSocket* CreateUdpSocket(const SocketAddress& address,
- uint16_t min_port,
- uint16_t max_port) override {
- EXPECT_TRUE(next_udp_socket_ != nullptr);
- AsyncPacketSocket* result = next_udp_socket_;
- next_udp_socket_ = nullptr;
- return result;
- }
-
- AsyncListenSocket* CreateServerTcpSocket(const SocketAddress& local_address,
- uint16_t min_port,
- uint16_t max_port,
- int opts) override {
- EXPECT_TRUE(next_server_tcp_socket_ != nullptr);
- AsyncListenSocket* result = next_server_tcp_socket_;
- next_server_tcp_socket_ = nullptr;
- return result;
- }
-
- AsyncPacketSocket* CreateClientTcpSocket(
- const SocketAddress& local_address,
- const SocketAddress& remote_address,
- const PacketSocketTcpOptions& opts) override {
- EXPECT_TRUE(next_client_tcp_socket_.has_value());
- AsyncPacketSocket* result = *next_client_tcp_socket_;
- next_client_tcp_socket_ = nullptr;
- return result;
- }
-
- void set_next_udp_socket(AsyncPacketSocket* next_udp_socket) {
- next_udp_socket_ = next_udp_socket;
- }
- void set_next_server_tcp_socket(AsyncListenSocket* next_server_tcp_socket) {
- next_server_tcp_socket_ = next_server_tcp_socket;
- }
- void set_next_client_tcp_socket(AsyncPacketSocket* next_client_tcp_socket) {
- next_client_tcp_socket_ = next_client_tcp_socket;
- }
- std::unique_ptr<AsyncDnsResolverInterface> CreateAsyncDnsResolver() override {
- return nullptr;
- }
-
- private:
- AsyncPacketSocket* next_udp_socket_;
- AsyncListenSocket* next_server_tcp_socket_;
- std::optional<AsyncPacketSocket*> next_client_tcp_socket_;
-};
-
class FakeAsyncPacketSocket : public AsyncPacketSocket {
public:
// Returns current local address. Address may be set to NULL if the
@@ -1764,9 +1711,10 @@ TEST_F(PortTest, TestTcpNoDelay) {
TEST_F(PortTest, TestDelayedBindingUdp) {
FakeAsyncPacketSocket* socket = new FakeAsyncPacketSocket();
- FakePacketSocketFactory socket_factory;
+ MockPacketSocketFactory socket_factory;
- socket_factory.set_next_udp_socket(socket);
+ EXPECT_CALL(socket_factory, CreateUdpSocket)
+ .WillOnce(Return(absl::WrapUnique(socket)));
auto port = CreateUdpPort(kLocalAddr1, &socket_factory);
socket->set_state(AsyncPacketSocket::STATE_BINDING);
@@ -1781,12 +1729,12 @@ TEST_F(PortTest, TestDelayedBindingUdp) {
TEST_F(PortTest, TestDisableInterfaceOfTcpPort) {
FakeAsyncListenSocket* lsocket = new FakeAsyncListenSocket();
FakeAsyncListenSocket* rsocket = new FakeAsyncListenSocket();
- FakePacketSocketFactory socket_factory;
+ MockPacketSocketFactory socket_factory;
+ EXPECT_CALL(socket_factory, CreateServerTcpSocket)
+ .WillOnce(Return(absl::WrapUnique(lsocket)))
+ .WillOnce(Return(absl::WrapUnique(rsocket)));
- socket_factory.set_next_server_tcp_socket(lsocket);
auto lport = CreateTcpPort(kLocalAddr1, &socket_factory);
-
- socket_factory.set_next_server_tcp_socket(rsocket);
auto rport = CreateTcpPort(kLocalAddr2, &socket_factory);
lsocket->Bind(kLocalAddr1);
@@ -1805,7 +1753,8 @@ TEST_F(PortTest, TestDisableInterfaceOfTcpPort) {
FakeAsyncPacketSocket* socket = new FakeAsyncPacketSocket();
socket->local_address_ = kLocalAddr1;
socket->remote_address_ = kLocalAddr2;
- socket_factory.set_next_client_tcp_socket(socket);
+ EXPECT_CALL(socket_factory, CreateClientTcpSocket)
+ .WillOnce(Return(absl::WrapUnique(socket)));
Connection* lconn =
lport->CreateConnection(rport->Candidates()[0], Port::ORIGIN_MESSAGE);
ASSERT_NE(lconn, nullptr);
@@ -1816,14 +1765,14 @@ TEST_F(PortTest, TestDisableInterfaceOfTcpPort) {
socket->NotifyClosedForTest(1);
// And prevent new sockets from being created.
- socket_factory.set_next_client_tcp_socket(nullptr);
+ EXPECT_CALL(socket_factory, CreateClientTcpSocket).WillOnce(Return(nullptr));
// Test that Ping() does not cause SEGV.
lconn->Ping();
}
void PortTest::TestCrossFamilyPorts(int type) {
- FakePacketSocketFactory factory;
+ MockPacketSocketFactory factory;
std::unique_ptr<Port> ports[4];
SocketAddress addresses[4] = {
SocketAddress("192.168.1.3", 0), SocketAddress("192.168.1.4", 0),
@@ -1831,13 +1780,15 @@ void PortTest::TestCrossFamilyPorts(int type) {
for (int i = 0; i < 4; i++) {
if (type == SOCK_DGRAM) {
FakeAsyncPacketSocket* socket = new FakeAsyncPacketSocket();
- factory.set_next_udp_socket(socket);
+ EXPECT_CALL(factory, CreateUdpSocket)
+ .WillOnce(Return(absl::WrapUnique(socket)));
ports[i] = CreateUdpPort(addresses[i], &factory);
socket->set_state(AsyncPacketSocket::STATE_BINDING);
socket->SignalAddressReady(socket, addresses[i]);
} else if (type == SOCK_STREAM) {
FakeAsyncListenSocket* socket = new FakeAsyncListenSocket();
- factory.set_next_server_tcp_socket(socket);
+ EXPECT_CALL(factory, CreateServerTcpSocket)
+ .WillOnce(Return(absl::WrapUnique(socket)));
ports[i] = CreateTcpPort(addresses[i], &factory);
socket->Bind(addresses[i]);
}
@@ -1846,8 +1797,8 @@ void PortTest::TestCrossFamilyPorts(int type) {
// IPv4 Port, connects to IPv6 candidate and then to IPv4 candidate.
if (type == SOCK_STREAM) {
- FakeAsyncPacketSocket* clientsocket = new FakeAsyncPacketSocket();
- factory.set_next_client_tcp_socket(clientsocket);
+ EXPECT_CALL(factory, CreateClientTcpSocket)
+ .WillOnce(Return(std::make_unique<FakeAsyncPacketSocket>()));
}
Connection* c = ports[0]->CreateConnection(GetCandidate(ports[2].get()),
Port::ORIGIN_MESSAGE);
@@ -1860,8 +1811,8 @@ void PortTest::TestCrossFamilyPorts(int type) {
// IPv6 Port, connects to IPv4 candidate and to IPv6 candidate.
if (type == SOCK_STREAM) {
- FakeAsyncPacketSocket* clientsocket = new FakeAsyncPacketSocket();
- factory.set_next_client_tcp_socket(clientsocket);
+ EXPECT_CALL(factory, CreateClientTcpSocket)
+ .WillOnce(Return(std::make_unique<FakeAsyncPacketSocket>()));
}
c = ports[2]->CreateConnection(GetCandidate(ports[0].get()),
Port::ORIGIN_MESSAGE);
@@ -1893,14 +1844,15 @@ void PortTest::ExpectPortsCanConnect(bool can_connect, Port* p1, Port* p2) {
}
TEST_F(PortTest, TestUdpSingleAddressV6CrossTypePorts) {
- FakePacketSocketFactory factory;
+ MockPacketSocketFactory factory;
std::unique_ptr<Port> ports[4];
SocketAddress addresses[4] = {
SocketAddress("2001:db8::1", 0), SocketAddress("fe80::1", 0),
SocketAddress("fe80::2", 0), SocketAddress("::1", 0)};
for (int i = 0; i < 4; i++) {
FakeAsyncPacketSocket* socket = new FakeAsyncPacketSocket();
- factory.set_next_udp_socket(socket);
+ EXPECT_CALL(factory, CreateUdpSocket)
+ .WillOnce(Return(absl::WrapUnique(socket)));
ports[i] = CreateUdpPort(addresses[i], &factory);
socket->set_state(AsyncPacketSocket::STATE_BINDING);
socket->SignalAddressReady(socket, addresses[i]);
@@ -1923,7 +1875,7 @@ TEST_F(PortTest, TestUdpSingleAddressV6CrossTypePorts) {
}
TEST_F(PortTest, TestUdpMultipleAddressesV6CrossTypePorts) {
- FakePacketSocketFactory factory;
+ MockPacketSocketFactory factory;
std::unique_ptr<Port> ports[5];
SocketAddress addresses[5] = {
SocketAddress("2001:db8::1", 0), SocketAddress("2001:db8::2", 0),
@@ -1931,7 +1883,8 @@ TEST_F(PortTest, TestUdpMultipleAddressesV6CrossTypePorts) {
SocketAddress("::1", 0)};
for (int i = 0; i < 5; i++) {
FakeAsyncPacketSocket* socket = new FakeAsyncPacketSocket();
- factory.set_next_udp_socket(socket);
+ EXPECT_CALL(factory, CreateUdpSocket)
+ .WillOnce(Return(absl::WrapUnique(socket)));
ports[i] =
CreateUdpPortMultipleAddrs(addresses[i], kLinkLocalIPv6Addr, &factory);
ports[i]->SetIceTiebreaker(kTiebreakerDefault);
diff --git a/third_party/libwebrtc/pc/peer_connection_factory_unittest.cc b/third_party/libwebrtc/pc/peer_connection_factory_unittest.cc
@@ -25,6 +25,7 @@
#include "api/data_channel_interface.h"
#include "api/enable_media.h"
#include "api/enable_media_with_defaults.h"
+#include "api/environment/environment.h"
#include "api/environment/environment_factory.h"
#include "api/field_trials.h"
#include "api/field_trials_view.h"
@@ -713,12 +714,12 @@ TEST(PeerConnectionFactoryDependenciesTest, UsesPacketSocketFactory) {
std::make_unique<NiceMock<MockPacketSocketFactory>>();
Event called;
- EXPECT_CALL(*mock_socket_factory, CreateUdpSocket(_, _, _))
- .WillOnce(InvokeWithoutArgs([&] {
+ EXPECT_CALL(*mock_socket_factory, CreateUdpSocket)
+ .WillOnce([&] {
called.Set();
return nullptr;
- }))
- .WillRepeatedly(Return(nullptr));
+ })
+ .WillRepeatedly([] { return nullptr; });
PeerConnectionFactoryDependencies pcf_dependencies;
pcf_dependencies.packet_socket_factory = std::move(mock_socket_factory);
diff --git a/third_party/libwebrtc/test/network/emulated_turn_server.cc b/third_party/libwebrtc/test/network/emulated_turn_server.cc
@@ -49,21 +49,24 @@ class PacketSocketFactoryWrapper : public webrtc::PacketSocketFactory {
// This method is called from TurnServer when making a TURN ALLOCATION.
// It will create a socket on the `peer_` endpoint.
- webrtc::AsyncPacketSocket* CreateUdpSocket(
+ std::unique_ptr<webrtc::AsyncPacketSocket> CreateUdpSocket(
+ const webrtc::Environment& env,
const webrtc::SocketAddress& address,
uint16_t min_port,
uint16_t max_port) override {
- return turn_server_->CreatePeerSocket().release();
+ return turn_server_->CreatePeerSocket();
}
- webrtc::AsyncListenSocket* CreateServerTcpSocket(
+ std::unique_ptr<webrtc::AsyncListenSocket> CreateServerTcpSocket(
+ const webrtc::Environment& env,
const webrtc::SocketAddress& local_address,
uint16_t min_port,
uint16_t max_port,
int opts) override {
return nullptr;
}
- webrtc::AsyncPacketSocket* CreateClientTcpSocket(
+ std::unique_ptr<webrtc::AsyncPacketSocket> CreateClientTcpSocket(
+ const webrtc::Environment& env,
const webrtc::SocketAddress& local_address,
const webrtc::SocketAddress& remote_address,
const webrtc::PacketSocketTcpOptions& tcp_options) override {