tor-browser

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

commit 776b9678cf28516c6c2093579298455df1397d42
parent 9992d3f9eec03a041b86b8350643866de228dffb
Author: Dan Baker <dbaker@mozilla.com>
Date:   Thu, 23 Oct 2025 15:31:52 -0600

Bug 1995393 - Vendor libwebrtc from bfaaa8881c

Upstream commit: https://webrtc.googlesource.com/src/+/bfaaa8881c37d56ae696666d4ee02f6126d95af9
    Replace erase-remove idiom with `std::erase` and `std::erase_if`.

    This change updates various parts of WebRTC to use the more concise
    `std::erase` and `std::erase_if` functions, available since C++20,
    instead of the traditional erase-remove idiom. This also fixes a few
    bugs or error-prone constructs where the single element erase was used.

    Bug: webrtc:438403372
    Change-Id: I19b4f3188aafa4542a11c8dafcca6f2f82e541a3
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/404320
    Commit-Queue: Björn Terelius <terelius@webrtc.org>
    Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
    Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45344}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Mthird_party/libwebrtc/api/async_dns_resolver.h | 26++++++++++++--------------
Mthird_party/libwebrtc/api/crypto/BUILD.gn | 1+
Mthird_party/libwebrtc/api/crypto/crypto_options.cc | 29++++++++++-------------------
Mthird_party/libwebrtc/api/local_network_access_permission.h | 5++---
Mthird_party/libwebrtc/media/base/codec.cc | 3+--
Mthird_party/libwebrtc/media/base/video_source_base.cc | 17++++++-----------
Mthird_party/libwebrtc/media/engine/fake_webrtc_video_engine.cc | 7++-----
Mthird_party/libwebrtc/p2p/base/p2p_transport_channel.cc | 6++----
Mthird_party/libwebrtc/p2p/dtls/dtls_utils.cc | 8++------
Mthird_party/libwebrtc/p2p/test/nat_unittest.cc | 10+++-------
Mthird_party/libwebrtc/pc/peer_connection_encodings_integrationtest.cc | 83++++++++++++++++++++++++++++---------------------------------------------------
Mthird_party/libwebrtc/pc/peer_connection_integrationtest.cc | 33++++++++++-----------------------
Mthird_party/libwebrtc/pc/peer_connection_jsep_unittest.cc | 7+++----
Mthird_party/libwebrtc/pc/sdp_offer_answer_unittest.cc | 20+++++++-------------
Mthird_party/libwebrtc/pc/webrtc_sdp.cc | 8+++-----
Mthird_party/libwebrtc/rtc_base/firewall_socket_server.cc | 4+---
Mthird_party/libwebrtc/test/pc/e2e/sdp/sdp_changer.cc | 23++++++++---------------
18 files changed, 104 insertions(+), 190 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-23T21:29:17.819152+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-23T21:31:40.937195+00:00. # base of lastest vendoring -3d4bae08b2 +bfaaa8881c diff --git a/third_party/libwebrtc/api/async_dns_resolver.h b/third_party/libwebrtc/api/async_dns_resolver.h @@ -23,20 +23,18 @@ namespace webrtc { // The AsyncDnsResolverInterface class encapsulates a single name query. // // Usage: -// std::unique_ptr<AsyncDnsResolverInterface> resolver = -// factory->Create(address-to-be-resolved, [r = resolver.get()]() { -// if (r->result.GetResolvedAddress(AF_INET, &addr) { -// // success -// } else { -// // failure -// error = r->result().GetError(); -// } -// // Release resolver. -// resolver_list.erase(std::remove_if(resolver_list.begin(), -// resolver_list.end(), -// [](refptr) { refptr.get() == r; }); -// }); -// resolver_list.push_back(std::move(resolver)); +// std::unique_ptr<AsyncDnsResolverInterface> resolver = +// factory->Create(address-to-be-resolved, [r = resolver.get()]() { +// if (r->result.GetResolvedAddress(AF_INET, &addr) { +// // success +// } else { +// // failure +// error = r->result().GetError(); +// } +// // Release resolver. +// std::erase_if(resolver_list, [](refptr) { refptr.get() == r; }); +// }); +// resolver_list.push_back(std::move(resolver)); class AsyncDnsResolverResult { public: diff --git a/third_party/libwebrtc/api/crypto/BUILD.gn b/third_party/libwebrtc/api/crypto/BUILD.gn @@ -27,6 +27,7 @@ rtc_library("options") { "../../rtc_base:checks", "../../rtc_base:ssl_adapter", "../../rtc_base/system:rtc_export", + "//third_party/abseil-cpp/absl/algorithm:container", ] } diff --git a/third_party/libwebrtc/api/crypto/crypto_options.cc b/third_party/libwebrtc/api/crypto/crypto_options.cc @@ -10,7 +10,6 @@ #include "api/crypto/crypto_options.h" -#include <algorithm> #include <cstdint> #include <optional> #include <set> @@ -18,6 +17,7 @@ #include <utility> #include <vector> +#include "absl/algorithm/container.h" #include "api/field_trials_view.h" #include "rtc_base/checks.h" #include "rtc_base/ssl_stream_adapter.h" @@ -127,35 +127,26 @@ void CryptoOptions::EphemeralKeyExchangeCipherGroups::Update( field_trials); // Remove all disabled. if (disabled_groups) { - default_groups.erase( - std::remove_if(default_groups.begin(), default_groups.end(), - [&](uint16_t val) { - return std::find(disabled_groups->begin(), - disabled_groups->end(), - val) != disabled_groups->end(); - }), - default_groups.end()); - enabled_.erase(std::remove_if(enabled_.begin(), enabled_.end(), - [&](uint16_t val) { - return std::find(disabled_groups->begin(), - disabled_groups->end(), - val) != - disabled_groups->end(); - }), - enabled_.end()); + std::erase_if(default_groups, [&](uint16_t val) { + return absl::c_linear_search(*disabled_groups, val); + }); + std::erase_if(enabled_, [&](uint16_t val) { + return absl::c_linear_search(*disabled_groups, val); + }); } // Add those enabled by field-trials first. std::vector<uint16_t> current = std::move(enabled_); + enabled_.clear(); for (auto val : default_groups) { - if (std::find(current.begin(), current.end(), val) == current.end()) { + if (!absl::c_linear_search(current, val)) { enabled_.push_back(val); } } // Then re-add those present (unless already there). for (auto val : current) { - if (std::find(enabled_.begin(), enabled_.end(), val) == enabled_.end()) { + if (!absl::c_linear_search(enabled_, val)) { enabled_.push_back(val); } } diff --git a/third_party/libwebrtc/api/local_network_access_permission.h b/third_party/libwebrtc/api/local_network_access_permission.h @@ -36,9 +36,8 @@ namespace webrtc { // permission->RequestPermission( // target_address, // [&, r = permission.get()](LocalNetworkAccessPermissionStatus status) { -// permission_list.erase(std::remove_if( -// permission_list.begin(), permission_list.end(), -// [&](const auto& refptr) { return refptr.get() == r; })); +// std::erase_if(permission_list, +// [&](const auto& refptr) { return refptr.get() == r; }); // // if (status == LocalNetworkAccessPermissionStatus::kGranted) { // // Permission was granted. diff --git a/third_party/libwebrtc/media/base/codec.cc b/third_party/libwebrtc/media/base/codec.cc @@ -69,8 +69,7 @@ bool FeedbackParams::Remove(const FeedbackParam& param) { if (!Has(param)) { return false; } - params_.erase(std::remove(params_.begin(), params_.end(), param), - params_.end()); + std::erase(params_, param); return true; } diff --git a/third_party/libwebrtc/media/base/video_source_base.cc b/third_party/libwebrtc/media/base/video_source_base.cc @@ -10,7 +10,6 @@ #include "media/base/video_source_base.h" -#include <algorithm> #include <vector> #include "absl/algorithm/container.h" @@ -40,11 +39,9 @@ void VideoSourceBase::AddOrUpdateSink(VideoSinkInterface<VideoFrame>* sink, void VideoSourceBase::RemoveSink(VideoSinkInterface<VideoFrame>* sink) { RTC_DCHECK(sink != nullptr); RTC_DCHECK(FindSinkPair(sink)); - sinks_.erase(std::remove_if(sinks_.begin(), sinks_.end(), - [sink](const SinkPair& sink_pair) { - return sink_pair.sink == sink; - }), - sinks_.end()); + std::erase_if(sinks_, [sink](const SinkPair& sink_pair) { + return sink_pair.sink == sink; + }); } VideoSourceBase::SinkPair* VideoSourceBase::FindSinkPair( @@ -79,11 +76,9 @@ void VideoSourceBaseGuarded::RemoveSink(VideoSinkInterface<VideoFrame>* sink) { RTC_DCHECK_RUN_ON(&source_sequence_); RTC_DCHECK(sink != nullptr); RTC_DCHECK(FindSinkPair(sink)); - sinks_.erase(std::remove_if(sinks_.begin(), sinks_.end(), - [sink](const SinkPair& sink_pair) { - return sink_pair.sink == sink; - }), - sinks_.end()); + std::erase_if(sinks_, [sink](const SinkPair& sink_pair) { + return sink_pair.sink == sink; + }); } VideoSourceBaseGuarded::SinkPair* VideoSourceBaseGuarded::FindSinkPair( diff --git a/third_party/libwebrtc/media/engine/fake_webrtc_video_engine.cc b/third_party/libwebrtc/media/engine/fake_webrtc_video_engine.cc @@ -10,7 +10,6 @@ #include "media/engine/fake_webrtc_video_engine.h" -#include <algorithm> #include <cstdint> #include <memory> #include <optional> @@ -130,8 +129,7 @@ std::unique_ptr<VideoDecoder> FakeWebRtcVideoDecoderFactory::Create( void FakeWebRtcVideoDecoderFactory::DecoderDestroyed( FakeWebRtcVideoDecoder* decoder) { - decoders_.erase(std::remove(decoders_.begin(), decoders_.end(), decoder), - decoders_.end()); + std::erase(decoders_, decoder); } void FakeWebRtcVideoDecoderFactory::AddSupportedVideoCodec( @@ -295,8 +293,7 @@ bool FakeWebRtcVideoEncoderFactory::WaitForCreatedVideoEncoders( void FakeWebRtcVideoEncoderFactory::EncoderDestroyed( FakeWebRtcVideoEncoder* encoder) { MutexLock lock(&mutex_); - encoders_.erase(std::remove(encoders_.begin(), encoders_.end(), encoder), - encoders_.end()); + std::erase(encoders_, encoder); } void FakeWebRtcVideoEncoderFactory::AddSupportedVideoCodec( diff --git a/third_party/libwebrtc/p2p/base/p2p_transport_channel.cc b/third_party/libwebrtc/p2p/base/p2p_transport_channel.cc @@ -2183,10 +2183,8 @@ void P2PTransportChannel::RemoveConnection(Connection* connection) { void P2PTransportChannel::OnPortDestroyed(PortInterface* port) { RTC_DCHECK_RUN_ON(network_thread_); - ports_.erase(std::remove(ports_.begin(), ports_.end(), port), ports_.end()); - pruned_ports_.erase( - std::remove(pruned_ports_.begin(), pruned_ports_.end(), port), - pruned_ports_.end()); + std::erase(ports_, port); + std::erase(pruned_ports_, port); RTC_LOG(LS_INFO) << "Removed port because it is destroyed: " << ports_.size() << " remaining"; } diff --git a/third_party/libwebrtc/p2p/dtls/dtls_utils.cc b/third_party/libwebrtc/p2p/dtls/dtls_utils.cc @@ -10,7 +10,6 @@ #include "p2p/dtls/dtls_utils.h" -#include <algorithm> #include <cstdint> #include <memory> #include <vector> @@ -83,11 +82,8 @@ void PacketStash::Prune(const absl::flat_hash_set<uint32_t>& hashes) { return; } uint32_t before = packets_.size(); - packets_.erase(std::remove_if(packets_.begin(), packets_.end(), - [&](const auto& val) { - return hashes.contains(val.hash); - }), - packets_.end()); + std::erase_if(packets_, + [&](const auto& val) { return hashes.contains(val.hash); }); uint32_t after = packets_.size(); uint32_t removed = before - after; if (pos_ >= removed) { diff --git a/third_party/libwebrtc/p2p/test/nat_unittest.cc b/third_party/libwebrtc/p2p/test/nat_unittest.cc @@ -8,7 +8,6 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include <algorithm> #include <cstddef> #include <cstring> #include <memory> @@ -248,12 +247,9 @@ void TestPhysicalInternal(const SocketAddress& int_addr) { Thread::Current()->ProcessMessages(0); std::vector<const Network*> networks = network_manager.GetNetworks(); - networks.erase(std::remove_if(networks.begin(), networks.end(), - [](const Network* network) { - return kDefaultNetworkIgnoreMask & - network->type(); - }), - networks.end()); + std::erase_if(networks, [](const Network* network) { + return kDefaultNetworkIgnoreMask & network->type(); + }); if (networks.empty()) { RTC_LOG(LS_WARNING) << "Not enough network adapters for test."; return; diff --git a/third_party/libwebrtc/pc/peer_connection_encodings_integrationtest.cc b/third_party/libwebrtc/pc/peer_connection_encodings_integrationtest.cc @@ -275,13 +275,10 @@ class PeerConnectionEncodingsIntegrationTest : public ::testing::Test { pc_wrapper->pc_factory() ->GetRtpReceiverCapabilities(MediaType::VIDEO) .codecs; - codecs.erase(std::remove_if(codecs.begin(), codecs.end(), - [&codec_name](const RtpCodecCapability& codec) { - return !codec.IsResiliencyCodec() && - !absl::EqualsIgnoreCase(codec.name, - codec_name); - }), - codecs.end()); + std::erase_if(codecs, [&codec_name](const RtpCodecCapability& codec) { + return !codec.IsResiliencyCodec() && + !absl::EqualsIgnoreCase(codec.name, codec_name); + }); RTC_DCHECK(std::find_if(codecs.begin(), codecs.end(), [&codec_name](const RtpCodecCapability& codec) { return absl::EqualsIgnoreCase(codec.name, @@ -1735,12 +1732,9 @@ TEST_F(PeerConnectionEncodingsIntegrationTest, local_pc_wrapper->pc_factory() ->GetRtpSenderCapabilities(MediaType::AUDIO) .codecs; - not_opus_codecs.erase( - std::remove_if(not_opus_codecs.begin(), not_opus_codecs.end(), - [&](const auto& codec) { - return absl::EqualsIgnoreCase(codec.name, opus->name); - }), - not_opus_codecs.end()); + std::erase_if(not_opus_codecs, [&](const auto& codec) { + return absl::EqualsIgnoreCase(codec.name, opus->name); + }); auto transceiver_or_error = local_pc_wrapper->pc()->AddTransceiver(MediaType::AUDIO); @@ -1773,12 +1767,9 @@ TEST_F(PeerConnectionEncodingsIntegrationTest, local_pc_wrapper->pc_factory() ->GetRtpSenderCapabilities(MediaType::AUDIO) .codecs; - not_opus_codecs.erase( - std::remove_if(not_opus_codecs.begin(), not_opus_codecs.end(), - [&](const auto& codec) { - return absl::EqualsIgnoreCase(codec.name, opus->name); - }), - not_opus_codecs.end()); + std::erase_if(not_opus_codecs, [&](const auto& codec) { + return absl::EqualsIgnoreCase(codec.name, opus->name); + }); auto transceiver_or_error = local_pc_wrapper->pc()->AddTransceiver(MediaType::AUDIO); @@ -1900,12 +1891,9 @@ TEST_F(PeerConnectionEncodingsIntegrationTest, local_pc_wrapper->pc_factory() ->GetRtpSenderCapabilities(MediaType::VIDEO) .codecs; - not_vp8_codecs.erase( - std::remove_if(not_vp8_codecs.begin(), not_vp8_codecs.end(), - [&](const auto& codec) { - return absl::EqualsIgnoreCase(codec.name, vp8->name); - }), - not_vp8_codecs.end()); + std::erase_if(not_vp8_codecs, [&](const auto& codec) { + return absl::EqualsIgnoreCase(codec.name, vp8->name); + }); auto transceiver_or_error = local_pc_wrapper->pc()->AddTransceiver(MediaType::VIDEO); @@ -1938,12 +1926,9 @@ TEST_F(PeerConnectionEncodingsIntegrationTest, local_pc_wrapper->pc_factory() ->GetRtpSenderCapabilities(MediaType::VIDEO) .codecs; - not_vp8_codecs.erase( - std::remove_if(not_vp8_codecs.begin(), not_vp8_codecs.end(), - [&](const auto& codec) { - return absl::EqualsIgnoreCase(codec.name, vp8->name); - }), - not_vp8_codecs.end()); + std::erase_if(not_vp8_codecs, [&](const auto& codec) { + return absl::EqualsIgnoreCase(codec.name, vp8->name); + }); auto transceiver_or_error = local_pc_wrapper->pc()->AddTransceiver(MediaType::VIDEO); @@ -1999,12 +1984,9 @@ TEST_F(PeerConnectionEncodingsIntegrationTest, local_pc_wrapper->pc_factory() ->GetRtpSenderCapabilities(MediaType::AUDIO) .codecs; - not_opus_codecs.erase( - std::remove_if(not_opus_codecs.begin(), not_opus_codecs.end(), - [&](const auto& codec) { - return absl::EqualsIgnoreCase(codec.name, opus->name); - }), - not_opus_codecs.end()); + std::erase_if(not_opus_codecs, [&](const auto& codec) { + return absl::EqualsIgnoreCase(codec.name, opus->name); + }); RtpTransceiverInit init; init.direction = RtpTransceiverDirection::kSendOnly; @@ -2129,12 +2111,9 @@ TEST_F(PeerConnectionEncodingsIntegrationTest, local_pc_wrapper->pc_factory() ->GetRtpSenderCapabilities(MediaType::VIDEO) .codecs; - not_vp8_codecs.erase( - std::remove_if(not_vp8_codecs.begin(), not_vp8_codecs.end(), - [&](const auto& codec) { - return absl::EqualsIgnoreCase(codec.name, vp8->name); - }), - not_vp8_codecs.end()); + std::erase_if(not_vp8_codecs, [&](const auto& codec) { + return absl::EqualsIgnoreCase(codec.name, vp8->name); + }); RtpTransceiverInit init; init.direction = RtpTransceiverDirection::kSendOnly; @@ -3259,21 +3238,17 @@ TEST_F(PeerConnectionEncodingsFakeCodecsIntegrationTest, local_pc_wrapper->pc_factory() ->GetRtpSenderCapabilities(MediaType::VIDEO) .codecs; - send_codecs.erase(std::remove_if(send_codecs.begin(), send_codecs.end(), - [](const RtpCodecCapability& codec) { - return codec.name != "H264"; - }), - send_codecs.end()); + std::erase_if(send_codecs, [](const RtpCodecCapability& codec) { + return codec.name != "H264"; + }); std::vector<RtpCodecCapability> recv_codecs = local_pc_wrapper->pc_factory() ->GetRtpReceiverCapabilities(MediaType::VIDEO) .codecs; - recv_codecs.erase(std::remove_if(recv_codecs.begin(), recv_codecs.end(), - [](const RtpCodecCapability& codec) { - RTC_LOG(LS_ERROR) << codec.name; - return codec.name != "H264"; - }), - recv_codecs.end()); + std::erase_if(recv_codecs, [](const RtpCodecCapability& codec) { + RTC_LOG(LS_ERROR) << codec.name; + return codec.name != "H264"; + }); ASSERT_THAT(send_codecs, SizeIs(2u)); ASSERT_THAT(recv_codecs, SizeIs(2u)); EXPECT_EQ(send_codecs[0], recv_codecs[0]); diff --git a/third_party/libwebrtc/pc/peer_connection_integrationtest.cc b/third_party/libwebrtc/pc/peer_connection_integrationtest.cc @@ -15,7 +15,6 @@ // do NOT add it here, but instead add it to the file // slow_peer_connection_integrationtest.cc -#include <algorithm> #include <cstddef> #include <cstdint> #include <memory> @@ -1123,12 +1122,9 @@ void RemoveBundleGroupSsrcsAndMidExtension( for (ContentInfo& content : sdp->description()->contents()) { MediaContentDescription* media = content.media_description(); RtpHeaderExtensions extensions = media->rtp_header_extensions(); - extensions.erase(std::remove_if(extensions.begin(), extensions.end(), - [](const RtpExtension& extension) { - return extension.uri == - RtpExtension::kMidUri; - }), - extensions.end()); + std::erase_if(extensions, [](const RtpExtension& extension) { + return extension.uri == RtpExtension::kMidUri; + }); media->set_rtp_header_extensions(extensions); } } @@ -1171,12 +1167,9 @@ void ModifyPayloadTypesAndRemoveMidExtension( for (ContentInfo& content : sdp->description()->contents()) { MediaContentDescription* media = content.media_description(); RtpHeaderExtensions extensions = media->rtp_header_extensions(); - extensions.erase(std::remove_if(extensions.begin(), extensions.end(), - [](const RtpExtension& extension) { - return extension.uri == - RtpExtension::kMidUri; - }), - extensions.end()); + std::erase_if(extensions, [](const RtpExtension& extension) { + return extension.uri == RtpExtension::kMidUri; + }); media->set_rtp_header_extensions(extensions); media->set_codecs({CreateVideoCodec(pt++, "VP8")}); } @@ -2871,11 +2864,8 @@ TEST_P(PeerConnectionIntegrationTest, CodecNamesAreCaseInsensitive) { GetFirstAudioContentDescription(sdp->description()); ASSERT_NE(nullptr, audio); auto audio_codecs = audio->codecs(); - audio_codecs.erase( - std::remove_if( - audio_codecs.begin(), audio_codecs.end(), - [](const Codec& codec) { return codec.name != "opus"; }), - audio_codecs.end()); + std::erase_if(audio_codecs, + [](const Codec& codec) { return codec.name != "opus"; }); ASSERT_EQ(1u, audio_codecs.size()); audio_codecs[0].name = "OpUs"; audio->set_codecs(audio_codecs); @@ -2884,11 +2874,8 @@ TEST_P(PeerConnectionIntegrationTest, CodecNamesAreCaseInsensitive) { GetFirstVideoContentDescription(sdp->description()); ASSERT_NE(nullptr, video); auto video_codecs = video->codecs(); - video_codecs.erase( - std::remove_if( - video_codecs.begin(), video_codecs.end(), - [](const Codec& codec) { return codec.name != "VP8"; }), - video_codecs.end()); + std::erase_if(video_codecs, + [](const Codec& codec) { return codec.name != "VP8"; }); ASSERT_EQ(1u, video_codecs.size()); video_codecs[0].name = "vP8"; video->set_codecs(video_codecs); diff --git a/third_party/libwebrtc/pc/peer_connection_jsep_unittest.cc b/third_party/libwebrtc/pc/peer_connection_jsep_unittest.cc @@ -8,7 +8,6 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include <algorithm> #include <cstddef> #include <map> #include <memory> @@ -1648,9 +1647,9 @@ static void RemoveRtpHeaderExtensionByUri( absl::string_view uri) { std::vector<RtpExtension> header_extensions = media_description->rtp_header_extensions(); - header_extensions.erase(std::remove_if( - header_extensions.begin(), header_extensions.end(), - [uri](const RtpExtension& extension) { return extension.uri == uri; })); + std::erase_if(header_extensions, [uri](const RtpExtension& extension) { + return extension.uri == uri; + }); media_description->set_rtp_header_extensions(header_extensions); } diff --git a/third_party/libwebrtc/pc/sdp_offer_answer_unittest.cc b/third_party/libwebrtc/pc/sdp_offer_answer_unittest.cc @@ -1687,12 +1687,9 @@ TEST_F(SdpOfferAnswerTest, PayloadTypeMatchingWithSubsequentOfferAnswer) { auto video_transceiver = caller->AddTransceiver(MediaType::VIDEO); std::vector<RtpCodecCapability> codec_caps = pc_factory_->GetRtpReceiverCapabilities(MediaType::VIDEO).codecs; - codec_caps.erase(std::remove_if(codec_caps.begin(), codec_caps.end(), - [](const RtpCodecCapability& codec) { - return !absl::EqualsIgnoreCase(codec.name, - "VP8"); - }), - codec_caps.end()); + std::erase_if(codec_caps, [](const RtpCodecCapability& codec) { + return !absl::EqualsIgnoreCase(codec.name, "VP8"); + }); EXPECT_TRUE(video_transceiver->SetCodecPreferences(codec_caps).ok()); auto offer1 = caller->CreateOfferAndSetAsLocal(); @@ -1716,13 +1713,10 @@ TEST_F(SdpOfferAnswerTest, PayloadTypeMatchingWithSubsequentOfferAnswer) { // 3. sCP to reenable that codec. Payload type is not matched at this point. codec_caps = pc_factory_->GetRtpReceiverCapabilities(MediaType::VIDEO).codecs; - codec_caps.erase( - std::remove_if(codec_caps.begin(), codec_caps.end(), - [](const RtpCodecCapability& codec) { - return !(absl::EqualsIgnoreCase(codec.name, "VP8") || - absl::EqualsIgnoreCase(codec.name, "AV1")); - }), - codec_caps.end()); + std::erase_if(codec_caps, [](const RtpCodecCapability& codec) { + return !(absl::EqualsIgnoreCase(codec.name, "VP8") || + absl::EqualsIgnoreCase(codec.name, "AV1")); + }); EXPECT_TRUE(video_transceiver->SetCodecPreferences(codec_caps).ok()); auto offer2 = caller->CreateOffer(); auto& contents2 = offer2->description()->contents(); diff --git a/third_party/libwebrtc/pc/webrtc_sdp.cc b/third_party/libwebrtc/pc/webrtc_sdp.cc @@ -1883,11 +1883,9 @@ void RemoveDuplicateRidDescriptions(const std::vector<int>& payload_types, } // Remove every rid description that appears in the to_remove list. if (!to_remove.empty()) { - rids->erase(std::remove_if(rids->begin(), rids->end(), - [&to_remove](const RidDescription& rid) { - return to_remove.count(rid.rid) > 0; - }), - rids->end()); + std::erase_if(*rids, [&to_remove](const RidDescription& rid) { + return to_remove.contains(rid.rid); + }); } } diff --git a/third_party/libwebrtc/rtc_base/firewall_socket_server.cc b/third_party/libwebrtc/rtc_base/firewall_socket_server.cc @@ -10,7 +10,6 @@ #include "rtc_base/firewall_socket_server.h" -#include <algorithm> #include <cerrno> #include <cstddef> #include <cstdint> @@ -247,8 +246,7 @@ void FirewallManager::AddServer(FirewallSocketServer* server) { void FirewallManager::RemoveServer(FirewallSocketServer* server) { MutexLock scope(&mutex_); - servers_.erase(std::remove(servers_.begin(), servers_.end(), server), - servers_.end()); + std::erase(servers_, server); } void FirewallManager::AddRule(bool allow, diff --git a/third_party/libwebrtc/test/pc/e2e/sdp/sdp_changer.cc b/third_party/libwebrtc/test/pc/e2e/sdp/sdp_changer.cc @@ -10,7 +10,6 @@ #include "test/pc/e2e/sdp/sdp_changer.h" -#include <algorithm> #include <cstddef> #include <cstdint> #include <map> @@ -298,13 +297,10 @@ LocalAndRemoteSdp SignalingInterceptor::PatchVp8Offer( // Update transport_infos to add TransportInfo for each new media section. std::vector<TransportInfo> transport_infos = desc->transport_infos(); - transport_infos.erase(std::remove_if( - transport_infos.begin(), transport_infos.end(), - [this](const TransportInfo& ti) { - // Remove transport infos that correspond to simulcast video sections. - return context_.simulcast_infos_by_mid.find(ti.content_name) != - context_.simulcast_infos_by_mid.end(); - })); + std::erase_if(transport_infos, [this](const TransportInfo& ti) { + // Remove transport infos that correspond to simulcast video sections. + return context_.simulcast_infos_by_mid.contains(ti.content_name); + }); for (auto& info : context_.simulcast_infos) { for (auto& rid : info.rids) { transport_infos.emplace_back(rid, info.transport_description); @@ -434,13 +430,10 @@ LocalAndRemoteSdp SignalingInterceptor::PatchVp8Answer( // Restore mid/rid rtp header extensions std::vector<RtpExtension> extensions = media_desc->rtp_header_extensions(); // First remove existing rid/mid header extensions. - extensions.erase(std::remove_if(extensions.begin(), extensions.end(), - [](const webrtc::RtpExtension& e) { - return e.uri == RtpExtension::kMidUri || - e.uri == RtpExtension::kRidUri || - e.uri == - RtpExtension::kRepairedRidUri; - })); + std::erase_if(extensions, [](const webrtc::RtpExtension& e) { + return e.uri == RtpExtension::kMidUri || e.uri == RtpExtension::kRidUri || + e.uri == RtpExtension::kRepairedRidUri; + }); // Then add right ones. extensions.push_back(info.mid_extension);