tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Mthird_party/libwebrtc/api/BUILD.gn | 3++-
Mthird_party/libwebrtc/api/packet_socket_factory.h | 40++++++++++++++++++++++++++++++++++++----
Mthird_party/libwebrtc/moz-patch-stack/s0027.patch | 26+++++++++++++-------------
Mthird_party/libwebrtc/moz-patch-stack/s0102.patch | 2+-
Mthird_party/libwebrtc/p2p/BUILD.gn | 1+
Mthird_party/libwebrtc/p2p/base/stun_port.cc | 11+++++------
Mthird_party/libwebrtc/p2p/base/stun_port.h | 2++
Mthird_party/libwebrtc/p2p/base/tcp_port.cc | 13++++++-------
Mthird_party/libwebrtc/p2p/base/turn_port.cc | 22++++++++++------------
Mthird_party/libwebrtc/p2p/base/turn_port.h | 1+
Mthird_party/libwebrtc/p2p/client/basic_port_allocator.cc | 9+++++----
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) {