commit fcce9e82102b0cc4f3af4dad68cdca0b0e8a8ba5
parent dbb79d6b0eaaef4784e4b80358434d1e0bea0dea
Author: Dan Baker <dbaker@mozilla.com>
Date: Thu, 20 Nov 2025 13:15:12 -0700
Bug 2000941 - Vendor libwebrtc from 7042a3b097
Upstream commit: https://webrtc.googlesource.com/src/+/7042a3b097e3d857ec49d617cf3314f28ba07568
Provide Environment when creating PacketSockets
Once always provided, PacketSocket classes will be able to use
Environment to query propagated clock.
Bug: webrtc:42223992
Change-Id: I18b40694ae4598f9026b9fe3693a2e42e45e24aa
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407282
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45549}
Diffstat:
12 files changed, 84 insertions(+), 50 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-11-20T20:12:32.214943+00:00.
+libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-11-20T20:14:58.471032+00:00.
# base of lastest vendoring
-8507904a9e
+7042a3b097
diff --git a/third_party/libwebrtc/api/BUILD.gn b/third_party/libwebrtc/api/BUILD.gn
@@ -182,7 +182,6 @@ rtc_library("media_stream_interface") {
":audio_options_api",
":make_ref_counted",
":ref_count",
- ":ref_count",
":rtp_parameters",
":scoped_refptr",
":sequence_checker",
@@ -510,6 +509,8 @@ rtc_source_set("packet_socket_factory") {
"../rtc_base:socket_address",
"../rtc_base:ssl",
"../rtc_base/system:rtc_export",
+ "environment",
+ "//third_party/abseil-cpp/absl/memory",
]
}
diff --git a/third_party/libwebrtc/api/packet_socket_factory.h b/third_party/libwebrtc/api/packet_socket_factory.h
@@ -16,7 +16,9 @@
#include <string>
#include <vector>
+#include "absl/memory/memory.h"
#include "api/async_dns_resolver.h"
+#include "api/environment/environment.h"
#include "rtc_base/async_packet_socket.h"
#include "rtc_base/socket_address.h"
#include "rtc_base/ssl_certificate.h"
@@ -52,8 +54,42 @@ class RTC_EXPORT PacketSocketFactory {
};
PacketSocketFactory() = default;
+
+ PacketSocketFactory(const PacketSocketFactory&) = delete;
+ PacketSocketFactory& operator=(const PacketSocketFactory&) = delete;
+
virtual ~PacketSocketFactory() = default;
+ virtual std::unique_ptr<AsyncPacketSocket> CreateUdpSocket(
+ const Environment& /*env*/,
+ const SocketAddress& address,
+ uint16_t min_port,
+ uint16_t max_port) {
+ return absl::WrapUnique(CreateUdpSocket(address, min_port, max_port));
+ }
+
+ virtual std::unique_ptr<AsyncListenSocket> CreateServerTcpSocket(
+ const Environment& /*env*/,
+ const SocketAddress& local_address,
+ uint16_t min_port,
+ uint16_t max_port,
+ int opts) {
+ return absl::WrapUnique(
+ CreateServerTcpSocket(local_address, min_port, max_port, opts));
+ }
+
+ virtual std::unique_ptr<AsyncPacketSocket> CreateClientTcpSocket(
+ const Environment& /*env*/,
+ const SocketAddress& local_address,
+ const SocketAddress& remote_address,
+ const PacketSocketTcpOptions& tcp_options) {
+ return absl::WrapUnique(
+ CreateClientTcpSocket(local_address, remote_address, tcp_options));
+ }
+
+ // TODO: bugs.webrtc.org/42223992 - deprecate all 3 CreateSomeSocket functions
+ // below when WebRTC and downstream users are updated to always provide
+ // Environment to construct a packet socket.
virtual AsyncPacketSocket* CreateUdpSocket(const SocketAddress& address,
uint16_t min_port,
uint16_t max_port) = 0;
@@ -70,10 +106,6 @@ class RTC_EXPORT PacketSocketFactory {
virtual std::unique_ptr<AsyncDnsResolverInterface>
CreateAsyncDnsResolver() = 0;
-
- private:
- PacketSocketFactory(const PacketSocketFactory&) = delete;
- PacketSocketFactory& operator=(const PacketSocketFactory&) = delete;
};
} // namespace webrtc
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 eefa01c4ad..0a99f22d21 100644
+index f7aa830397..609a24ab27 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -44,6 +44,9 @@ rtc_library("enable_media") {
@@ -225,7 +225,7 @@ index eefa01c4ad..0a99f22d21 100644
rtc_library("create_peerconnection_factory") {
visibility = [ "*" ]
allow_poison = [ "environment_construction" ]
-@@ -245,6 +248,10 @@ rtc_source_set("ice_transport_interface") {
+@@ -244,6 +247,10 @@ rtc_source_set("ice_transport_interface") {
}
rtc_library("dtls_transport_interface") {
@@ -236,7 +236,7 @@ index eefa01c4ad..0a99f22d21 100644
visibility = [ "*" ]
sources = [
-@@ -261,6 +268,7 @@ rtc_library("dtls_transport_interface") {
+@@ -260,6 +267,7 @@ rtc_library("dtls_transport_interface") {
"//third_party/abseil-cpp/absl/base:core_headers",
]
}
@@ -244,7 +244,7 @@ index eefa01c4ad..0a99f22d21 100644
rtc_library("dtmf_sender_interface") {
visibility = [ "*" ]
-@@ -273,6 +281,10 @@ rtc_library("dtmf_sender_interface") {
+@@ -272,6 +280,10 @@ rtc_library("dtmf_sender_interface") {
}
rtc_library("rtp_sender_interface") {
@@ -255,7 +255,7 @@ index eefa01c4ad..0a99f22d21 100644
visibility = [ "*" ]
sources = [
-@@ -287,6 +299,7 @@ rtc_library("rtp_sender_interface") {
+@@ -286,6 +298,7 @@ rtc_library("rtp_sender_interface") {
":ref_count",
":rtc_error",
":rtp_parameters",
@@ -263,7 +263,7 @@ index eefa01c4ad..0a99f22d21 100644
":scoped_refptr",
"../rtc_base:checks",
"../rtc_base/system:rtc_export",
-@@ -295,8 +308,23 @@ rtc_library("rtp_sender_interface") {
+@@ -294,8 +307,23 @@ rtc_library("rtp_sender_interface") {
"//third_party/abseil-cpp/absl/functional:any_invocable",
]
}
@@ -287,7 +287,7 @@ index eefa01c4ad..0a99f22d21 100644
visibility = [ "*" ]
cflags = []
sources = [
-@@ -423,6 +451,7 @@ rtc_library("libjingle_peerconnection_api") {
+@@ -422,6 +450,7 @@ rtc_library("libjingle_peerconnection_api") {
"../rtc_base/system:rtc_export",
]
}
@@ -295,7 +295,7 @@ index eefa01c4ad..0a99f22d21 100644
rtc_library("frame_transformer_interface") {
visibility = [ "*" ]
-@@ -642,6 +671,7 @@ rtc_source_set("peer_network_dependencies") {
+@@ -643,6 +672,7 @@ rtc_source_set("peer_network_dependencies") {
}
rtc_source_set("peer_connection_quality_test_fixture_api") {
@@ -303,7 +303,7 @@ index eefa01c4ad..0a99f22d21 100644
visibility = [ "*" ]
testonly = true
sources = [ "test/peerconnection_quality_test_fixture.h" ]
-@@ -686,6 +716,7 @@ rtc_source_set("peer_connection_quality_test_fixture_api") {
+@@ -687,6 +717,7 @@ rtc_source_set("peer_connection_quality_test_fixture_api") {
"//third_party/abseil-cpp/absl/strings:string_view",
]
}
@@ -311,7 +311,7 @@ index eefa01c4ad..0a99f22d21 100644
rtc_library("frame_generator_api") {
visibility = [ "*" ]
-@@ -791,6 +822,7 @@ rtc_library("create_frame_generator") {
+@@ -792,6 +823,7 @@ rtc_library("create_frame_generator") {
]
}
@@ -319,7 +319,7 @@ index eefa01c4ad..0a99f22d21 100644
rtc_library("create_peer_connection_quality_test_frame_generator") {
visibility = [ "*" ]
testonly = true
-@@ -808,6 +840,7 @@ rtc_library("create_peer_connection_quality_test_frame_generator") {
+@@ -809,6 +841,7 @@ rtc_library("create_peer_connection_quality_test_frame_generator") {
"units:time_delta",
]
}
@@ -327,7 +327,7 @@ index eefa01c4ad..0a99f22d21 100644
rtc_source_set("data_channel_event_observer_interface") {
visibility = [ "*" ]
-@@ -1000,6 +1033,7 @@ rtc_source_set("refcountedbase") {
+@@ -1001,6 +1034,7 @@ rtc_source_set("refcountedbase") {
}
rtc_library("ice_transport_factory") {
@@ -335,7 +335,7 @@ index eefa01c4ad..0a99f22d21 100644
visibility = [ "*" ]
sources = [
"ice_transport_factory.cc",
-@@ -1023,6 +1057,7 @@ rtc_library("ice_transport_factory") {
+@@ -1024,6 +1058,7 @@ rtc_library("ice_transport_factory") {
"rtc_event_log",
]
}
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 0a99f22d21..7ab24eafb1 100644
+index 609a24ab27..9fec3ec05d 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
@@ -154,6 +154,7 @@ rtc_library("basic_port_allocator") {
"../rtc_base:net_helpers",
"../rtc_base:network",
"../rtc_base:network_constants",
+ "../rtc_base:platform_thread_types",
"../rtc_base:socket_address",
"../rtc_base:stringutils",
"../rtc_base:threading",
diff --git a/third_party/libwebrtc/p2p/base/stun_port.cc b/third_party/libwebrtc/p2p/base/stun_port.cc
@@ -216,8 +216,10 @@ bool UDPPort::Init() {
stun_keepalive_lifetime_ = GetStunKeepaliveLifetime();
if (!SharedSocket()) {
RTC_DCHECK(socket_ == nullptr);
- socket_ = socket_factory()->CreateUdpSocket(
- SocketAddress(Network()->GetBestIP(), 0), min_port(), max_port());
+ owned_socket_ = socket_factory()->CreateUdpSocket(
+ env(), SocketAddress(Network()->GetBestIP(), 0), min_port(),
+ max_port());
+ socket_ = owned_socket_.get();
if (!socket_) {
RTC_LOG(LS_WARNING) << ToString() << ": UDP socket creation failed";
return false;
@@ -233,10 +235,7 @@ bool UDPPort::Init() {
return true;
}
-UDPPort::~UDPPort() {
- if (!SharedSocket())
- delete socket_;
-}
+UDPPort::~UDPPort() = default;
void UDPPort::PrepareAddress() {
RTC_DCHECK(request_manager_.empty());
diff --git a/third_party/libwebrtc/p2p/base/stun_port.h b/third_party/libwebrtc/p2p/base/stun_port.h
@@ -232,7 +232,9 @@ class RTC_EXPORT UDPPort : public Port {
ServerAddresses bind_request_succeeded_servers_;
ServerAddresses bind_request_failed_servers_;
StunRequestManager request_manager_;
+
AsyncPacketSocket* socket_;
+ std::unique_ptr<AsyncPacketSocket> owned_socket_;
int error_;
int send_error_count_ = 0;
std::unique_ptr<AddressResolver> resolver_;
diff --git a/third_party/libwebrtc/p2p/base/tcp_port.cc b/third_party/libwebrtc/p2p/base/tcp_port.cc
@@ -73,7 +73,6 @@
#include <utility>
#include "absl/algorithm/container.h"
-#include "absl/memory/memory.h"
#include "absl/strings/string_view.h"
#include "api/candidate.h"
#include "api/environment/environment.h"
@@ -299,9 +298,9 @@ void TCPPort::OnNewConnection(AsyncListenSocket* socket,
}
void TCPPort::TryCreateServerSocket() {
- listen_socket_ = absl::WrapUnique(socket_factory()->CreateServerTcpSocket(
- SocketAddress(Network()->GetBestIP(), 0), min_port(), max_port(),
- false /* ssl */));
+ listen_socket_ = socket_factory()->CreateServerTcpSocket(
+ env(), SocketAddress(Network()->GetBestIP(), 0), min_port(), max_port(),
+ /*opts=*/0);
if (!listen_socket_) {
RTC_LOG(LS_WARNING)
<< ToString()
@@ -599,9 +598,9 @@ void TCPConnection::CreateOutgoingTcpSocket() {
PacketSocketTcpOptions tcp_opts;
tcp_opts.opts = opts;
- socket_.reset(port()->socket_factory()->CreateClientTcpSocket(
- SocketAddress(port()->Network()->GetBestIP(), 0),
- remote_candidate().address(), tcp_opts));
+ socket_ = port()->socket_factory()->CreateClientTcpSocket(
+ env(), SocketAddress(port()->Network()->GetBestIP(), 0),
+ remote_candidate().address(), tcp_opts);
if (socket_) {
RTC_LOG(LS_VERBOSE) << ToString() << ": Connecting from "
<< socket_->GetLocalAddress().ToSensitiveString()
diff --git a/third_party/libwebrtc/p2p/base/turn_port.cc b/third_party/libwebrtc/p2p/base/turn_port.cc
@@ -300,10 +300,6 @@ TurnPort::~TurnPort() {
if (socket_)
socket_->UnsubscribeCloseEvent(this);
-
- if (!SharedSocket()) {
- delete socket_;
- }
}
void TurnPort::set_realm(absl::string_view realm) {
@@ -437,8 +433,10 @@ bool TurnPort::CreateTurnClientSocket() {
RTC_DCHECK(!socket_ || SharedSocket());
if (server_address_.proto == PROTO_UDP && !SharedSocket()) {
- socket_ = socket_factory()->CreateUdpSocket(
- SocketAddress(Network()->GetBestIP(), 0), min_port(), max_port());
+ owned_socket_ = socket_factory()->CreateUdpSocket(
+ env(), SocketAddress(Network()->GetBestIP(), 0), min_port(),
+ max_port());
+ socket_ = owned_socket_.get();
} else if (server_address_.proto == PROTO_TCP ||
server_address_.proto == PROTO_TLS) {
RTC_DCHECK(!SharedSocket());
@@ -459,9 +457,10 @@ bool TurnPort::CreateTurnClientSocket() {
tcp_options.tls_alpn_protocols = tls_alpn_protocols_;
tcp_options.tls_elliptic_curves = tls_elliptic_curves_;
tcp_options.tls_cert_verifier = tls_cert_verifier_;
- socket_ = socket_factory()->CreateClientTcpSocket(
- SocketAddress(Network()->GetBestIP(), 0), server_address_.address,
- tcp_options);
+ owned_socket_ = socket_factory()->CreateClientTcpSocket(
+ env(), SocketAddress(Network()->GetBestIP(), 0),
+ server_address_.address, tcp_options);
+ socket_ = owned_socket_.get();
}
if (!socket_) {
@@ -589,9 +588,8 @@ void TurnPort::OnAllocateMismatch() {
if (SharedSocket()) {
ResetSharedSocket();
- } else {
- delete socket_;
}
+ owned_socket_ = nullptr;
socket_ = nullptr;
ResetNonce();
@@ -1017,7 +1015,7 @@ void TurnPort::TryAlternateServer() {
RTC_DCHECK(server_address().proto == PROTO_TCP ||
server_address().proto == PROTO_TLS);
RTC_DCHECK(!SharedSocket());
- delete socket_;
+ owned_socket_ = nullptr;
socket_ = nullptr;
PrepareAddress();
}
diff --git a/third_party/libwebrtc/p2p/base/turn_port.h b/third_party/libwebrtc/p2p/base/turn_port.h
@@ -326,6 +326,7 @@ class TurnPort : public Port {
AttemptedServerSet attempted_server_addresses_;
AsyncPacketSocket* socket_;
+ std::unique_ptr<AsyncPacketSocket> owned_socket_;
SocketOptionsMap socket_options_;
std::unique_ptr<AsyncDnsResolverInterface> resolver_;
int error_;
diff --git a/third_party/libwebrtc/p2p/client/basic_port_allocator.cc b/third_party/libwebrtc/p2p/client/basic_port_allocator.cc
@@ -46,10 +46,10 @@
#include "rtc_base/ip_address.h"
#include "rtc_base/logging.h"
#include "rtc_base/net_helper.h"
-#include "rtc_base/net_helpers.h"
#include "rtc_base/network.h"
#include "rtc_base/network/received_packet.h"
#include "rtc_base/network_constants.h"
+#include "rtc_base/platform_thread_types.h"
#include "rtc_base/socket_address.h"
#include "rtc_base/strings/string_builder.h"
#include "rtc_base/thread.h"
@@ -1268,9 +1268,10 @@ AllocationSequence::AllocationSequence(
void AllocationSequence::Init() {
if (IsFlagSet(PORTALLOCATOR_ENABLE_SHARED_SOCKET)) {
- udp_socket_.reset(session_->socket_factory()->CreateUdpSocket(
- SocketAddress(network_->GetBestIP(), 0),
- session_->allocator()->min_port(), session_->allocator()->max_port()));
+ BasicPortAllocator& allocator = *session_->allocator();
+ udp_socket_ = session_->socket_factory()->CreateUdpSocket(
+ allocator.env(), SocketAddress(network_->GetBestIP(), 0),
+ allocator.min_port(), allocator.max_port());
if (udp_socket_) {
udp_socket_->RegisterReceivedPacketCallback(
[&](AsyncPacketSocket* socket, const ReceivedIpPacket& packet) {