tor-browser

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

commit 8ee52a2d34dc565d21f3f81e5fadfe3fd70c90ff
parent d7044f62e19dd3df1a2c22fc1bb849f40b6f060e
Author: Dan Baker <dbaker@mozilla.com>
Date:   Mon,  1 Dec 2025 19:34:56 -0700

Bug 2000941 - Vendor libwebrtc from dc5f3e9b89

Upstream commit: https://webrtc.googlesource.com/src/+/dc5f3e9b8995a91be395db949c2c0984d7424a4d
    Propagate Environment through BasicPacketSocketFactory

    Update nearby code that pass pointers with ownership to use unique_ptr

    Bug: webrtc:42223992
    Change-Id: Ie602a724007f0bcf155265ea454e13e0c4513141
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408906
    Reviewed-by: Harald Alvestrand <hta@webrtc.org>
    Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45625}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Mthird_party/libwebrtc/p2p/BUILD.gn | 1+
Mthird_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc | 4----
Mthird_party/libwebrtc/p2p/base/async_stun_tcp_socket.h | 3---
Mthird_party/libwebrtc/p2p/base/async_stun_tcp_socket_unittest.cc | 10+++-------
Mthird_party/libwebrtc/p2p/base/basic_packet_socket_factory.cc | 61++++++++++++++++++++++++++++++-------------------------------
Mthird_party/libwebrtc/p2p/base/basic_packet_socket_factory.h | 24+++++++++++++++---------
Mthird_party/libwebrtc/p2p/test/turn_server_unittest.cc | 11+++++++----
Mthird_party/libwebrtc/rtc_base/async_tcp_socket.cc | 12+++++++-----
Mthird_party/libwebrtc/rtc_base/async_tcp_socket.h | 7+++++--
Mthird_party/libwebrtc/rtc_tools/network_tester/test_controller.cc | 5++---
11 files changed, 72 insertions(+), 70 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-02T02:31:53.214353+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T02:34:37.298808+00:00. # base of lastest vendoring -bb6b3aab15 +dc5f3e9b89 diff --git a/third_party/libwebrtc/p2p/BUILD.gn b/third_party/libwebrtc/p2p/BUILD.gn @@ -108,6 +108,7 @@ rtc_library("basic_packet_socket_factory") { ":async_stun_tcp_socket", "../api:async_dns_resolver", "../api:packet_socket_factory", + "../api/environment", "../rtc_base:async_dns_resolver", "../rtc_base:async_packet_socket", "../rtc_base:async_tcp_socket", diff --git a/third_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc b/third_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc @@ -17,7 +17,6 @@ #include <utility> #include "absl/base/nullability.h" -#include "absl/memory/memory.h" #include "api/array_view.h" #include "api/environment/environment.h" #include "api/transport/stun.h" @@ -52,9 +51,6 @@ AsyncStunTCPSocket::AsyncStunTCPSocket( absl_nonnull std::unique_ptr<Socket> socket) : AsyncTCPSocketBase(std::move(socket), kBufSize) {} -AsyncStunTCPSocket::AsyncStunTCPSocket(Socket* socket) - : AsyncTCPSocketBase(absl::WrapUnique(socket), kBufSize) {} - int AsyncStunTCPSocket::Send(const void* pv, size_t cb, const AsyncSocketPacketOptions& options) { diff --git a/third_party/libwebrtc/p2p/base/async_stun_tcp_socket.h b/third_party/libwebrtc/p2p/base/async_stun_tcp_socket.h @@ -28,9 +28,6 @@ class AsyncStunTCPSocket : public AsyncTCPSocketBase { public: AsyncStunTCPSocket(const Environment& env, absl_nonnull std::unique_ptr<Socket> socket); - // TODO: bugs.webrtc.org/42223992 - Delete or deprecate constructor below when - // WebRTC is updated to use constructor that provides Environment. - explicit AsyncStunTCPSocket(Socket* socket); AsyncStunTCPSocket(const AsyncStunTCPSocket&) = delete; AsyncStunTCPSocket& operator=(const AsyncStunTCPSocket&) = delete; diff --git a/third_party/libwebrtc/p2p/base/async_stun_tcp_socket_unittest.cc b/third_party/libwebrtc/p2p/base/async_stun_tcp_socket_unittest.cc @@ -74,14 +74,10 @@ class AsyncStunServerTCPSocket : public AsyncTcpListenSocket { public: AsyncStunServerTCPSocket(const Environment& env, std::unique_ptr<Socket> socket) - : AsyncTcpListenSocket(std::move(socket)), env_(env) {} - void HandleIncomingConnection(Socket* socket) override { - SignalNewConnection(this, - new AsyncStunTCPSocket(env_, absl::WrapUnique(socket))); + : AsyncTcpListenSocket(env, std::move(socket)) {} + void HandleIncomingConnection(std::unique_ptr<Socket> socket) override { + SignalNewConnection(this, new AsyncStunTCPSocket(env(), std::move(socket))); } - - private: - const Environment env_; }; class AsyncStunTCPSocketTest : public ::testing::Test, diff --git a/third_party/libwebrtc/p2p/base/basic_packet_socket_factory.cc b/third_party/libwebrtc/p2p/base/basic_packet_socket_factory.cc @@ -13,9 +13,11 @@ #include <cstdint> #include <memory> #include <string> +#include <utility> #include "absl/memory/memory.h" #include "api/async_dns_resolver.h" +#include "api/environment/environment.h" #include "api/packet_socket_factory.h" #include "p2p/base/async_stun_tcp_socket.h" #include "rtc_base/async_dns_resolver.h" @@ -38,24 +40,27 @@ BasicPacketSocketFactory::BasicPacketSocketFactory( BasicPacketSocketFactory::~BasicPacketSocketFactory() {} -AsyncPacketSocket* BasicPacketSocketFactory::CreateUdpSocket( +std::unique_ptr<AsyncPacketSocket> BasicPacketSocketFactory::CreateUdpSocket( + const Environment& env, const SocketAddress& address, uint16_t min_port, uint16_t max_port) { // UDP sockets are simple. - Socket* socket = socket_factory_->CreateSocket(address.family(), SOCK_DGRAM); + std::unique_ptr<Socket> socket = + socket_factory_->Create(address.family(), SOCK_DGRAM); if (!socket) { return nullptr; } - if (BindSocket(socket, address, min_port, max_port) < 0) { + if (BindSocket(*socket, address, min_port, max_port) < 0) { RTC_LOG(LS_ERROR) << "UDP bind failed with error " << socket->GetError(); - delete socket; return nullptr; } - return new AsyncUDPSocket(socket); + return std::make_unique<AsyncUDPSocket>(env, std::move(socket)); } -AsyncListenSocket* BasicPacketSocketFactory::CreateServerTcpSocket( +std::unique_ptr<AsyncListenSocket> +BasicPacketSocketFactory::CreateServerTcpSocket( + const Environment& env, const SocketAddress& local_address, uint16_t min_port, uint16_t max_port, @@ -70,34 +75,35 @@ AsyncListenSocket* BasicPacketSocketFactory::CreateServerTcpSocket( RTC_LOG(LS_ERROR) << "Fake TLS not supported."; return nullptr; } - Socket* socket = - socket_factory_->CreateSocket(local_address.family(), SOCK_STREAM); + std::unique_ptr<Socket> socket = + socket_factory_->Create(local_address.family(), SOCK_STREAM); if (!socket) { return nullptr; } - if (BindSocket(socket, local_address, min_port, max_port) < 0) { + if (BindSocket(*socket, local_address, min_port, max_port) < 0) { RTC_LOG(LS_ERROR) << "TCP bind failed with error " << socket->GetError(); - delete socket; return nullptr; } RTC_CHECK(!(opts & PacketSocketFactory::OPT_STUN)); - return new AsyncTcpListenSocket(absl::WrapUnique(socket)); + return std::make_unique<AsyncTcpListenSocket>(env, std::move(socket)); } -AsyncPacketSocket* BasicPacketSocketFactory::CreateClientTcpSocket( +std::unique_ptr<AsyncPacketSocket> +BasicPacketSocketFactory::CreateClientTcpSocket( + const Environment& env, const SocketAddress& local_address, const SocketAddress& remote_address, const PacketSocketTcpOptions& tcp_options) { - Socket* socket = - socket_factory_->CreateSocket(local_address.family(), SOCK_STREAM); + std::unique_ptr<Socket> socket = + socket_factory_->Create(local_address.family(), SOCK_STREAM); if (!socket) { return nullptr; } - if (BindSocket(socket, local_address, 0, 0) < 0) { + if (BindSocket(*socket, local_address, 0, 0) < 0) { // Allow BindSocket to fail if we're binding to the ANY address, since this // is mostly redundant in the first place. The socket will be bound when we // call Connect() instead. @@ -106,7 +112,6 @@ AsyncPacketSocket* BasicPacketSocketFactory::CreateClientTcpSocket( << "; ignoring since socket is using 'any' address."; } else { RTC_LOG(LS_ERROR) << "TCP bind failed with error " << socket->GetError(); - delete socket; return nullptr; } } @@ -130,7 +135,8 @@ AsyncPacketSocket* BasicPacketSocketFactory::CreateClientTcpSocket( if ((tlsOpts & PacketSocketFactory::OPT_TLS) || (tlsOpts & PacketSocketFactory::OPT_TLS_INSECURE)) { // Using TLS, wrap the socket in an SSL adapter. - SSLAdapter* ssl_adapter = SSLAdapter::Create(socket); + std::unique_ptr<SSLAdapter> ssl_adapter = + absl::WrapUnique(SSLAdapter::Create(socket.release())); if (!ssl_adapter) { return nullptr; } @@ -143,33 +149,26 @@ AsyncPacketSocket* BasicPacketSocketFactory::CreateClientTcpSocket( ssl_adapter->SetEllipticCurves(tcp_options.tls_elliptic_curves); ssl_adapter->SetCertVerifier(tcp_options.tls_cert_verifier); - socket = ssl_adapter; - if (ssl_adapter->StartSSL(remote_address.hostname().c_str()) != 0) { - delete ssl_adapter; return nullptr; } - + socket = std::move(ssl_adapter); } else if (tlsOpts & PacketSocketFactory::OPT_TLS_FAKE) { // Using fake TLS, wrap the TCP socket in a pseudo-SSL socket. - socket = new AsyncSSLSocket(socket); + socket = std::make_unique<AsyncSSLSocket>(socket.release()); } if (socket->Connect(remote_address) < 0) { RTC_LOG(LS_ERROR) << "TCP connect failed with error " << socket->GetError(); - delete socket; return nullptr; } // Finally, wrap that socket in a TCP or STUN TCP packet socket. - AsyncPacketSocket* tcp_socket; if (tcp_options.opts & PacketSocketFactory::OPT_STUN) { - tcp_socket = new AsyncStunTCPSocket(socket); + return std::make_unique<AsyncStunTCPSocket>(env, std::move(socket)); } else { - tcp_socket = new AsyncTCPSocket(socket); + return std::make_unique<AsyncTCPSocket>(env, std::move(socket)); } - - return tcp_socket; } std::unique_ptr<AsyncDnsResolverInterface> @@ -177,18 +176,18 @@ BasicPacketSocketFactory::CreateAsyncDnsResolver() { return std::make_unique<AsyncDnsResolver>(); } -int BasicPacketSocketFactory::BindSocket(Socket* socket, +int BasicPacketSocketFactory::BindSocket(Socket& socket, const SocketAddress& local_address, uint16_t min_port, uint16_t max_port) { int ret = -1; if (min_port == 0 && max_port == 0) { // If there's no port range, let the OS pick a port for us. - ret = socket->Bind(local_address); + ret = socket.Bind(local_address); } else { // Otherwise, try to find a port in the provided range. for (int port = min_port; ret < 0 && port <= max_port; ++port) { - ret = socket->Bind(SocketAddress(local_address.ipaddr(), port)); + ret = socket.Bind(SocketAddress(local_address.ipaddr(), port)); } } return ret; diff --git a/third_party/libwebrtc/p2p/base/basic_packet_socket_factory.h b/third_party/libwebrtc/p2p/base/basic_packet_socket_factory.h @@ -15,6 +15,7 @@ #include <memory> #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.h" @@ -29,14 +30,19 @@ class RTC_EXPORT BasicPacketSocketFactory : public PacketSocketFactory { explicit BasicPacketSocketFactory(SocketFactory* socket_factory); ~BasicPacketSocketFactory() override; - AsyncPacketSocket* CreateUdpSocket(const SocketAddress& local_address, - uint16_t min_port, - uint16_t max_port) override; - AsyncListenSocket* CreateServerTcpSocket(const SocketAddress& local_address, - uint16_t min_port, - uint16_t max_port, - int opts) override; - AsyncPacketSocket* CreateClientTcpSocket( + std::unique_ptr<AsyncPacketSocket> CreateUdpSocket( + const Environment& env, + const SocketAddress& local_address, + uint16_t min_port, + uint16_t max_port) override; + std::unique_ptr<AsyncListenSocket> CreateServerTcpSocket( + const Environment& env, + const SocketAddress& local_address, + uint16_t min_port, + uint16_t max_port, + int opts) override; + std::unique_ptr<AsyncPacketSocket> CreateClientTcpSocket( + const Environment& env, const SocketAddress& local_address, const SocketAddress& remote_address, const PacketSocketTcpOptions& tcp_options) override; @@ -44,7 +50,7 @@ class RTC_EXPORT BasicPacketSocketFactory : public PacketSocketFactory { std::unique_ptr<AsyncDnsResolverInterface> CreateAsyncDnsResolver() override; private: - int BindSocket(Socket* socket, + int BindSocket(Socket& socket, const SocketAddress& local_address, uint16_t min_port, uint16_t max_port); diff --git a/third_party/libwebrtc/p2p/test/turn_server_unittest.cc b/third_party/libwebrtc/p2p/test/turn_server_unittest.cc @@ -12,12 +12,14 @@ #include <memory> +#include "api/environment/environment.h" #include "p2p/base/basic_packet_socket_factory.h" #include "p2p/base/port_interface.h" #include "rtc_base/async_packet_socket.h" #include "rtc_base/socket_address.h" #include "rtc_base/thread.h" #include "rtc_base/virtual_socket_server.h" +#include "test/create_test_environment.h" #include "test/gtest.h" // NOTE: This is a work in progress. Currently this file only has tests for @@ -51,10 +53,11 @@ class TurnServerConnectionTest : public ::testing::Test { }; TEST_F(TurnServerConnectionTest, ComparisonOperators) { - std::unique_ptr<AsyncPacketSocket> socket1( - socket_factory_.CreateUdpSocket(SocketAddress("1.1.1.1", 1), 0, 0)); - std::unique_ptr<AsyncPacketSocket> socket2( - socket_factory_.CreateUdpSocket(SocketAddress("2.2.2.2", 2), 0, 0)); + const Environment env = CreateTestEnvironment(); + std::unique_ptr<AsyncPacketSocket> socket1 = + socket_factory_.CreateUdpSocket(env, SocketAddress("1.1.1.1", 1), 0, 0); + std::unique_ptr<AsyncPacketSocket> socket2 = + socket_factory_.CreateUdpSocket(env, SocketAddress("2.2.2.2", 2), 0, 0); TurnServerConnection connection1(socket2->GetLocalAddress(), PROTO_UDP, socket1.get()); TurnServerConnection connection2(socket2->GetLocalAddress(), PROTO_UDP, diff --git a/third_party/libwebrtc/rtc_base/async_tcp_socket.cc b/third_party/libwebrtc/rtc_base/async_tcp_socket.cc @@ -293,8 +293,9 @@ size_t AsyncTCPSocket::ProcessInput(ArrayView<const uint8_t> data) { } } -AsyncTcpListenSocket::AsyncTcpListenSocket(std::unique_ptr<Socket> socket) - : socket_(std::move(socket)) { +AsyncTcpListenSocket::AsyncTcpListenSocket(const Environment& env, + std::unique_ptr<Socket> socket) + : env_(env), socket_(std::move(socket)) { RTC_DCHECK(socket_.get() != nullptr); socket_->SignalReadEvent.connect(this, &AsyncTcpListenSocket::OnReadEvent); if (socket_->Listen(kListenBacklog) < 0) { @@ -330,14 +331,15 @@ void AsyncTcpListenSocket::OnReadEvent(Socket* socket) { return; } - HandleIncomingConnection(new_socket); + HandleIncomingConnection(absl::WrapUnique(new_socket)); // Prime a read event in case data is waiting. new_socket->SignalReadEvent(new_socket); } -void AsyncTcpListenSocket::HandleIncomingConnection(Socket* socket) { - SignalNewConnection(this, new AsyncTCPSocket(socket)); +void AsyncTcpListenSocket::HandleIncomingConnection( + std::unique_ptr<Socket> socket) { + SignalNewConnection(this, new AsyncTCPSocket(env_, std::move(socket))); } } // namespace webrtc diff --git a/third_party/libwebrtc/rtc_base/async_tcp_socket.h b/third_party/libwebrtc/rtc_base/async_tcp_socket.h @@ -101,17 +101,20 @@ class AsyncTCPSocket : public AsyncTCPSocketBase { class AsyncTcpListenSocket : public AsyncListenSocket { public: - explicit AsyncTcpListenSocket(std::unique_ptr<Socket> socket); + AsyncTcpListenSocket(const Environment& env, std::unique_ptr<Socket> socket); State GetState() const override; SocketAddress GetLocalAddress() const override; - virtual void HandleIncomingConnection(Socket* socket); + protected: + const Environment& env() const { return env_; } private: // Called by the underlying socket void OnReadEvent(Socket* socket); + virtual void HandleIncomingConnection(std::unique_ptr<Socket> socket); + const Environment env_; std::unique_ptr<Socket> socket_; }; diff --git a/third_party/libwebrtc/rtc_tools/network_tester/test_controller.cc b/third_party/libwebrtc/rtc_tools/network_tester/test_controller.cc @@ -54,9 +54,8 @@ TestController::TestController(const Environment& env, packet_sender_thread_->Start(); packet_sender_thread_->BlockingCall([&] { RTC_DCHECK_RUN_ON(packet_sender_thread_.get()); - udp_socket_ = - std::unique_ptr<AsyncPacketSocket>(socket_factory_.CreateUdpSocket( - SocketAddress(GetAnyIP(AF_INET), 0), min_port, max_port)); + udp_socket_ = socket_factory_.CreateUdpSocket( + env_, SocketAddress(GetAnyIP(AF_INET), 0), min_port, max_port); RTC_CHECK(udp_socket_ != nullptr); udp_socket_->RegisterReceivedPacketCallback( [&](AsyncPacketSocket* socket, const ReceivedIpPacket& packet) {