tor-browser

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

commit be05fd6600917c65bc649411f5f7a6068599d49f
parent f9c3e9762292e951e2f7559ea05688eb893cf5fe
Author: Dan Baker <dbaker@mozilla.com>
Date:   Mon, 27 Oct 2025 17:29:16 -0600

Bug 1995393 - Vendor libwebrtc from 71dfd3bde9

We already cherry-picked this when we vendored 5dded01501.

Upstream commit: https://webrtc.googlesource.com/src/+/71dfd3bde9a7544c85874dc8f7c3603e7d3af391
    [M141] Revert "Propagate content name to ports at construction time, add sanity checks"

    Original change's description:
    > Revert "Propagate content name to ports at construction time, add sanity checks"
    >
    > I get a SIG_SEGV in basic_port_allocator.cc:AllocationSequence::OnReadPacket() on iOS. Reinstating the subscription to the OnPortDestroyedSignal for TURN ports fixes it but I'll leave it to the original author to determine what the correct approach is.
    >
    > This reverts commit 5dded01501f2e29e9f13de67dcf59d00dc2606de.
    >
    > Change-Id: I9c5497a1dbe1fc338aede54dd5e112e51cf40d5d
    > Bug: none
    > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407048
    > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
    > Commit-Queue: Peter Hanspers <peterhanspers@webrtc.org>
    > Cr-Commit-Position: refs/heads/main@{#45522}

    (cherry picked from commit 924e561d6370dbc7bc4e8ef9bffc984dd401b196)

    Bug: chromium:442851756,none
    Change-Id: I9c5497a1dbe1fc338aede54dd5e112e51cf40d5d
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407740
    Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
    Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
    Auto-Submit: Chrome Cherry Picker <chrome-cherry-picker@chops-service-accounts.iam.gserviceaccount.com>
    Cr-Commit-Position: refs/branch-heads/7390@{#1}
    Cr-Branched-From: 2f553bf8d573c90176d51559b76dfc836996c8f5-refs/heads/main@{#45520}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Dthird_party/libwebrtc/moz-patch-stack/71dfd3bde9.no-op-cherry-pick-msg | 1-
Dthird_party/libwebrtc/moz-patch-stack/p0001.patch | 423-------------------------------------------------------------------------------
3 files changed, 2 insertions(+), 426 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-10-27T23:27:05.491205+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-27T23:29:05.612817+00:00. # base of lastest vendoring -2f553bf8d5 +71dfd3bde9 diff --git a/third_party/libwebrtc/moz-patch-stack/71dfd3bde9.no-op-cherry-pick-msg b/third_party/libwebrtc/moz-patch-stack/71dfd3bde9.no-op-cherry-pick-msg @@ -1 +0,0 @@ -We already cherry-picked this when we vendored 5dded01501. diff --git a/third_party/libwebrtc/moz-patch-stack/p0001.patch b/third_party/libwebrtc/moz-patch-stack/p0001.patch @@ -1,423 +0,0 @@ -From: Daniel Baker <dbaker@mozilla.com> -Date: Mon, 27 Oct 2025 17:11:17 -0600 -Subject: (tmp-cherry-pick) [M141] Revert "Propagate content name to ports at - construction time, add sanity checks" (71dfd3bde9) - -Original change's description: -> Revert "Propagate content name to ports at construction time, add sanity checks" -> -> I get a SIG_SEGV in basic_port_allocator.cc:AllocationSequence::OnReadPacket() on iOS. Reinstating the subscription to the OnPortDestroyedSignal for TURN ports fixes it but I'll leave it to the original author to determine what the correct approach is. -> -> This reverts commit 5dded01501f2e29e9f13de67dcf59d00dc2606de. -> -> Change-Id: I9c5497a1dbe1fc338aede54dd5e112e51cf40d5d -> Bug: none -> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407048 -> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> -> Commit-Queue: Peter Hanspers <peterhanspers@webrtc.org> -> Cr-Commit-Position: refs/heads/main@{#45522} - -(cherry picked from commit 924e561d6370dbc7bc4e8ef9bffc984dd401b196) - -Bug: chromium:442851756,none -Change-Id: I9c5497a1dbe1fc338aede54dd5e112e51cf40d5d -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407740 -Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> -Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> -Auto-Submit: Chrome Cherry Picker <chrome-cherry-picker@chops-service-accounts.iam.gserviceaccount.com> -Cr-Commit-Position: refs/branch-heads/7390@{#1} -Cr-Branched-From: 2f553bf8d573c90176d51559b76dfc836996c8f5-refs/heads/main@{#45520} ---- - p2p/base/connection.cc | 4 --- - p2p/base/connection.h | 22 ++++---------- - p2p/base/p2p_transport_channel.cc | 15 +++++----- - p2p/base/p2p_transport_channel.h | 4 +-- - p2p/base/port.cc | 1 - - p2p/base/port.h | 1 - - p2p/base/port_allocator.cc | 4 +-- - p2p/base/port_allocator.h | 10 +------ - p2p/base/port_allocator_unittest.cc | 1 - - p2p/base/turn_port.h | 2 -- - p2p/client/basic_port_allocator.cc | 35 ++++++++++++----------- - p2p/client/basic_port_allocator.h | 5 +--- - p2p/client/relay_port_factory_interface.h | 1 - - 13 files changed, 38 insertions(+), 67 deletions(-) - -diff --git a/p2p/base/connection.cc b/p2p/base/connection.cc -index 577e4b0d3f..1afd41bfaa 100644 ---- a/p2p/base/connection.cc -+++ b/p2p/base/connection.cc -@@ -287,19 +287,16 @@ const Candidate& Connection::remote_candidate() const { - } - - const Network* Connection::network() const { -- RTC_DCHECK_RUN_ON(network_thread_); - RTC_DCHECK(port_) << ToDebugId() << ": port_ null in network()"; - return port()->Network(); - } - - int Connection::generation() const { -- RTC_DCHECK_RUN_ON(network_thread_); - RTC_DCHECK(port_) << ToDebugId() << ": port_ null in generation()"; - return port()->generation(); - } - - uint64_t Connection::priority() const { -- RTC_DCHECK_RUN_ON(network_thread_); - RTC_DCHECK(port_) << ToDebugId() << ": port_ null in priority()"; - if (!port_) - return 0; -@@ -1394,7 +1391,6 @@ std::string Connection::ToDebugId() const { - } - - uint32_t Connection::ComputeNetworkCost() const { -- RTC_DCHECK_RUN_ON(network_thread_); - // TODO(honghaiz): Will add rtt as part of the network cost. - RTC_DCHECK(port_) << ToDebugId() << ": port_ null in ComputeNetworkCost()"; - return port()->network_cost() + remote_candidate_.network_cost(); -diff --git a/p2p/base/connection.h b/p2p/base/connection.h -index 1cb0c20424..55de3f9bc9 100644 ---- a/p2p/base/connection.h -+++ b/p2p/base/connection.h -@@ -117,10 +117,7 @@ class RTC_EXPORT Connection : public CandidatePairInterface { - bool connected() const; - bool weak() const; - bool active() const; -- bool pending_delete() const { -- RTC_DCHECK_RUN_ON(network_thread_); -- return !port_; -- } -+ bool pending_delete() const { return !port_; } - - // A connection is dead if it can be safely deleted. - bool dead(Timestamp now) const; -@@ -394,14 +391,8 @@ class RTC_EXPORT Connection : public CandidatePairInterface { - void SendResponseMessage(const StunMessage& response); - - // An accessor for unit tests. -- PortInterface* PortForTest() { -- RTC_DCHECK_RUN_ON(network_thread_); -- return port_.get(); -- } -- const PortInterface* PortForTest() const { -- RTC_DCHECK_RUN_ON(network_thread_); -- return port_.get(); -- } -+ PortInterface* PortForTest() { return port_.get(); } -+ const PortInterface* PortForTest() const { return port_.get(); } - - std::unique_ptr<IceMessage> BuildPingRequestForTest() { - RTC_DCHECK_RUN_ON(network_thread_); -@@ -487,10 +478,7 @@ class RTC_EXPORT Connection : public CandidatePairInterface { - void set_connected(bool value); - - // The local port where this connection sends and receives packets. -- PortInterface* port() { -- RTC_DCHECK_RUN_ON(network_thread_); -- return port_.get(); -- } -+ PortInterface* port() { return port_.get(); } - - const Environment& env() { return env_; } - ConnectionInfo& mutable_stats() { return stats_; } -@@ -523,7 +511,7 @@ class RTC_EXPORT Connection : public CandidatePairInterface { - // TODO(tommi): This ^^^ should be fixed. - TaskQueueBase* const network_thread_; - const uint32_t id_; -- WeakPtr<PortInterface> port_ RTC_GUARDED_BY(network_thread_); -+ WeakPtr<PortInterface> port_; - Candidate local_candidate_ RTC_GUARDED_BY(network_thread_); - Candidate remote_candidate_; - -diff --git a/p2p/base/p2p_transport_channel.cc b/p2p/base/p2p_transport_channel.cc -index 9b99b90bee..eee1092080 100644 ---- a/p2p/base/p2p_transport_channel.cc -+++ b/p2p/base/p2p_transport_channel.cc -@@ -865,16 +865,17 @@ void P2PTransportChannel::MaybeStartGathering() { - ice_parameters_.ufrag, - ice_parameters_.pwd); - if (pooled_session) { -- PortAllocatorSession* raw_session = pooled_session.get(); - AddAllocatorSession(std::move(pooled_session)); -- RTC_DCHECK_EQ(raw_session, allocator_sessions_.back().get()); -+ PortAllocatorSession* raw_pooled_session = -+ allocator_sessions_.back().get(); - // Process the pooled session's existing candidates/ports, if they exist. -- OnCandidatesReady(raw_session, raw_session->ReadyCandidates()); -- for (PortInterface* port : raw_session->ReadyPorts()) { -- OnPortReady(raw_session, port); -+ OnCandidatesReady(raw_pooled_session, -+ raw_pooled_session->ReadyCandidates()); -+ for (PortInterface* port : allocator_sessions_.back()->ReadyPorts()) { -+ OnPortReady(raw_pooled_session, port); - } -- if (raw_session->CandidatesAllocationDone()) { -- OnCandidatesAllocationDone(raw_session); -+ if (allocator_sessions_.back()->CandidatesAllocationDone()) { -+ OnCandidatesAllocationDone(raw_pooled_session); - } - } else { - AddAllocatorSession(allocator_->CreateSession( -diff --git a/p2p/base/p2p_transport_channel.h b/p2p/base/p2p_transport_channel.h -index 8ce03f60f4..7f087ba22d 100644 ---- a/p2p/base/p2p_transport_channel.h -+++ b/p2p/base/p2p_transport_channel.h -@@ -443,9 +443,9 @@ class RTC_EXPORT P2PTransportChannel : public IceTransportInternal, - void GoogDeltaAckReceived(RTCErrorOr<const StunUInt64Attribute*>); - - const Environment env_; -- const std::string transport_name_ RTC_GUARDED_BY(network_thread_); -+ std::string transport_name_ RTC_GUARDED_BY(network_thread_); - int component_ RTC_GUARDED_BY(network_thread_); -- PortAllocator* const allocator_ RTC_GUARDED_BY(network_thread_); -+ PortAllocator* allocator_ RTC_GUARDED_BY(network_thread_); - AsyncDnsResolverFactoryInterface* const async_dns_resolver_factory_ - RTC_GUARDED_BY(network_thread_); - const std::unique_ptr<AsyncDnsResolverFactoryInterface> -diff --git a/p2p/base/port.cc b/p2p/base/port.cc -index ea6b045a11..c7c1de2ef5 100644 ---- a/p2p/base/port.cc -+++ b/p2p/base/port.cc -@@ -121,7 +121,6 @@ Port::Port(const PortParametersRef& args, - network_(args.network), - min_port_(min_port), - max_port_(max_port), -- content_name_(args.content_name), - component_(ICE_CANDIDATE_COMPONENT_DEFAULT), - generation_(0), - ice_username_fragment_(args.ice_username_fragment), -diff --git a/p2p/base/port.h b/p2p/base/port.h -index 134d9eb854..1a237be898 100644 ---- a/p2p/base/port.h -+++ b/p2p/base/port.h -@@ -169,7 +169,6 @@ class RTC_EXPORT Port : public PortInterface, public sigslot::has_slots<> { - const ::webrtc::Network* network; - absl::string_view ice_username_fragment; - absl::string_view ice_password; -- absl::string_view content_name; - LocalNetworkAccessPermissionFactoryInterface* lna_permission_factory = - nullptr; - }; -diff --git a/p2p/base/port_allocator.cc b/p2p/base/port_allocator.cc -index cd7bd076ce..ba95687415 100644 ---- a/p2p/base/port_allocator.cc -+++ b/p2p/base/port_allocator.cc -@@ -241,7 +241,6 @@ std::unique_ptr<PortAllocatorSession> PortAllocator::TakePooledSession( - auto it = - pooled_sessions_.begin() + std::distance(pooled_sessions_.cbegin(), cit); - std::unique_ptr<PortAllocatorSession> ret = std::move(*it); -- RTC_DCHECK(ret->pooled()); - ret->SetIceParameters(content_name, component, ice_ufrag, ice_pwd); - ret->set_pooled(false); - // According to JSEP, a pooled session should filter candidates only -@@ -257,8 +256,9 @@ const PortAllocatorSession* PortAllocator::GetPooledSession( - auto it = FindPooledSession(ice_credentials); - if (it == pooled_sessions_.end()) { - return nullptr; -+ } else { -+ return it->get(); - } -- return it->get(); - } - - std::vector<std::unique_ptr<PortAllocatorSession>>::const_iterator -diff --git a/p2p/base/port_allocator.h b/p2p/base/port_allocator.h -index 643fb7b656..87490f2652 100644 ---- a/p2p/base/port_allocator.h -+++ b/p2p/base/port_allocator.h -@@ -303,9 +303,6 @@ class RTC_EXPORT PortAllocatorSession : public sigslot::has_slots<> { - int component, - absl::string_view ice_ufrag, - absl::string_view ice_pwd) { -- RTC_DCHECK(pooled_); -- RTC_DCHECK(!content_name.empty()); -- RTC_DCHECK(content_name_.empty()); - content_name_ = std::string(content_name); - component_ = component; - ice_ufrag_ = std::string(ice_ufrag); -@@ -313,12 +310,7 @@ class RTC_EXPORT PortAllocatorSession : public sigslot::has_slots<> { - UpdateIceParametersInternal(); - } - -- void set_pooled(bool value) { -- pooled_ = value; -- if (pooled_) { -- content_name_.clear(); -- } -- } -+ void set_pooled(bool value) { pooled_ = value; } - - uint32_t flags_; - uint32_t generation_; -diff --git a/p2p/base/port_allocator_unittest.cc b/p2p/base/port_allocator_unittest.cc -index d7272baa0e..8bc61dadd8 100644 ---- a/p2p/base/port_allocator_unittest.cc -+++ b/p2p/base/port_allocator_unittest.cc -@@ -239,7 +239,6 @@ TEST_F(PortAllocatorTest, TakePooledSessionUpdatesIceParameters) { - static_cast<webrtc::FakePortAllocatorSession*>( - allocator_->TakePooledSession(kContentName, 1, kIceUfrag, kIcePwd) - .release())); -- EXPECT_FALSE(session->pooled()); - EXPECT_EQ(1, session->transport_info_update_count()); - EXPECT_EQ(kContentName, session->content_name()); - EXPECT_EQ(1, session->component()); -diff --git a/p2p/base/turn_port.h b/p2p/base/turn_port.h -index 0674a5a320..c74feae432 100644 ---- a/p2p/base/turn_port.h -+++ b/p2p/base/turn_port.h -@@ -93,7 +93,6 @@ class TurnPort : public Port { - .network = args.network, - .ice_username_fragment = args.username, - .ice_password = args.password, -- .content_name = args.content_name, - .lna_permission_factory = args.lna_permission_factory}, - socket, *args.server_address, args.config->credentials, - args.relative_priority, args.config->tls_alpn_protocols, -@@ -117,7 +116,6 @@ class TurnPort : public Port { - .network = args.network, - .ice_username_fragment = args.username, - .ice_password = args.password, -- .content_name = args.content_name, - .lna_permission_factory = args.lna_permission_factory}, - min_port, max_port, *args.server_address, args.config->credentials, - args.relative_priority, args.config->tls_alpn_protocols, -diff --git a/p2p/client/basic_port_allocator.cc b/p2p/client/basic_port_allocator.cc -index e288c7122d..ee4762815e 100644 ---- a/p2p/client/basic_port_allocator.cc -+++ b/p2p/client/basic_port_allocator.cc -@@ -567,7 +567,6 @@ bool BasicPortAllocatorSession::CandidatesAllocationDone() const { - - void BasicPortAllocatorSession::UpdateIceParametersInternal() { - RTC_DCHECK_RUN_ON(network_thread_); -- RTC_DCHECK(pooled()); - for (PortData& port : ports_) { - port.port()->set_content_name(content_name()); - port.port()->SetIceParameters(component(), ice_ufrag(), ice_pwd()); -@@ -908,15 +907,18 @@ void BasicPortAllocatorSession::DisableEquivalentPhases( - void BasicPortAllocatorSession::AddAllocatedPort(Port* port, - AllocationSequence* seq) { - RTC_DCHECK_RUN_ON(network_thread_); -- RTC_DCHECK_EQ(port->content_name(), content_name()); -+ if (!port) -+ return; - - RTC_LOG(LS_INFO) << "Adding allocated port for " << content_name(); -+ port->set_content_name(content_name()); - port->set_component(component()); - port->set_generation(generation()); - port->set_send_retransmit_count_attribute( - (flags() & PORTALLOCATOR_ENABLE_STUN_RETRANSMIT_ATTRIBUTE) != 0); - -- ports_.emplace_back(port, seq); -+ PortData data(port, seq); -+ ports_.push_back(data); - - port->SubscribeCandidateReadyCallback( - [this](Port* port, const Candidate& c) { OnCandidateReady(port, c); }); -@@ -1451,7 +1453,6 @@ void AllocationSequence::CreateUDPPorts() { - .network = network_, - .ice_username_fragment = session_->username(), - .ice_password = session_->password(), -- .content_name = session_->content_name(), - .lna_permission_factory = - session_->allocator()->lna_permission_factory()}, - udp_socket_.get(), emit_local_candidate_for_anyaddress, -@@ -1464,7 +1465,6 @@ void AllocationSequence::CreateUDPPorts() { - .network = network_, - .ice_username_fragment = session_->username(), - .ice_password = session_->password(), -- .content_name = session_->content_name(), - .lna_permission_factory = - session_->allocator()->lna_permission_factory()}, - session_->allocator()->min_port(), session_->allocator()->max_port(), -@@ -1478,6 +1478,9 @@ void AllocationSequence::CreateUDPPorts() { - // UDPPort. - if (IsFlagSet(PORTALLOCATOR_ENABLE_SHARED_SOCKET)) { - udp_port_ = port.get(); -+ port->SubscribePortDestroyed( -+ [this](PortInterface* port) { OnPortDestroyed(port); }); -+ - // If STUN is not disabled, setting stun server address to port. - if (!IsFlagSet(PORTALLOCATOR_DISABLE_STUN)) { - if (config_ && !config_->StunServers().empty()) { -@@ -1500,15 +1503,12 @@ void AllocationSequence::CreateTCPPorts() { - } - - std::unique_ptr<Port> port = TCPPort::Create( -- { -- .env = session_->allocator()->env(), -- .network_thread = session_->network_thread(), -- .socket_factory = session_->socket_factory(), -- .network = network_, -- .ice_username_fragment = session_->username(), -- .ice_password = session_->password(), -- .content_name = session_->content_name(), -- }, -+ {.env = session_->allocator()->env(), -+ .network_thread = session_->network_thread(), -+ .socket_factory = session_->socket_factory(), -+ .network = network_, -+ .ice_username_fragment = session_->username(), -+ .ice_password = session_->password()}, - session_->allocator()->min_port(), session_->allocator()->max_port(), - session_->allocator()->allow_tcp_listen()); - if (port) { -@@ -1542,7 +1542,6 @@ void AllocationSequence::CreateStunPorts() { - .network = network_, - .ice_username_fragment = session_->username(), - .ice_password = session_->password(), -- .content_name = session_->content_name(), - .lna_permission_factory = - session_->allocator()->lna_permission_factory()}, - session_->allocator()->min_port(), session_->allocator()->max_port(), -@@ -1612,7 +1611,6 @@ void AllocationSequence::CreateTurnPort(const RelayServerConfig& config, - args.network = network_; - args.username = session_->username(); - args.password = session_->password(); -- args.content_name = session_->content_name(); - args.server_address = &(*relay_port); - args.config = &config; - args.turn_customizer = session_->allocator()->turn_customizer(); -@@ -1637,6 +1635,11 @@ void AllocationSequence::CreateTurnPort(const RelayServerConfig& config, - } - - relay_ports_.push_back(port.get()); -+ // Listen to the port destroyed signal, to allow AllocationSequence to -+ // remove the entry from it's map. -+ port->SubscribePortDestroyed( -+ [this](PortInterface* port) { OnPortDestroyed(port); }); -+ - } else { - port = session_->allocator()->relay_port_factory()->Create( - args, session_->allocator()->min_port(), -diff --git a/p2p/client/basic_port_allocator.h b/p2p/client/basic_port_allocator.h -index f2242a7236..ced785f66a 100644 ---- a/p2p/client/basic_port_allocator.h -+++ b/p2p/client/basic_port_allocator.h -@@ -201,13 +201,10 @@ class RTC_EXPORT BasicPortAllocatorSession : public PortAllocatorSession { - // interface. Only TURN ports may be pruned. - }; - -- PortData() = delete; -- PortData(PortData&&) = default; -+ PortData() {} - PortData(Port* port, AllocationSequence* seq) - : port_(port), sequence_(seq) {} - -- PortData& operator=(PortData&&) = default; -- - Port* port() const { return port_; } - AllocationSequence* sequence() const { return sequence_; } - bool has_pairable_candidate() const { return has_pairable_candidate_; } -diff --git a/p2p/client/relay_port_factory_interface.h b/p2p/client/relay_port_factory_interface.h -index 2bcb2e0f55..63b7c8bd77 100644 ---- a/p2p/client/relay_port_factory_interface.h -+++ b/p2p/client/relay_port_factory_interface.h -@@ -40,7 +40,6 @@ struct CreateRelayPortArgs { - const RelayServerConfig* config; - std::string username; - std::string password; -- std::string content_name; - TurnCustomizer* turn_customizer = nullptr; - // Relative priority of candidates from this TURN server in relation - // to the candidates from other servers. Required because ICE priorities