tor-browser

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

commit 40c989b4f057de1be4688901156d55c63c87dc71
parent d08de09e11a7f9f993827e0c2cd1558ec55fec7f
Author: Michael Froman <mfroman@mozilla.com>
Date:   Wed, 15 Oct 2025 11:09:07 -0500

Bug 1993083 - Vendor libwebrtc from 4a9606085e

Upstream commit: https://webrtc.googlesource.com/src/+/4a9606085e9597de9c9aaff3fd03638dc8d05776
    Update receiver header extensions on SetRemoteContent

    This triggers the correct suppression of TSN when CCFB is in use.

    Bug: webrtc:383078466
    Change-Id: Id594224494cb35c19895cc428169680fdd1a006a
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/402441
    Commit-Queue: Harald Alvestrand <hta@webrtc.org>
    Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45235}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Mthird_party/libwebrtc/pc/channel.cc | 46++++++++++++++++++----------------------------
Mthird_party/libwebrtc/pc/channel_unittest.cc | 12++++++------
Mthird_party/libwebrtc/pc/congestion_control_integrationtest.cc | 3---
Mthird_party/libwebrtc/test/peer_scenario/tests/l4s_test.cc | 6+-----
5 files changed, 27 insertions(+), 44 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 /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc -libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-15T16:07:44.122493+00:00. +libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-15T16:08:58.408644+00:00. # base of lastest vendoring -4e039c999f +4a9606085e diff --git a/third_party/libwebrtc/pc/channel.cc b/third_party/libwebrtc/pc/channel.cc @@ -122,12 +122,9 @@ void RtpSendParametersFromMediaDescription( // response in new_params has no special packetization we amend // old_params by ignoring the packetization and fall back to standard // packetization instead. -// Returns true if codecs need to be changed. -RTCErrorOr<bool> MaybeIgnorePacketization( - const MediaChannelParameters& new_params, - MediaChannelParameters& old_params) { +RTCError MaybeIgnorePacketization(const MediaChannelParameters& new_params, + MediaChannelParameters& old_params) { flat_set<const Codec*> matched_codecs; - bool needs_update = false; for (Codec& codec : old_params.codecs) { if (absl::c_any_of(matched_codecs, [&](const Codec* c) { return codec.Matches(*c); })) { @@ -155,7 +152,6 @@ RTCErrorOr<bool> MaybeIgnorePacketization( if (may_ignore_packetization) { // Note: this writes into old_params codec.packetization = std::nullopt; - needs_update = true; } else if (!has_matching_packetization) { std::string error_desc = StringFormat( "Failed to set local answer due to incompatible codec " @@ -168,7 +164,7 @@ RTCErrorOr<bool> MaybeIgnorePacketization( matched_codecs.insert(&codec); } } - return needs_update; + return RTCError::OK(); } } // namespace @@ -1108,14 +1104,11 @@ bool VideoChannel::SetLocalContent_w(const MediaContentDescription* content, // offer by ignoring the packetiztion and fall back to standard packetization // instead. if (type == SdpType::kAnswer || type == SdpType::kPrAnswer) { - RTCErrorOr<bool> changed_codecs = - MaybeIgnorePacketization(recv_params, send_params); - if (!changed_codecs.ok()) { - error_desc = changed_codecs.error().message(); + RTCError status = MaybeIgnorePacketization(recv_params, send_params); + if (!status.ok()) { + error_desc = status.message(); return false; } - // In this case, we don't care if codecs are changed, because - // we always set the new send_params. } if (!media_receive_channel()->SetReceiverParameters(recv_params)) { @@ -1187,15 +1180,12 @@ bool VideoChannel::SetRemoteContent_w(const MediaContentDescription* content, // peer only accepts to send standard packetization we effectively amend our // offer by ignoring the packetiztion and fall back to standard packetization // instead. - bool needs_recv_params_update = false; if (type == SdpType::kAnswer || type == SdpType::kPrAnswer) { - RTCErrorOr<bool> codecs_changed = - MaybeIgnorePacketization(send_params, recv_params); - if (!codecs_changed.ok()) { - error_desc = codecs_changed.error().message(); + RTCError status = MaybeIgnorePacketization(send_params, recv_params); + if (!status.ok()) { + error_desc = status.message(); return false; } - needs_recv_params_update = codecs_changed.value(); } if (!media_send_channel()->SetSenderParameters(send_params)) { @@ -1205,15 +1195,8 @@ bool VideoChannel::SetRemoteContent_w(const MediaContentDescription* content, mid().c_str()); return false; } - // adjust receive streams based on send codec - media_receive_channel()->SetReceiverFeedbackParameters( - media_send_channel()->SendCodecHasLntf(), - media_send_channel()->SendCodecHasNack(), - media_send_channel()->SendCodecRtcpMode(), - media_send_channel()->SendCodecRtxTime()); - last_send_params_ = send_params; - - if (needs_recv_params_update) { + if (type == SdpType::kAnswer || type == SdpType::kPrAnswer) { + recv_params.extensions = send_params.extensions; if (!media_receive_channel()->SetReceiverParameters(recv_params)) { error_desc = StringFormat( "Failed to set recv parameters for m-section with mid='%s'.", @@ -1222,6 +1205,13 @@ bool VideoChannel::SetRemoteContent_w(const MediaContentDescription* content, } last_recv_params_ = recv_params; } + // adjust receive streams based on send codec + media_receive_channel()->SetReceiverFeedbackParameters( + media_send_channel()->SendCodecHasLntf(), + media_send_channel()->SendCodecHasNack(), + media_send_channel()->SendCodecRtcpMode(), + media_send_channel()->SendCodecRtxTime()); + last_send_params_ = send_params; return UpdateRemoteStreams_w(content, type, error_desc); } diff --git a/third_party/libwebrtc/pc/channel_unittest.cc b/third_party/libwebrtc/pc/channel_unittest.cc @@ -2420,16 +2420,16 @@ TEST_F(VideoChannelSingleThreadTest, ASSERT_TRUE(channel1_->SetRemoteContent(&remote, SdpType::kAnswer, err)) << err; - EXPECT_THAT( - media_receive_channel1_impl()->recv_codecs(), - ElementsAre(AllOf(Field(&webrtc::Codec::id, 96), + EXPECT_THAT(media_receive_channel1_impl()->recv_codecs(), + UnorderedElementsAre( + AllOf(Field(&webrtc::Codec::id, 96), Field(&webrtc::Codec::packetization, std::nullopt)), AllOf(Field(&webrtc::Codec::id, 97), Field(&webrtc::Codec::packetization, webrtc::kPacketizationParamRaw)))); - EXPECT_THAT( - media_send_channel1_impl()->send_codecs(), - ElementsAre(AllOf(Field(&webrtc::Codec::id, 97), + EXPECT_THAT(media_send_channel1_impl()->send_codecs(), + UnorderedElementsAre( + AllOf(Field(&webrtc::Codec::id, 97), Field(&webrtc::Codec::packetization, webrtc::kPacketizationParamRaw)), AllOf(Field(&webrtc::Codec::id, 96), diff --git a/third_party/libwebrtc/pc/congestion_control_integrationtest.cc b/third_party/libwebrtc/pc/congestion_control_integrationtest.cc @@ -113,14 +113,11 @@ TEST_F(PeerConnectionCongestionControlTest, NegotiatingCcfbRemovesTsn) { Not(Contains(Field("uri", &RtpExtension::uri, RtpExtension::kTransportSequenceNumberUri)))) << " in caller sender parameters"; - /* Caller receivers are not fixed yet. - TODO: issues.webrtc.org/383078466 - enable parameters = caller()->pc()->GetReceivers()[0]->GetParameters(); EXPECT_THAT(parameters.header_extensions, Not(Contains(Field("uri", &RtpExtension::uri, RtpExtension::kTransportSequenceNumberUri)))) << " in caller receiver parameters"; - */ /* Callee senders are not fixed yet. TODO: issues.webrtc.org/383078466 - enable parameters = callee()->pc()->GetSenders()[0]->GetParameters(); diff --git a/third_party/libwebrtc/test/peer_scenario/tests/l4s_test.cc b/third_party/libwebrtc/test/peer_scenario/tests/l4s_test.cc @@ -186,11 +186,7 @@ TEST(L4STest, NegotiateAndUseCcfbIfEnabled) { s.ProcessMessages(TimeDelta::Seconds(2)); EXPECT_GT(send_node_feedback_counter.FeedbackAccordingToRfc8888(), 0); - // TODO: bugs.webrtc.org/42225697 - Fix bug. Caller sends both transport - // sequence number feedback and congestion control feedback. So - // callee still send packets with transport sequence number header extensions - // even though it has been removed from the answer. - // EXPECT_EQ(send_node_feedback_counter.FeedbackAccordingToTransportCc(), 0); + EXPECT_EQ(send_node_feedback_counter.FeedbackAccordingToTransportCc(), 0); EXPECT_GT(ret_node_feedback_counter.FeedbackAccordingToRfc8888(), 0); EXPECT_EQ(ret_node_feedback_counter.FeedbackAccordingToTransportCc(), 0);