commit d4417d6b3dcad1fe4bcea854854fb527ba299dc8
parent 48a9e230e614972e4a73c49f911383474e50a368
Author: Michael Froman <mfroman@mozilla.com>
Date: Wed, 8 Oct 2025 15:57:13 -0500
Bug 1993083 - Vendor libwebrtc from 94f131f284
We cherry-picked this in bug 1990526
Upstream commit: https://webrtc.googlesource.com/src/+/94f131f284744506d33439de01a3a903a8e31501
Revert "Add test for transport-cc messages when CCFB is in use"
This reverts commit 32e68fcc6f3752aa0ac3f42f2c2f3729f04529b0.
Reason for revert: Reason for revert: Reverting https://webrtc-review.googlesource.com/c/src/+/396640 to investigate a downstream issue. This CL depends on https://webrtc-review.googlesource.com/c/src/+/396640 so to have a clean revert let's revert this one as well.
Bug: webrtc:383078466
Original change's description:
> Add test for transport-cc messages when CCFB is in use
>
> This verifies that earlier changes do prevent transport-cc
> messages from being generated.
>
> Bug: webrtc:383078466
> Change-Id: I83dd306a8d656ec698d92f6d0a5e3bef7c161a3a
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/372220
> Commit-Queue: Harald Alvestrand <hta@webrtc.org>
> Reviewed-by: Per Kjellander <perkj@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#44952}
Bug: webrtc:383078466, b/425662432, b/426394283
Change-Id: I52743f6015323207b2e0e2926050451cd64c13a5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/397781
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Christoffer Dewerin <jansson@webrtc.org>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45002}
Diffstat:
8 files changed, 458 insertions(+), 582 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-08T20:55:56.972570+00:00.
+libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-08T20:57:04.330700+00:00.
# base of lastest vendoring
-a473b69c06
+94f131f284
diff --git a/third_party/libwebrtc/moz-patch-stack/94f131f284.no-op-cherry-pick-msg b/third_party/libwebrtc/moz-patch-stack/94f131f284.no-op-cherry-pick-msg
@@ -1 +0,0 @@
-We cherry-picked this in bug 1990526
diff --git a/third_party/libwebrtc/moz-patch-stack/s0129.patch b/third_party/libwebrtc/moz-patch-stack/s0129.patch
@@ -1,123 +1,87 @@
From: Michael Froman <mjfroman@mac.com>
-Date: Wed, 24 Sep 2025 16:05:38 -0500
-Subject: Bug 1990526 - Cherry-pick upstream libwebrtc commit 94f131f284 r?ng
+Date: Wed, 24 Sep 2025 16:10:48 -0500
+Subject: Bug 1990526 - Cherry-pick upstream libwebrtc commit c48e9ba24e r?ng
-Upstream commit: https://webrtc.googlesource.com/src/+/94f131f284744506d33439de01a3a903a8e31501
- Revert "Add test for transport-cc messages when CCFB is in use"
+Upstream commit: https://webrtc.googlesource.com/src/+/c48e9ba24e35e55a00ee3aa1e89d9199e66781dd
+ Revert "Remove rtp_header_extensions_set()"
- This reverts commit 32e68fcc6f3752aa0ac3f42f2c2f3729f04529b0.
+ This reverts commit 3ff035e2787b7da182ee79e143da0b7ac099b4a8.
- Reason for revert: Reason for revert: Reverting https://webrtc-review.googlesource.com/c/src/+/396640 to investigate a downstream issue. This CL depends on https://webrtc-review.googlesource.com/c/src/+/396640 so to have a clean revert let's revert this one as well.
+ Reason for revert: Reverting https://webrtc-review.googlesource.com/c/src/+/396640 to investigate a downstream issue. This CL depends on https://webrtc-review.googlesource.com/c/src/+/396640 so to have a clean revert let's revert this one as well.
- Bug: webrtc:383078466
+ Bug: webrtc:425296984
Original change's description:
- > Add test for transport-cc messages when CCFB is in use
+ > Remove rtp_header_extensions_set()
>
- > This verifies that earlier changes do prevent transport-cc
- > messages from being generated.
+ > It seems to be unused and useless.
>
- > Bug: webrtc:383078466
- > Change-Id: I83dd306a8d656ec698d92f6d0a5e3bef7c161a3a
- > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/372220
+ > Bug: webrtc:425296984
+ > Change-Id: Iee68aec438889f8c1dd7ee69ea444606f17ff485
+ > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/396860
+ > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
> Commit-Queue: Harald Alvestrand <hta@webrtc.org>
- > Reviewed-by: Per Kjellander <perkj@webrtc.org>
- > Cr-Commit-Position: refs/heads/main@{#44952}
+ > Cr-Commit-Position: refs/heads/main@{#44968}
- Bug: webrtc:383078466, b/425662432, b/426394283
- Change-Id: I52743f6015323207b2e0e2926050451cd64c13a5
- Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/397781
- Reviewed-by: Per Kjellander <perkj@webrtc.org>
- Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
- Reviewed-by: Christoffer Dewerin <jansson@webrtc.org>
+ Bug: webrtc:425296984, b/425662432, b/426394283
+ Change-Id: I5e124a6fd4fbe8bc516716a6dd9645251f2bdce5
+ Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/397780
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
+ Reviewed-by: Christoffer Dewerin <jansson@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
- Cr-Commit-Position: refs/heads/main@{#45002}
+ Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
+ Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
+ Cr-Commit-Position: refs/heads/main@{#45006}
---
- pc/congestion_control_integrationtest.cc | 64 ------------------------
- 1 file changed, 64 deletions(-)
+ pc/channel.cc | 6 +++++-
+ pc/session_description.h | 11 ++++++++++-
+ 2 files changed, 15 insertions(+), 2 deletions(-)
-diff --git a/pc/congestion_control_integrationtest.cc b/pc/congestion_control_integrationtest.cc
-index da5612d99e..e5ba493d1a 100644
---- a/pc/congestion_control_integrationtest.cc
-+++ b/pc/congestion_control_integrationtest.cc
-@@ -27,13 +27,11 @@
-
- namespace webrtc {
-
--using ::testing::Contains;
- using ::testing::Eq;
- using ::testing::Field;
- using ::testing::Gt;
- using ::testing::HasSubstr;
- using ::testing::IsTrue;
--using ::testing::Ne;
- using ::testing::Not;
-
- class PeerConnectionCongestionControlTest
-@@ -180,66 +178,4 @@ TEST_F(PeerConnectionCongestionControlTest, TransportCcGetsUsed) {
- EXPECT_THAT(pc_internal->FeedbackAccordingToRfc8888CountForTesting(), Eq(0));
+diff --git a/pc/channel.cc b/pc/channel.cc
+index 2b548064a4..8b8d7a7ffb 100644
+--- a/pc/channel.cc
++++ b/pc/channel.cc
+@@ -99,7 +99,11 @@ void MediaChannelParametersFromMediaDescription(
+ desc->type() == MediaType::VIDEO);
+ params->is_stream_active = is_stream_active;
+ params->codecs = desc->codecs();
+- params->extensions = extensions;
++ // TODO: bugs.webrtc.org/11513 - See if we really need
++ // rtp_header_extensions_set() and remove it if we don't.
++ if (desc->rtp_header_extensions_set()) {
++ params->extensions = extensions;
++ }
+ params->rtcp.reduced_size = desc->rtcp_reduced_size();
+ params->rtcp.remote_estimate = desc->remote_estimate();
}
+diff --git a/pc/session_description.h b/pc/session_description.h
+index 37272c4106..4a330c5439 100644
+--- a/pc/session_description.h
++++ b/pc/session_description.h
+@@ -135,10 +135,18 @@ class MediaContentDescription {
+ }
+ void set_rtp_header_extensions(const RtpHeaderExtensions& extensions) {
+ rtp_header_extensions_ = extensions;
++ rtp_header_extensions_set_ = true;
+ }
+ void AddRtpHeaderExtension(const RtpExtension& ext) {
+ rtp_header_extensions_.push_back(ext);
+- }
++ rtp_header_extensions_set_ = true;
++ }
++ // We can't always tell if an empty list of header extensions is
++ // because the other side doesn't support them, or just isn't hooked up to
++ // signal them. For now we assume an empty list means no signaling, but
++ // provide the ClearRtpHeaderExtensions method to allow "no support" to be
++ // clearly indicated (i.e. when derived from other information).
++ bool rtp_header_extensions_set() const { return rtp_header_extensions_set_; }
+ const StreamParamsVec& streams() const { return send_streams_; }
+ // TODO(pthatcher): Remove this by giving mediamessage.cc access
+ // to MediaContentDescription
+@@ -254,6 +262,7 @@ class MediaContentDescription {
+ std::string bandwidth_type_ = kApplicationSpecificBandwidth;
--TEST_F(PeerConnectionCongestionControlTest, CcfbGetsUsedCalleeToCaller) {
-- SetFieldTrials("WebRTC-RFC8888CongestionControlFeedback/Enabled/");
-- ASSERT_TRUE(CreatePeerConnectionWrappers());
-- ConnectFakeSignaling();
-- callee()->AddVideoTrack();
-- // Add transceivers to caller in order to accomodate reception
-- caller()->pc()->AddTransceiver(MediaType::VIDEO);
-- auto parameters = caller()->pc()->GetSenders()[0]->GetParameters();
-- caller()->CreateAndSetAndSignalOffer();
-- ASSERT_THAT(WaitUntil([&] { return SignalingStateStable(); }, IsTrue()),
-- IsRtcOk());
--
-- std::vector<RtpHeaderExtensionCapability> negotiated_header_extensions =
-- caller()->pc()->GetTransceivers()[0]->GetNegotiatedHeaderExtensions();
-- EXPECT_THAT(
-- negotiated_header_extensions,
-- Not(Contains(
-- AllOf(Field("uri", &RtpHeaderExtensionCapability::uri,
-- RtpExtension::kTransportSequenceNumberUri),
-- Not(Field("direction", &RtpHeaderExtensionCapability::direction,
-- RtpTransceiverDirection::kStopped))))))
-- << " in caller negotiated header extensions";
--
-- parameters = caller()->pc()->GetSenders()[0]->GetParameters();
-- EXPECT_THAT(parameters.header_extensions,
-- Not(Contains(Field("uri", &RtpExtension::uri,
-- RtpExtension::kTransportSequenceNumberUri))))
-- << " in caller sender parameters";
-- parameters = caller()->pc()->GetReceivers()[0]->GetParameters();
-- EXPECT_THAT(parameters.header_extensions,
-- Not(Contains(Field("uri", &RtpExtension::uri,
-- RtpExtension::kTransportSequenceNumberUri))))
-- << " in caller receiver parameters";
--
-- parameters = callee()->pc()->GetSenders()[0]->GetParameters();
-- EXPECT_THAT(parameters.header_extensions,
-- Not(Contains(Field("uri", &RtpExtension::uri,
-- RtpExtension::kTransportSequenceNumberUri))))
-- << " in callee sender parameters";
--
-- parameters = callee()->pc()->GetReceivers()[0]->GetParameters();
-- EXPECT_THAT(parameters.header_extensions,
-- Not(Contains(Field("uri", &RtpExtension::uri,
-- RtpExtension::kTransportSequenceNumberUri))))
-- << " in callee receiver parameters";
--
-- MediaExpectations media_expectations;
-- media_expectations.CallerExpectsSomeVideo();
-- ASSERT_TRUE(ExpectNewFrames(media_expectations));
-- auto pc_internal = callee()->pc_internal();
-- EXPECT_THAT(
-- WaitUntil(
-- [&] {
-- return pc_internal->FeedbackAccordingToRfc8888CountForTesting() > 2;
-- },
-- IsTrue()),
-- IsRtcOk());
-- // There should be no transport-cc generated.
-- EXPECT_THAT(pc_internal->FeedbackAccordingToTransportCcCountForTesting(),
-- Eq(0));
--}
--
- } // namespace webrtc
+ std::vector<RtpExtension> rtp_header_extensions_;
++ bool rtp_header_extensions_set_ = false;
+ StreamParamsVec send_streams_;
+ bool conference_mode_ = false;
+ RtpTransceiverDirection direction_ = RtpTransceiverDirection::kSendRecv;
diff --git a/third_party/libwebrtc/moz-patch-stack/s0130.patch b/third_party/libwebrtc/moz-patch-stack/s0130.patch
@@ -1,87 +1,55 @@
From: Michael Froman <mjfroman@mac.com>
-Date: Wed, 24 Sep 2025 16:10:48 -0500
-Subject: Bug 1990526 - Cherry-pick upstream libwebrtc commit c48e9ba24e r?ng
+Date: Wed, 24 Sep 2025 16:14:15 -0500
+Subject: Bug 1990526 - Cherry-pick upstream libwebrtc commit 306f5a67ac r?ng
-Upstream commit: https://webrtc.googlesource.com/src/+/c48e9ba24e35e55a00ee3aa1e89d9199e66781dd
- Revert "Remove rtp_header_extensions_set()"
+Upstream commit: https://webrtc.googlesource.com/src/+/306f5a67ac952956ecec09fb1ec7ecfd4f593c60
+ Revert "Enable scenario test for L4S"
- This reverts commit 3ff035e2787b7da182ee79e143da0b7ac099b4a8.
+ This reverts commit d8507ca5eb936c46e9b35baab2090522f6d0a6fd.
Reason for revert: Reverting https://webrtc-review.googlesource.com/c/src/+/396640 to investigate a downstream issue. This CL depends on https://webrtc-review.googlesource.com/c/src/+/396640 so to have a clean revert let's revert this one as well.
- Bug: webrtc:425296984
+ Bug: webrtc:42225697, webrtc:383078466
Original change's description:
- > Remove rtp_header_extensions_set()
+ > Enable scenario test for L4S
>
- > It seems to be unused and useless.
+ > The fix has landed.
>
- > Bug: webrtc:425296984
- > Change-Id: Iee68aec438889f8c1dd7ee69ea444606f17ff485
- > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/396860
- > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
- > Commit-Queue: Harald Alvestrand <hta@webrtc.org>
- > Cr-Commit-Position: refs/heads/main@{#44968}
+ > Bug: webrtc:42225697, webrtc:383078466
+ > Change-Id: I9838c9ed582ddef05d5d1593c5a3e6d9a60543aa
+ > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/396802
+ > Reviewed-by: Per Kjellander <perkj@webrtc.org>
+ > Commit-Queue: Per Kjellander <perkj@webrtc.org>
+ > Auto-Submit: Harald Alvestrand <hta@webrtc.org>
+ > Cr-Commit-Position: refs/heads/main@{#44955}
- Bug: webrtc:425296984, b/425662432, b/426394283
- Change-Id: I5e124a6fd4fbe8bc516716a6dd9645251f2bdce5
- Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/397780
- Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
- Reviewed-by: Christoffer Dewerin <jansson@webrtc.org>
- Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
- Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
+ No-Try: True
+ Bug: webrtc:42225697, webrtc:383078466, b/425662432, b/426394283
+ Change-Id: Id2bd39bfb1690539eb8219d666fd1a82a8b297b6
+ Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/397880
Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
- Cr-Commit-Position: refs/heads/main@{#45006}
+ Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
+ Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
+ Reviewed-by: Harald Alvestrand <hta@webrtc.org>
+ Cr-Commit-Position: refs/heads/main@{#45010}
---
- pc/channel.cc | 6 +++++-
- pc/session_description.h | 11 ++++++++++-
- 2 files changed, 15 insertions(+), 2 deletions(-)
+ test/peer_scenario/tests/l4s_test.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
-diff --git a/pc/channel.cc b/pc/channel.cc
-index 2b548064a4..8b8d7a7ffb 100644
---- a/pc/channel.cc
-+++ b/pc/channel.cc
-@@ -99,7 +99,11 @@ void MediaChannelParametersFromMediaDescription(
- desc->type() == MediaType::VIDEO);
- params->is_stream_active = is_stream_active;
- params->codecs = desc->codecs();
-- params->extensions = extensions;
-+ // TODO: bugs.webrtc.org/11513 - See if we really need
-+ // rtp_header_extensions_set() and remove it if we don't.
-+ if (desc->rtp_header_extensions_set()) {
-+ params->extensions = extensions;
-+ }
- params->rtcp.reduced_size = desc->rtcp_reduced_size();
- params->rtcp.remote_estimate = desc->remote_estimate();
- }
-diff --git a/pc/session_description.h b/pc/session_description.h
-index 37272c4106..4a330c5439 100644
---- a/pc/session_description.h
-+++ b/pc/session_description.h
-@@ -135,10 +135,18 @@ class MediaContentDescription {
- }
- void set_rtp_header_extensions(const RtpHeaderExtensions& extensions) {
- rtp_header_extensions_ = extensions;
-+ rtp_header_extensions_set_ = true;
- }
- void AddRtpHeaderExtension(const RtpExtension& ext) {
- rtp_header_extensions_.push_back(ext);
-- }
-+ rtp_header_extensions_set_ = true;
-+ }
-+ // We can't always tell if an empty list of header extensions is
-+ // because the other side doesn't support them, or just isn't hooked up to
-+ // signal them. For now we assume an empty list means no signaling, but
-+ // provide the ClearRtpHeaderExtensions method to allow "no support" to be
-+ // clearly indicated (i.e. when derived from other information).
-+ bool rtp_header_extensions_set() const { return rtp_header_extensions_set_; }
- const StreamParamsVec& streams() const { return send_streams_; }
- // TODO(pthatcher): Remove this by giving mediamessage.cc access
- // to MediaContentDescription
-@@ -254,6 +262,7 @@ class MediaContentDescription {
- std::string bandwidth_type_ = kApplicationSpecificBandwidth;
+diff --git a/test/peer_scenario/tests/l4s_test.cc b/test/peer_scenario/tests/l4s_test.cc
+index 378ea2e746..ce110f9bf0 100644
+--- a/test/peer_scenario/tests/l4s_test.cc
++++ b/test/peer_scenario/tests/l4s_test.cc
+@@ -185,7 +185,11 @@ TEST(L4STest, NegotiateAndUseCcfbIfEnabled) {
+
+ s.ProcessMessages(TimeDelta::Seconds(2));
+ EXPECT_GT(send_node_feedback_counter.FeedbackAccordingToRfc8888(), 0);
+- EXPECT_EQ(send_node_feedback_counter.FeedbackAccordingToTransportCc(), 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);
- std::vector<RtpExtension> rtp_header_extensions_;
-+ bool rtp_header_extensions_set_ = false;
- StreamParamsVec send_streams_;
- bool conference_mode_ = false;
- RtpTransceiverDirection direction_ = RtpTransceiverDirection::kSendRecv;
+ EXPECT_GT(ret_node_feedback_counter.FeedbackAccordingToRfc8888(), 0);
+ EXPECT_EQ(ret_node_feedback_counter.FeedbackAccordingToTransportCc(), 0);
diff --git a/third_party/libwebrtc/moz-patch-stack/s0131.patch b/third_party/libwebrtc/moz-patch-stack/s0131.patch
@@ -1,55 +1,282 @@
From: Michael Froman <mjfroman@mac.com>
-Date: Wed, 24 Sep 2025 16:14:15 -0500
-Subject: Bug 1990526 - Cherry-pick upstream libwebrtc commit 306f5a67ac r?ng
+Date: Wed, 24 Sep 2025 16:16:38 -0500
+Subject: Bug 1990526 - Cherry-pick upstream libwebrtc commit d27b4ef208 r?ng
-Upstream commit: https://webrtc.googlesource.com/src/+/306f5a67ac952956ecec09fb1ec7ecfd4f593c60
- Revert "Enable scenario test for L4S"
+Upstream commit: https://webrtc.googlesource.com/src/+/d27b4ef20820c2aeef358b4a465a8b514517b9f3
+ Revert "Change SetLocalContent / SetRemoteContent to update header extensions"
- This reverts commit d8507ca5eb936c46e9b35baab2090522f6d0a6fd.
+ This reverts commit 9496cc0e1b8cc50185ded19522b68d7c94c17298.
- Reason for revert: Reverting https://webrtc-review.googlesource.com/c/src/+/396640 to investigate a downstream issue. This CL depends on https://webrtc-review.googlesource.com/c/src/+/396640 so to have a clean revert let's revert this one as well.
+ Reason for revert: Investigating downstream issue.
- Bug: webrtc:42225697, webrtc:383078466
+ Bug: webrtc:383078466
Original change's description:
- > Enable scenario test for L4S
+ > Change SetLocalContent / SetRemoteContent to update header extensions
>
- > The fix has landed.
+ > The functions were skipping over updating the sender and receiver when
+ > the list of header extensions was changed. Now it should be better.
>
- > Bug: webrtc:42225697, webrtc:383078466
- > Change-Id: I9838c9ed582ddef05d5d1593c5a3e6d9a60543aa
- > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/396802
+ > Bug: webrtc:383078466, b/425662432, b/426394283
+ > Change-Id: I1b93ed1ba4bbbf6c5b13861a6e21a7a7c82a5a66
+ > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/396640
> Reviewed-by: Per Kjellander <perkj@webrtc.org>
- > Commit-Queue: Per Kjellander <perkj@webrtc.org>
- > Auto-Submit: Harald Alvestrand <hta@webrtc.org>
- > Cr-Commit-Position: refs/heads/main@{#44955}
+ > Commit-Queue: Harald Alvestrand <hta@webrtc.org>
+ > Cr-Commit-Position: refs/heads/main@{#44951}
- No-Try: True
- Bug: webrtc:42225697, webrtc:383078466, b/425662432, b/426394283
- Change-Id: Id2bd39bfb1690539eb8219d666fd1a82a8b297b6
- Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/397880
- Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
+ Bug: webrtc:383078466
+ Change-Id: Ie6db6d995021a8699c1c7aa91334ea0ea0e37c1f
+ Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/397820
+ Reviewed-by: Per Kjellander <perkj@webrtc.org>
+ Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
- Reviewed-by: Harald Alvestrand <hta@webrtc.org>
- Cr-Commit-Position: refs/heads/main@{#45010}
+ Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
+ Reviewed-by: Christoffer Dewerin <jansson@webrtc.org>
+ Cr-Commit-Position: refs/heads/main@{#45012}
---
- test/peer_scenario/tests/l4s_test.cc | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
+ media/base/codec.h | 3 --
+ pc/channel.cc | 15 ++----
+ pc/channel_unittest.cc | 24 ++++------
+ pc/congestion_control_integrationtest.cc | 58 ++----------------------
+ pc/peer_connection_integrationtest.cc | 14 ++----
+ 5 files changed, 20 insertions(+), 94 deletions(-)
-diff --git a/test/peer_scenario/tests/l4s_test.cc b/test/peer_scenario/tests/l4s_test.cc
-index 378ea2e746..ce110f9bf0 100644
---- a/test/peer_scenario/tests/l4s_test.cc
-+++ b/test/peer_scenario/tests/l4s_test.cc
-@@ -185,7 +185,11 @@ TEST(L4STest, NegotiateAndUseCcfbIfEnabled) {
-
- s.ProcessMessages(TimeDelta::Seconds(2));
- EXPECT_GT(send_node_feedback_counter.FeedbackAccordingToRfc8888(), 0);
-- EXPECT_EQ(send_node_feedback_counter.FeedbackAccordingToTransportCc(), 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_GT(ret_node_feedback_counter.FeedbackAccordingToRfc8888(), 0);
- EXPECT_EQ(ret_node_feedback_counter.FeedbackAccordingToTransportCc(), 0);
+diff --git a/media/base/codec.h b/media/base/codec.h
+index e26306df20..694589dd14 100644
+--- a/media/base/codec.h
++++ b/media/base/codec.h
+@@ -192,9 +192,6 @@ struct RTC_EXPORT Codec {
+ sink.Append("video/");
+ }
+ absl::Format(&sink, "%s/%d/%d", c.name, c.clockrate, c.channels);
+- if (c.packetization) {
+- absl::Format(&sink, ",packetization=%s", *c.packetization);
+- }
+ for (auto param : c.params) {
+ sink.Append(";");
+ sink.Append(param.first);
+diff --git a/pc/channel.cc b/pc/channel.cc
+index 8b8d7a7ffb..1ab970f245 100644
+--- a/pc/channel.cc
++++ b/pc/channel.cc
+@@ -99,7 +99,7 @@ void MediaChannelParametersFromMediaDescription(
+ desc->type() == MediaType::VIDEO);
+ params->is_stream_active = is_stream_active;
+ params->codecs = desc->codecs();
+- // TODO: bugs.webrtc.org/11513 - See if we really need
++ // TODO(bugs.webrtc.org/11513): See if we really need
+ // rtp_header_extensions_set() and remove it if we don't.
+ if (desc->rtp_header_extensions_set()) {
+ params->extensions = extensions;
+@@ -915,6 +915,7 @@ bool VoiceChannel::SetLocalContent_w(const MediaContentDescription* content,
+ }
+ }
+ }
++
+ last_recv_params_ = recv_params;
+
+ if (!UpdateLocalStreams_w(content->streams(), type, error_desc)) {
+@@ -925,7 +926,7 @@ bool VoiceChannel::SetLocalContent_w(const MediaContentDescription* content,
+ set_local_content_direction(content->direction());
+ UpdateMediaSendRecvState_w();
+
+- // Disabled because suggesting PTs takes thread jumps.
++ // Disabled because suggeting PTs takes thread jumps.
+ // TODO: https://issues.webrtc.org/360058654 - reenable after cleanup
+ // RTC_DCHECK_BLOCK_COUNT_NO_MORE_THAN(0);
+
+@@ -1041,6 +1042,7 @@ bool VideoChannel::SetLocalContent_w(const MediaContentDescription* content,
+ media_send_channel()->SetExtmapAllowMixed(content->extmap_allow_mixed());
+
+ VideoReceiverParameters recv_params = last_recv_params_;
++
+ MediaChannelParametersFromMediaDescription(
+ content, header_extensions,
+ RtpTransceiverDirectionHasRecv(content->direction()), &recv_params);
+@@ -1115,12 +1117,7 @@ bool VideoChannel::SetLocalContent_w(const MediaContentDescription* content,
+
+ last_recv_params_ = recv_params;
+
+- // Also update send parameters if header extensions are changed.
+- needs_send_params_update |=
+- (last_send_params_.extensions != header_extensions &&
+- !send_params.codecs.empty());
+ if (needs_send_params_update) {
+- send_params.extensions = header_extensions;
+ if (!media_send_channel()->SetSenderParameters(send_params)) {
+ error_desc = StringFormat(
+ "Failed to set send parameters for m-section with mid='%s'.",
+@@ -1231,11 +1228,7 @@ bool VideoChannel::SetRemoteContent_w(const MediaContentDescription* content,
+ media_send_channel()->SendCodecRtxTime());
+ last_send_params_ = send_params;
+
+- needs_recv_params_update |=
+- (recv_params.extensions != send_params.extensions &&
+- !recv_params.codecs.empty());
+ if (needs_recv_params_update) {
+- 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'.",
+diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc
+index 4bb9573632..e3488a98a9 100644
+--- a/pc/channel_unittest.cc
++++ b/pc/channel_unittest.cc
+@@ -2385,22 +2385,18 @@ TEST_F(VideoChannelSingleThreadTest,
+
+ EXPECT_THAT(
+ media_receive_channel1_impl()->recv_codecs(),
+- ElementsAre(
+- AllOf(Field("id", &webrtc::Codec::id, 96),
+- Field("packetization", &webrtc::Codec::packetization, "foo")),
+- AllOf(Field("id", &webrtc::Codec::id, 98),
+- Field("packetization", &webrtc::Codec::packetization,
+- std::nullopt))));
++ ElementsAre(AllOf(Field(&webrtc::Codec::id, 96),
++ Field(&webrtc::Codec::packetization, "foo")),
++ AllOf(Field(&webrtc::Codec::id, 98),
++ Field(&webrtc::Codec::packetization, std::nullopt))));
+ EXPECT_THAT(
+ media_send_channel1_impl()->send_codecs(),
+- ElementsAre(
+- AllOf(Field("id", &webrtc::Codec::id, 96),
+- Field("packetization", &webrtc::Codec::packetization, "foo")),
+- AllOf(Field("id", &webrtc::Codec::id, 97),
+- Field("packetization", &webrtc::Codec::packetization, "bar")),
+- AllOf(Field("id", &webrtc::Codec::id, 99),
+- Field("packetization", &webrtc::Codec::packetization,
+- std::nullopt))));
++ ElementsAre(AllOf(Field(&webrtc::Codec::id, 96),
++ Field(&webrtc::Codec::packetization, "foo")),
++ AllOf(Field(&webrtc::Codec::id, 97),
++ Field(&webrtc::Codec::packetization, "bar")),
++ AllOf(Field(&webrtc::Codec::id, 99),
++ Field(&webrtc::Codec::packetization, std::nullopt))));
+ }
+
+ TEST_F(VideoChannelSingleThreadTest,
+diff --git a/pc/congestion_control_integrationtest.cc b/pc/congestion_control_integrationtest.cc
+index e5ba493d1a..d93a31924f 100644
+--- a/pc/congestion_control_integrationtest.cc
++++ b/pc/congestion_control_integrationtest.cc
+@@ -12,13 +12,9 @@
+ // are correctly negotiated in the SDP offer/answer.
+
+ #include <string>
+-#include <vector>
+
+ #include "absl/strings/str_cat.h"
+-#include "api/media_types.h"
+ #include "api/peer_connection_interface.h"
+-#include "api/rtp_parameters.h"
+-#include "api/rtp_transceiver_direction.h"
+ #include "api/test/rtc_error_matchers.h"
+ #include "pc/test/integration_test_helpers.h"
+ #include "test/gmock.h"
+@@ -27,12 +23,11 @@
+
+ namespace webrtc {
+
+-using ::testing::Eq;
+-using ::testing::Field;
++using testing::Eq;
+ using ::testing::Gt;
+-using ::testing::HasSubstr;
++using testing::HasSubstr;
+ using ::testing::IsTrue;
+-using ::testing::Not;
++using testing::Not;
+
+ class PeerConnectionCongestionControlTest
+ : public PeerConnectionIntegrationBaseTest {
+@@ -82,53 +77,6 @@ TEST_F(PeerConnectionCongestionControlTest, ReceiveOfferSetsCcfbFlag) {
+ EXPECT_THAT(answer_str, Not(HasSubstr("transport-cc")));
+ }
+
+-TEST_F(PeerConnectionCongestionControlTest, NegotiatingCcfbRemovesTsn) {
+- SetFieldTrials("WebRTC-RFC8888CongestionControlFeedback/Enabled/");
+- ASSERT_TRUE(CreatePeerConnectionWrappers());
+- ConnectFakeSignalingForSdpOnly();
+- callee()->AddVideoTrack();
+- // Add transceivers to caller in order to accomodate reception
+- caller()->pc()->AddTransceiver(MediaType::VIDEO);
+- auto parameters = caller()->pc()->GetSenders()[0]->GetParameters();
+- caller()->CreateAndSetAndSignalOffer();
+- ASSERT_THAT(WaitUntil([&] { return SignalingStateStable(); }, IsTrue()),
+- IsRtcOk());
+-
+- std::vector<RtpHeaderExtensionCapability> negotiated_header_extensions =
+- caller()->pc()->GetTransceivers()[0]->GetNegotiatedHeaderExtensions();
+- EXPECT_THAT(
+- negotiated_header_extensions,
+- Not(Contains(
+- AllOf(Field("uri", &RtpHeaderExtensionCapability::uri,
+- RtpExtension::kTransportSequenceNumberUri),
+- Not(Field("direction", &RtpHeaderExtensionCapability::direction,
+- RtpTransceiverDirection::kStopped))))))
+- << " in caller negotiated header extensions";
+-
+- parameters = caller()->pc()->GetSenders()[0]->GetParameters();
+- EXPECT_THAT(parameters.header_extensions,
+- Not(Contains(Field("uri", &RtpExtension::uri,
+- RtpExtension::kTransportSequenceNumberUri))))
+- << " in caller sender parameters";
+- parameters = caller()->pc()->GetReceivers()[0]->GetParameters();
+- EXPECT_THAT(parameters.header_extensions,
+- Not(Contains(Field("uri", &RtpExtension::uri,
+- RtpExtension::kTransportSequenceNumberUri))))
+- << " in caller receiver parameters";
+-
+- parameters = callee()->pc()->GetSenders()[0]->GetParameters();
+- EXPECT_THAT(parameters.header_extensions,
+- Not(Contains(Field("uri", &RtpExtension::uri,
+- RtpExtension::kTransportSequenceNumberUri))))
+- << " in callee sender parameters";
+-
+- parameters = callee()->pc()->GetReceivers()[0]->GetParameters();
+- EXPECT_THAT(parameters.header_extensions,
+- Not(Contains(Field("uri", &RtpExtension::uri,
+- RtpExtension::kTransportSequenceNumberUri))))
+- << " in callee receiver parameters";
+-}
+-
+ TEST_F(PeerConnectionCongestionControlTest, CcfbGetsUsed) {
+ SetFieldTrials("WebRTC-RFC8888CongestionControlFeedback/Enabled/");
+ ASSERT_TRUE(CreatePeerConnectionWrappers());
+diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc
+index 4d4ec552d7..3a2babda3e 100644
+--- a/pc/peer_connection_integrationtest.cc
++++ b/pc/peer_connection_integrationtest.cc
+@@ -4631,9 +4631,8 @@ TEST_F(PeerConnectionIntegrationTestUnifiedPlan,
+ PeerConnectionInterface::kStable);
+ }
+
+-// TODO: issues.webrtc.org/425336456 - figure out correct behavior and reenable
+ TEST_F(PeerConnectionIntegrationTestUnifiedPlan,
+- DISABLED_OnlyOnePairWantsCorruptionScorePlumbing) {
++ OnlyOnePairWantsCorruptionScorePlumbing) {
+ // In order for corruption score to be logged, encryption of RTP header
+ // extensions must be allowed.
+ CryptoOptions crypto_options;
+@@ -4657,19 +4656,12 @@ TEST_F(PeerConnectionIntegrationTestUnifiedPlan,
+ ASSERT_THAT(
+ WaitUntil([&] { return SignalingStateStable(); }, ::testing::IsTrue()),
+ IsRtcOk());
+- std::vector<RtpHeaderExtensionCapability> negotiated_extensions =
+- caller()->pc()->GetTransceivers()[0]->GetNegotiatedHeaderExtensions();
+- ASSERT_THAT(negotiated_extensions,
+- Contains(Field("uri", &RtpHeaderExtensionCapability::uri,
+- RtpExtension::kCorruptionDetectionUri)));
+ ASSERT_THAT(WaitUntil([&] { return caller()->GetCorruptionScoreCount(); },
+ ::testing::Gt(0), {.timeout = kMaxWaitForStats}),
+- IsRtcOk())
+- << "Waiting for caller corruption score count > 0";
++ IsRtcOk());
+ ASSERT_THAT(WaitUntil([&] { return callee()->GetCorruptionScoreCount(); },
+ ::testing::Eq(0), {.timeout = kMaxWaitForStats}),
+- IsRtcOk())
+- << "Waiting for callee corruption score count = 0";
++ IsRtcOk());
+
+ for (const auto& pair : {caller(), callee()}) {
+ scoped_refptr<const RTCStatsReport> report = pair->NewGetStats();
diff --git a/third_party/libwebrtc/moz-patch-stack/s0132.patch b/third_party/libwebrtc/moz-patch-stack/s0132.patch
@@ -1,282 +1,47 @@
-From: Michael Froman <mjfroman@mac.com>
-Date: Wed, 24 Sep 2025 16:16:38 -0500
-Subject: Bug 1990526 - Cherry-pick upstream libwebrtc commit d27b4ef208 r?ng
+From: Michael Froman <mfroman@mozilla.com>
+Date: Wed, 8 Oct 2025 17:49:00 +0000
+Subject: Bug 1980501 - use forward class decl rather than include
+ audio_state.h r?ng!
-Upstream commit: https://webrtc.googlesource.com/src/+/d27b4ef20820c2aeef358b4a465a8b514517b9f3
- Revert "Change SetLocalContent / SetRemoteContent to update header extensions"
+This avoids code outside of libwebrtc inadvertently including
+rtc_base/containers/flat_set.h which uses c++20 features. Once
+the rest of the Mozilla tree is compiling with c++20, we can
+remove this modification (see Bug 1768116).
- This reverts commit 9496cc0e1b8cc50185ded19522b68d7c94c17298.
-
- Reason for revert: Investigating downstream issue.
-
- Bug: webrtc:383078466
- Original change's description:
- > Change SetLocalContent / SetRemoteContent to update header extensions
- >
- > The functions were skipping over updating the sender and receiver when
- > the list of header extensions was changed. Now it should be better.
- >
- > Bug: webrtc:383078466, b/425662432, b/426394283
- > Change-Id: I1b93ed1ba4bbbf6c5b13861a6e21a7a7c82a5a66
- > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/396640
- > Reviewed-by: Per Kjellander <perkj@webrtc.org>
- > Commit-Queue: Harald Alvestrand <hta@webrtc.org>
- > Cr-Commit-Position: refs/heads/main@{#44951}
-
- Bug: webrtc:383078466
- Change-Id: Ie6db6d995021a8699c1c7aa91334ea0ea0e37c1f
- Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/397820
- Reviewed-by: Per Kjellander <perkj@webrtc.org>
- Reviewed-by: Harald Alvestrand <hta@webrtc.org>
- Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
- Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
- Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
- Reviewed-by: Christoffer Dewerin <jansson@webrtc.org>
- Cr-Commit-Position: refs/heads/main@{#45012}
+Differential Revision: https://phabricator.services.mozilla.com/D267993
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/9c487a574d218cc1c261b646c501db4d159754f0
---
- media/base/codec.h | 3 --
- pc/channel.cc | 15 ++----
- pc/channel_unittest.cc | 24 ++++------
- pc/congestion_control_integrationtest.cc | 58 ++----------------------
- pc/peer_connection_integrationtest.cc | 14 ++----
- 5 files changed, 20 insertions(+), 94 deletions(-)
+ audio/audio_receive_stream.h | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
-diff --git a/media/base/codec.h b/media/base/codec.h
-index e26306df20..694589dd14 100644
---- a/media/base/codec.h
-+++ b/media/base/codec.h
-@@ -192,9 +192,6 @@ struct RTC_EXPORT Codec {
- sink.Append("video/");
- }
- absl::Format(&sink, "%s/%d/%d", c.name, c.clockrate, c.channels);
-- if (c.packetization) {
-- absl::Format(&sink, ",packetization=%s", *c.packetization);
-- }
- for (auto param : c.params) {
- sink.Append(";");
- sink.Append(param.first);
-diff --git a/pc/channel.cc b/pc/channel.cc
-index 8b8d7a7ffb..1ab970f245 100644
---- a/pc/channel.cc
-+++ b/pc/channel.cc
-@@ -99,7 +99,7 @@ void MediaChannelParametersFromMediaDescription(
- desc->type() == MediaType::VIDEO);
- params->is_stream_active = is_stream_active;
- params->codecs = desc->codecs();
-- // TODO: bugs.webrtc.org/11513 - See if we really need
-+ // TODO(bugs.webrtc.org/11513): See if we really need
- // rtp_header_extensions_set() and remove it if we don't.
- if (desc->rtp_header_extensions_set()) {
- params->extensions = extensions;
-@@ -915,6 +915,7 @@ bool VoiceChannel::SetLocalContent_w(const MediaContentDescription* content,
- }
- }
- }
+diff --git a/audio/audio_receive_stream.h b/audio/audio_receive_stream.h
+index bc248120ef..fd00dfb3ed 100644
+--- a/audio/audio_receive_stream.h
++++ b/audio/audio_receive_stream.h
+@@ -31,7 +31,11 @@
+ #include "api/scoped_refptr.h"
+ #include "api/sequence_checker.h"
+ #include "api/transport/rtp/rtp_source.h"
++// This can be removed after Bug 1768116 enables
++// c++20 builds across the entire Mozilla tree.
++#if !defined(WEBRTC_MOZILLA_BUILD)
+ #include "audio/audio_state.h"
++#endif
+ #include "call/audio_receive_stream.h"
+ #include "call/audio_state.h"
+ #include "call/syncable.h"
+@@ -43,6 +47,14 @@ class PacketRouter;
+ class RtpStreamReceiverControllerInterface;
+ class RtpStreamReceiverInterface;
+
++// This can be removed after Bug 1768116 enables
++// c++20 builds across the entire Mozilla tree.
++#if defined(WEBRTC_MOZILLA_BUILD)
++namespace internal {
++class AudioState;
++}
++#endif
+
- last_recv_params_ = recv_params;
-
- if (!UpdateLocalStreams_w(content->streams(), type, error_desc)) {
-@@ -925,7 +926,7 @@ bool VoiceChannel::SetLocalContent_w(const MediaContentDescription* content,
- set_local_content_direction(content->direction());
- UpdateMediaSendRecvState_w();
-
-- // Disabled because suggesting PTs takes thread jumps.
-+ // Disabled because suggeting PTs takes thread jumps.
- // TODO: https://issues.webrtc.org/360058654 - reenable after cleanup
- // RTC_DCHECK_BLOCK_COUNT_NO_MORE_THAN(0);
-
-@@ -1041,6 +1042,7 @@ bool VideoChannel::SetLocalContent_w(const MediaContentDescription* content,
- media_send_channel()->SetExtmapAllowMixed(content->extmap_allow_mixed());
-
- VideoReceiverParameters recv_params = last_recv_params_;
-+
- MediaChannelParametersFromMediaDescription(
- content, header_extensions,
- RtpTransceiverDirectionHasRecv(content->direction()), &recv_params);
-@@ -1115,12 +1117,7 @@ bool VideoChannel::SetLocalContent_w(const MediaContentDescription* content,
-
- last_recv_params_ = recv_params;
-
-- // Also update send parameters if header extensions are changed.
-- needs_send_params_update |=
-- (last_send_params_.extensions != header_extensions &&
-- !send_params.codecs.empty());
- if (needs_send_params_update) {
-- send_params.extensions = header_extensions;
- if (!media_send_channel()->SetSenderParameters(send_params)) {
- error_desc = StringFormat(
- "Failed to set send parameters for m-section with mid='%s'.",
-@@ -1231,11 +1228,7 @@ bool VideoChannel::SetRemoteContent_w(const MediaContentDescription* content,
- media_send_channel()->SendCodecRtxTime());
- last_send_params_ = send_params;
-
-- needs_recv_params_update |=
-- (recv_params.extensions != send_params.extensions &&
-- !recv_params.codecs.empty());
- if (needs_recv_params_update) {
-- 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'.",
-diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc
-index 4bb9573632..e3488a98a9 100644
---- a/pc/channel_unittest.cc
-+++ b/pc/channel_unittest.cc
-@@ -2385,22 +2385,18 @@ TEST_F(VideoChannelSingleThreadTest,
-
- EXPECT_THAT(
- media_receive_channel1_impl()->recv_codecs(),
-- ElementsAre(
-- AllOf(Field("id", &webrtc::Codec::id, 96),
-- Field("packetization", &webrtc::Codec::packetization, "foo")),
-- AllOf(Field("id", &webrtc::Codec::id, 98),
-- Field("packetization", &webrtc::Codec::packetization,
-- std::nullopt))));
-+ ElementsAre(AllOf(Field(&webrtc::Codec::id, 96),
-+ Field(&webrtc::Codec::packetization, "foo")),
-+ AllOf(Field(&webrtc::Codec::id, 98),
-+ Field(&webrtc::Codec::packetization, std::nullopt))));
- EXPECT_THAT(
- media_send_channel1_impl()->send_codecs(),
-- ElementsAre(
-- AllOf(Field("id", &webrtc::Codec::id, 96),
-- Field("packetization", &webrtc::Codec::packetization, "foo")),
-- AllOf(Field("id", &webrtc::Codec::id, 97),
-- Field("packetization", &webrtc::Codec::packetization, "bar")),
-- AllOf(Field("id", &webrtc::Codec::id, 99),
-- Field("packetization", &webrtc::Codec::packetization,
-- std::nullopt))));
-+ ElementsAre(AllOf(Field(&webrtc::Codec::id, 96),
-+ Field(&webrtc::Codec::packetization, "foo")),
-+ AllOf(Field(&webrtc::Codec::id, 97),
-+ Field(&webrtc::Codec::packetization, "bar")),
-+ AllOf(Field(&webrtc::Codec::id, 99),
-+ Field(&webrtc::Codec::packetization, std::nullopt))));
- }
-
- TEST_F(VideoChannelSingleThreadTest,
-diff --git a/pc/congestion_control_integrationtest.cc b/pc/congestion_control_integrationtest.cc
-index e5ba493d1a..d93a31924f 100644
---- a/pc/congestion_control_integrationtest.cc
-+++ b/pc/congestion_control_integrationtest.cc
-@@ -12,13 +12,9 @@
- // are correctly negotiated in the SDP offer/answer.
-
- #include <string>
--#include <vector>
-
- #include "absl/strings/str_cat.h"
--#include "api/media_types.h"
- #include "api/peer_connection_interface.h"
--#include "api/rtp_parameters.h"
--#include "api/rtp_transceiver_direction.h"
- #include "api/test/rtc_error_matchers.h"
- #include "pc/test/integration_test_helpers.h"
- #include "test/gmock.h"
-@@ -27,12 +23,11 @@
-
- namespace webrtc {
-
--using ::testing::Eq;
--using ::testing::Field;
-+using testing::Eq;
- using ::testing::Gt;
--using ::testing::HasSubstr;
-+using testing::HasSubstr;
- using ::testing::IsTrue;
--using ::testing::Not;
-+using testing::Not;
-
- class PeerConnectionCongestionControlTest
- : public PeerConnectionIntegrationBaseTest {
-@@ -82,53 +77,6 @@ TEST_F(PeerConnectionCongestionControlTest, ReceiveOfferSetsCcfbFlag) {
- EXPECT_THAT(answer_str, Not(HasSubstr("transport-cc")));
- }
-
--TEST_F(PeerConnectionCongestionControlTest, NegotiatingCcfbRemovesTsn) {
-- SetFieldTrials("WebRTC-RFC8888CongestionControlFeedback/Enabled/");
-- ASSERT_TRUE(CreatePeerConnectionWrappers());
-- ConnectFakeSignalingForSdpOnly();
-- callee()->AddVideoTrack();
-- // Add transceivers to caller in order to accomodate reception
-- caller()->pc()->AddTransceiver(MediaType::VIDEO);
-- auto parameters = caller()->pc()->GetSenders()[0]->GetParameters();
-- caller()->CreateAndSetAndSignalOffer();
-- ASSERT_THAT(WaitUntil([&] { return SignalingStateStable(); }, IsTrue()),
-- IsRtcOk());
--
-- std::vector<RtpHeaderExtensionCapability> negotiated_header_extensions =
-- caller()->pc()->GetTransceivers()[0]->GetNegotiatedHeaderExtensions();
-- EXPECT_THAT(
-- negotiated_header_extensions,
-- Not(Contains(
-- AllOf(Field("uri", &RtpHeaderExtensionCapability::uri,
-- RtpExtension::kTransportSequenceNumberUri),
-- Not(Field("direction", &RtpHeaderExtensionCapability::direction,
-- RtpTransceiverDirection::kStopped))))))
-- << " in caller negotiated header extensions";
--
-- parameters = caller()->pc()->GetSenders()[0]->GetParameters();
-- EXPECT_THAT(parameters.header_extensions,
-- Not(Contains(Field("uri", &RtpExtension::uri,
-- RtpExtension::kTransportSequenceNumberUri))))
-- << " in caller sender parameters";
-- parameters = caller()->pc()->GetReceivers()[0]->GetParameters();
-- EXPECT_THAT(parameters.header_extensions,
-- Not(Contains(Field("uri", &RtpExtension::uri,
-- RtpExtension::kTransportSequenceNumberUri))))
-- << " in caller receiver parameters";
--
-- parameters = callee()->pc()->GetSenders()[0]->GetParameters();
-- EXPECT_THAT(parameters.header_extensions,
-- Not(Contains(Field("uri", &RtpExtension::uri,
-- RtpExtension::kTransportSequenceNumberUri))))
-- << " in callee sender parameters";
--
-- parameters = callee()->pc()->GetReceivers()[0]->GetParameters();
-- EXPECT_THAT(parameters.header_extensions,
-- Not(Contains(Field("uri", &RtpExtension::uri,
-- RtpExtension::kTransportSequenceNumberUri))))
-- << " in callee receiver parameters";
--}
--
- TEST_F(PeerConnectionCongestionControlTest, CcfbGetsUsed) {
- SetFieldTrials("WebRTC-RFC8888CongestionControlFeedback/Enabled/");
- ASSERT_TRUE(CreatePeerConnectionWrappers());
-diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc
-index 4d4ec552d7..3a2babda3e 100644
---- a/pc/peer_connection_integrationtest.cc
-+++ b/pc/peer_connection_integrationtest.cc
-@@ -4631,9 +4631,8 @@ TEST_F(PeerConnectionIntegrationTestUnifiedPlan,
- PeerConnectionInterface::kStable);
- }
-
--// TODO: issues.webrtc.org/425336456 - figure out correct behavior and reenable
- TEST_F(PeerConnectionIntegrationTestUnifiedPlan,
-- DISABLED_OnlyOnePairWantsCorruptionScorePlumbing) {
-+ OnlyOnePairWantsCorruptionScorePlumbing) {
- // In order for corruption score to be logged, encryption of RTP header
- // extensions must be allowed.
- CryptoOptions crypto_options;
-@@ -4657,19 +4656,12 @@ TEST_F(PeerConnectionIntegrationTestUnifiedPlan,
- ASSERT_THAT(
- WaitUntil([&] { return SignalingStateStable(); }, ::testing::IsTrue()),
- IsRtcOk());
-- std::vector<RtpHeaderExtensionCapability> negotiated_extensions =
-- caller()->pc()->GetTransceivers()[0]->GetNegotiatedHeaderExtensions();
-- ASSERT_THAT(negotiated_extensions,
-- Contains(Field("uri", &RtpHeaderExtensionCapability::uri,
-- RtpExtension::kCorruptionDetectionUri)));
- ASSERT_THAT(WaitUntil([&] { return caller()->GetCorruptionScoreCount(); },
- ::testing::Gt(0), {.timeout = kMaxWaitForStats}),
-- IsRtcOk())
-- << "Waiting for caller corruption score count > 0";
-+ IsRtcOk());
- ASSERT_THAT(WaitUntil([&] { return callee()->GetCorruptionScoreCount(); },
- ::testing::Eq(0), {.timeout = kMaxWaitForStats}),
-- IsRtcOk())
-- << "Waiting for callee corruption score count = 0";
-+ IsRtcOk());
-
- for (const auto& pair : {caller(), callee()}) {
- scoped_refptr<const RTCStatsReport> report = pair->NewGetStats();
+ namespace voe {
+ class ChannelReceiveInterface;
+ } // namespace voe
diff --git a/third_party/libwebrtc/moz-patch-stack/s0133.patch b/third_party/libwebrtc/moz-patch-stack/s0133.patch
@@ -1,47 +1,41 @@
From: Michael Froman <mfroman@mozilla.com>
Date: Wed, 8 Oct 2025 17:49:00 +0000
-Subject: Bug 1980501 - use forward class decl rather than include
- audio_state.h r?ng!
+Subject: Bug 1980501 - enable c++20 builds in libwebrtc. r?ng!
-This avoids code outside of libwebrtc inadvertently including
-rtc_base/containers/flat_set.h which uses c++20 features. Once
-the rest of the Mozilla tree is compiling with c++20, we can
-remove this modification (see Bug 1768116).
-
-Differential Revision: https://phabricator.services.mozilla.com/D267993
-Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/9c487a574d218cc1c261b646c501db4d159754f0
+Differential Revision: https://phabricator.services.mozilla.com/D267994
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/43de54a6e52daf0a06956ae01951ef1e29d46e82
---
- audio/audio_receive_stream.h | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
+ BUILD.gn | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
-diff --git a/audio/audio_receive_stream.h b/audio/audio_receive_stream.h
-index bc248120ef..fd00dfb3ed 100644
---- a/audio/audio_receive_stream.h
-+++ b/audio/audio_receive_stream.h
-@@ -31,7 +31,11 @@
- #include "api/scoped_refptr.h"
- #include "api/sequence_checker.h"
- #include "api/transport/rtp/rtp_source.h"
-+// This can be removed after Bug 1768116 enables
-+// c++20 builds across the entire Mozilla tree.
-+#if !defined(WEBRTC_MOZILLA_BUILD)
- #include "audio/audio_state.h"
-+#endif
- #include "call/audio_receive_stream.h"
- #include "call/audio_state.h"
- #include "call/syncable.h"
-@@ -43,6 +47,14 @@ class PacketRouter;
- class RtpStreamReceiverControllerInterface;
- class RtpStreamReceiverInterface;
+diff --git a/BUILD.gn b/BUILD.gn
+index 0571aa8936..64f86bedf1 100644
+--- a/BUILD.gn
++++ b/BUILD.gn
+@@ -318,6 +318,17 @@ config("common_config") {
+ cflags_objc = []
+ defines = []
-+// This can be removed after Bug 1768116 enables
-+// c++20 builds across the entire Mozilla tree.
-+#if defined(WEBRTC_MOZILLA_BUILD)
-+namespace internal {
-+class AudioState;
-+}
-+#endif
++ # We should be able to remove this after c++20 is enabled
++ # across the Mozilla tree.
++ if (build_with_mozilla) {
++ if (is_win) {
++ cflags_cc += [ "-std:c++20" ]
++ }
++ else {
++ cflags_cc += [ "-std=gnu++20" ]
++ }
++ }
+
- namespace voe {
- class ChannelReceiveInterface;
- } // namespace voe
+ if (rtc_enable_protobuf) {
+ defines += [ "WEBRTC_ENABLE_PROTOBUF=1" ]
+ } else {
+@@ -419,7 +430,7 @@ config("common_config") {
+ # "-Wnested-externs", (C/Obj-C only)
+ ]
+ cflags_objc += [ "-Wstrict-prototypes" ]
+- cflags_cc = [
++ cflags_cc += [
+ "-Wnon-virtual-dtor",
+
+ # This is enabled for clang; enable for gcc as well.
diff --git a/third_party/libwebrtc/moz-patch-stack/s0134.patch b/third_party/libwebrtc/moz-patch-stack/s0134.patch
@@ -1,41 +0,0 @@
-From: Michael Froman <mfroman@mozilla.com>
-Date: Wed, 8 Oct 2025 17:49:00 +0000
-Subject: Bug 1980501 - enable c++20 builds in libwebrtc. r?ng!
-
-Differential Revision: https://phabricator.services.mozilla.com/D267994
-Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/43de54a6e52daf0a06956ae01951ef1e29d46e82
----
- BUILD.gn | 13 ++++++++++++-
- 1 file changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/BUILD.gn b/BUILD.gn
-index 0571aa8936..64f86bedf1 100644
---- a/BUILD.gn
-+++ b/BUILD.gn
-@@ -318,6 +318,17 @@ config("common_config") {
- cflags_objc = []
- defines = []
-
-+ # We should be able to remove this after c++20 is enabled
-+ # across the Mozilla tree.
-+ if (build_with_mozilla) {
-+ if (is_win) {
-+ cflags_cc += [ "-std:c++20" ]
-+ }
-+ else {
-+ cflags_cc += [ "-std=gnu++20" ]
-+ }
-+ }
-+
- if (rtc_enable_protobuf) {
- defines += [ "WEBRTC_ENABLE_PROTOBUF=1" ]
- } else {
-@@ -419,7 +430,7 @@ config("common_config") {
- # "-Wnested-externs", (C/Obj-C only)
- ]
- cflags_objc += [ "-Wstrict-prototypes" ]
-- cflags_cc = [
-+ cflags_cc += [
- "-Wnon-virtual-dtor",
-
- # This is enabled for clang; enable for gcc as well.