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:
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