tor-browser

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

commit 5f611c85dfc771cd6ff3258c044c27ecfed3f733
parent b07c3067dbe3494a7e1d059a836dece0b8711c4a
Author: Dan Baker <dbaker@mozilla.com>
Date:   Mon,  1 Dec 2025 23:59:15 -0700

Bug 2000941 - Vendor libwebrtc from fc1cbcf052

Essentially a no-op since we're going to see this change
reverted when we vendor in 37ba143ad7.

Upstream commit: https://webrtc.googlesource.com/src/+/fc1cbcf05221bf26b6fa94ecb018a5225060ddb4
    Store a raw_packetization bool in RtpSenderVideo rather than inferring

    Ensure all calls to SendVideo() use a raw packetizer when they should
    rather than inferring it from the absence of |codec_type| - an issue
    when the caller doesn't know the correct packetization (eg
    RTPSenderVideoFrameTransformerDelegate).

    Bug: b/446768451
    Change-Id: Ib628d69ac1697de63cc293c5f4c681d6450f72d9
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/411560
    Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
    Auto-Submit: Tony Herre <herre@google.com>
    Reviewed-by: Henrik Boström <hbos@webrtc.org>
    Commit-Queue: Henrik Boström <hbos@webrtc.org>
    Reviewed-by: Guido Urdaneta <guidou@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45724}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Athird_party/libwebrtc/moz-patch-stack/37ba143ad7.no-op-cherry-pick-msg | 1+
Mthird_party/libwebrtc/moz-patch-stack/p0001.patch | 286+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
Mthird_party/libwebrtc/moz-patch-stack/p0002.patch | 429++++++++++++++++++++-----------------------------------------------------------
Cthird_party/libwebrtc/moz-patch-stack/p0002.patch -> third_party/libwebrtc/moz-patch-stack/p0003.patch | 0
5 files changed, 295 insertions(+), 425 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-12-02T06:56:32.107062+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T06:59:02.115966+00:00. # base of lastest vendoring -fa0141bf09 +fc1cbcf052 diff --git a/third_party/libwebrtc/moz-patch-stack/37ba143ad7.no-op-cherry-pick-msg b/third_party/libwebrtc/moz-patch-stack/37ba143ad7.no-op-cherry-pick-msg @@ -0,0 +1 @@ +We already cherry-picked this when we vendored fc1cbcf052. diff --git a/third_party/libwebrtc/moz-patch-stack/p0001.patch b/third_party/libwebrtc/moz-patch-stack/p0001.patch @@ -1,118 +1,200 @@ From: Daniel Baker <dbaker@mozilla.com> -Date: Mon, 1 Dec 2025 19:31:22 -0700 -Subject: (tmp-cherry-pick) [M142] Revert "Add instructions for removing a - Trampoline-wrapped Signal" (29d6eabaf0) +Date: Mon, 1 Dec 2025 23:58:28 -0700 +Subject: (tmp-cherry-pick) Revert "Store a raw_packetization bool in + RtpSenderVideo rather than inferring" (37ba143ad7) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit -This reverts commit bb6b3aab159ebcd825526cf831f54170ccb2584d. +This reverts commit fc1cbcf05221bf26b6fa94ecb018a5225060ddb4. -Reason for revert: Need to fix downstream Chromium issues. +Reason for revert: Reverting while we figure out why the check is triggering downstream Original change's description: -> Add instructions for removing a Trampoline-wrapped Signal +> Store a raw_packetization bool in RtpSenderVideo rather than inferring > -> Also apply the instructions to one Signal. +> Ensure all calls to SendVideo() use a raw packetizer when they should +> rather than inferring it from the absence of |codec_type| - an issue +> when the caller doesn't know the correct packetization (eg +> RTPSenderVideoFrameTransformerDelegate). > -> Bug: webrtc:42222066 -> Change-Id: I63409d968d27a843b0ac7c61a122a1b685cb7a6f -> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408883 -> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> -> Commit-Queue: Harald Alvestrand <hta@webrtc.org> -> Cr-Commit-Position: refs/heads/main@{#45624} +> Bug: b/446768451 +> Change-Id: Ib628d69ac1697de63cc293c5f4c681d6450f72d9 +> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/411560 +> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> +> Auto-Submit: Tony Herre <herre@google.com> +> Reviewed-by: Henrik Boström <hbos@webrtc.org> +> Commit-Queue: Henrik Boström <hbos@webrtc.org> +> Reviewed-by: Guido Urdaneta <guidou@webrtc.org> +> Cr-Commit-Position: refs/heads/main@{#45724} -(cherry picked from commit 716c8eb942a74ad641bbace8c1db521b4857c636) - -Bug: webrtc:42222066, chromium:449225599, chromium:450516559 -No-IWYU: Revert -Change-Id: I7fdf1694664b11ffcfd91916f1e98ef88254059d -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/413923 -Auto-Submit: Harald Alvestrand <hta@webrtc.org> -Commit-Queue: Harald Alvestrand <hta@webrtc.org> -Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> -Reviewed-by: Guido Urdaneta <guidou@webrtc.org> -Cr-Original-Commit-Position: refs/heads/main@{#45840} -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/415743 -Commit-Queue: Guido Urdaneta <guidou@webrtc.org> -Reviewed-by: Harald Alvestrand <hta@webrtc.org> -Cr-Commit-Position: refs/branch-heads/7444@{#2} -Cr-Branched-From: f70dc714a073397356f6ed866481da73f90f0b96-refs/heads/main@{#45766} +Bug: b/446768451 +No-Presubmit: true +No-Tree-Checks: true +No-Try: true +Change-Id: I456daecded27f9e52e126b8e5760238704f67300 +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/411940 +Auto-Submit: Tomas Gunnarsson <tommi@webrtc.org> +Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> +Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> +Cr-Commit-Position: refs/heads/main@{#45731} --- - p2p/base/ice_transport_internal.cc | 5 +++-- - p2p/base/ice_transport_internal.h | 9 ++++++--- - rtc_base/sigslot_trampoline.h | 12 ------------ - 3 files changed, 9 insertions(+), 17 deletions(-) + call/rtp_video_sender.cc | 2 -- + modules/rtp_rtcp/source/rtp_sender_video.cc | 7 +--- + modules/rtp_rtcp/source/rtp_sender_video.h | 3 -- + .../source/rtp_sender_video_unittest.cc | 36 +++---------------- + 4 files changed, 6 insertions(+), 42 deletions(-) -diff --git a/p2p/base/ice_transport_internal.cc b/p2p/base/ice_transport_internal.cc -index 7843a8b37d..a4b96db00b 100644 ---- a/p2p/base/ice_transport_internal.cc -+++ b/p2p/base/ice_transport_internal.cc -@@ -236,7 +236,8 @@ RTCError IceConfig::IsValid() const { - } +diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc +index 78144121d1..25cc81396c 100644 +--- a/call/rtp_video_sender.cc ++++ b/call/rtp_video_sender.cc +@@ -324,8 +324,6 @@ std::vector<RtpStreamSender> CreateRtpStreamSenders( + } + video_config.frame_transformer = frame_transformer; + video_config.task_queue_factory = &env.task_queue_factory(); +- video_config.raw_packetization = rtp_config.raw_payload; +- + auto sender_video = std::make_unique<RTPSenderVideo>(video_config); + rtp_streams.emplace_back(std::move(rtp_rtcp), std::move(sender_video), + std::move(fec_generator)); +diff --git a/modules/rtp_rtcp/source/rtp_sender_video.cc b/modules/rtp_rtcp/source/rtp_sender_video.cc +index 64276b00d8..ee7414b582 100644 +--- a/modules/rtp_rtcp/source/rtp_sender_video.cc ++++ b/modules/rtp_rtcp/source/rtp_sender_video.cc +@@ -177,7 +177,6 @@ RTPSenderVideo::RTPSenderVideo(const Config& config) + require_frame_encryption_(config.require_frame_encryption), + generic_descriptor_auth_experiment_( + !config.field_trials->IsDisabled("WebRTC-GenericDescriptorAuth")), +- raw_packetization_(config.raw_packetization), + absolute_capture_time_sender_(config.clock), + frame_transformer_delegate_( + config.frame_transformer +@@ -499,9 +498,6 @@ bool RTPSenderVideo::SendVideo(int payload_type, + std::vector<uint32_t> csrcs) { + RTC_CHECK_RUNS_SERIALIZED(&send_checker_); - IceTransportInternal::IceTransportInternal() -- : role_conflict_trampoline_(this), -+ : candidate_gathered_trampoline_(this), -+ role_conflict_trampoline_(this), - ice_transport_state_changed_trampoline_(this), - destroyed_trampoline_(this) {} +- // Codec type can only be absent when using raw packetization. +- RTC_CHECK(raw_packetization_ || codec_type.has_value()); +- + if (video_header.frame_type == VideoFrameType::kEmptyFrame) + return true; -@@ -265,7 +266,7 @@ void IceTransportInternal::RemoveGatheringStateCallback( - void IceTransportInternal::SubscribeCandidateGathered( - absl::AnyInvocable<void(IceTransportInternal*, const Candidate&)> - callback) { -- candidate_gathered_callbacks_.AddReceiver(std::move(callback)); -+ candidate_gathered_trampoline_.Subscribe(std::move(callback)); - } +@@ -678,8 +674,7 @@ bool RTPSenderVideo::SendVideo(int payload_type, + } + + std::unique_ptr<RtpPacketizer> packetizer = +- RtpPacketizer::Create(raw_packetization_ ? std::nullopt : codec_type, +- payload, limits, video_header); ++ RtpPacketizer::Create(codec_type, payload, limits, video_header); + + const size_t num_packets = packetizer->NumPackets(); + +diff --git a/modules/rtp_rtcp/source/rtp_sender_video.h b/modules/rtp_rtcp/source/rtp_sender_video.h +index 681675e27b..8e300214af 100644 +--- a/modules/rtp_rtcp/source/rtp_sender_video.h ++++ b/modules/rtp_rtcp/source/rtp_sender_video.h +@@ -90,7 +90,6 @@ class RTPSenderVideo : public RTPVideoFrameSenderInterface { + const FieldTrialsView* field_trials = nullptr; + scoped_refptr<FrameTransformerInterface> frame_transformer; + TaskQueueFactory* task_queue_factory = nullptr; +- bool raw_packetization = false; + }; - void IceTransportInternal::SubscribeRoleConflict( -diff --git a/p2p/base/ice_transport_internal.h b/p2p/base/ice_transport_internal.h -index 9f6722c8ad..c83a7d70d7 100644 ---- a/p2p/base/ice_transport_internal.h -+++ b/p2p/base/ice_transport_internal.h -@@ -352,9 +352,11 @@ class RTC_EXPORT IceTransportInternal : public PacketTransportInternal { - void RemoveGatheringStateCallback(const void* removal_tag); + explicit RTPSenderVideo(const Config& config); +@@ -250,8 +249,6 @@ class RTPSenderVideo : public RTPVideoFrameSenderInterface { + // Set to true if the generic descriptor should be authenticated. + const bool generic_descriptor_auth_experiment_; - // Handles sending and receiving of candidates. -+ sigslot::signal2<IceTransportInternal*, const Candidate&> -+ SignalCandidateGathered; - void NotifyCandidateGathered(IceTransportInternal* transport, - const Candidate& candidate) { -- candidate_gathered_callbacks_.Send(transport, candidate); -+ SignalCandidateGathered(transport, candidate); +- const bool raw_packetization_; +- + AbsoluteCaptureTimeSender absolute_capture_time_sender_ + RTC_GUARDED_BY(send_checker_); + // Tracks updates to the active decode targets and decides when active decode +diff --git a/modules/rtp_rtcp/source/rtp_sender_video_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_video_unittest.cc +index b63bafe34e..9479714d8a 100644 +--- a/modules/rtp_rtcp/source/rtp_sender_video_unittest.cc ++++ b/modules/rtp_rtcp/source/rtp_sender_video_unittest.cc +@@ -166,14 +166,12 @@ class TestRtpSenderVideo : public RTPSenderVideo { + public: + TestRtpSenderVideo(Clock* clock, + RTPSender* rtp_sender, +- const FieldTrialsView& field_trials, +- bool raw_packetization) ++ const FieldTrialsView& field_trials) + : RTPSenderVideo([&] { + Config config; + config.clock = clock; + config.rtp_sender = rtp_sender; + config.field_trials = &field_trials; +- config.raw_packetization = raw_packetization; + return config; + }()) {} + ~TestRtpSenderVideo() override {} +@@ -189,7 +187,7 @@ class TestRtpSenderVideo : public RTPSenderVideo { + + class RtpSenderVideoTest : public ::testing::Test { + public: +- explicit RtpSenderVideoTest(bool raw_packetization = false) ++ RtpSenderVideoTest() + : fake_clock_(kStartTime), + env_(CreateEnvironment(&fake_clock_)), + retransmission_rate_limiter_(&fake_clock_, 1000), +@@ -203,8 +201,7 @@ class RtpSenderVideoTest : public ::testing::Test { + rtp_sender_video_( + std::make_unique<TestRtpSenderVideo>(&fake_clock_, + rtp_module_.RtpSender(), +- env_.field_trials(), +- raw_packetization)) { ++ env_.field_trials())) { + rtp_module_.SetSequenceNumber(kSeqNum); + rtp_module_.SetStartTimestamp(0); } - void SubscribeCandidateGathered( - absl::AnyInvocable<void(IceTransportInternal*, const Candidate&)> -@@ -462,8 +464,9 @@ class RTC_EXPORT IceTransportInternal : public PacketTransportInternal { - candidate_pair_change_callback_; +@@ -1359,8 +1356,7 @@ TEST_F(RtpSenderVideoTest, + + TEST_F(RtpSenderVideoTest, AbsoluteCaptureTime) { + rtp_sender_video_ = std::make_unique<TestRtpSenderVideo>( +- &fake_clock_, rtp_module_.RtpSender(), env_.field_trials(), +- /*raw_packetization=*/false); ++ &fake_clock_, rtp_module_.RtpSender(), env_.field_trials()); + + constexpr Timestamp kAbsoluteCaptureTimestamp = Timestamp::Millis(12345678); + uint8_t kFrame[kMaxPacketLength]; +@@ -1526,12 +1522,7 @@ TEST_F(RtpSenderVideoTest, SendGenericVideo) { + EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(kDeltaPayload)); + } + +-class RtpSenderVideoRawPacketizationTest : public RtpSenderVideoTest { +- public: +- RtpSenderVideoRawPacketizationTest() : RtpSenderVideoTest(true) {} +-}; +- +-TEST_F(RtpSenderVideoRawPacketizationTest, SendRawVideo) { ++TEST_F(RtpSenderVideoTest, SendRawVideo) { + const uint8_t kPayloadTypeRaw = 111; + const uint8_t kPayload[] = {11, 22, 33, 44, 55}; + +@@ -1547,23 +1538,6 @@ TEST_F(RtpSenderVideoRawPacketizationTest, SendRawVideo) { + EXPECT_THAT(sent_payload, ElementsAreArray(kPayload)); + } - private: -- CallbackList<IceTransportInternal*, const Candidate&> -- candidate_gathered_callbacks_; -+ SignalTrampoline<IceTransportInternal, -+ &IceTransportInternal::SignalCandidateGathered> -+ candidate_gathered_trampoline_; - SignalTrampoline<IceTransportInternal, - &IceTransportInternal::SignalRoleConflict> - role_conflict_trampoline_; -diff --git a/rtc_base/sigslot_trampoline.h b/rtc_base/sigslot_trampoline.h -index a399e4177f..590e73d97b 100644 ---- a/rtc_base/sigslot_trampoline.h -+++ b/rtc_base/sigslot_trampoline.h -@@ -51,18 +51,6 @@ namespace webrtc { - // my_class_object.SubscibeMyNamedEvent( - // SafeInvocable(target.safety_flag_.flag(), - // [target] { target.function(); } --// WHEN REMOVING THE SIGNAL --// Make a CL that will: --// - Delete the SignalMyNamedEvent signal --// - Change my_named_event_trampoline_ to my_named_event_callbacks, --// of type CallbackList<function arguments> --// - Change SubscribeMyNamedEvent to call my_named_event_callbacks.AddReceiver --// - Change NotifyMyNamedEvent to call my_named_event_callbacks_.Send --// - If UnsubscribeMyNamedEvent exists, change that also. --// - Delete the initialization of my_named_event_trampoline_ from the --// relevant constructor. --// Sending this through the bots will flush out remaining references to --// SignalMyNamedEvent. - namespace internal { - template <typename MemberPtrT> - struct member_pointer_traits; +-TEST_F(RtpSenderVideoRawPacketizationTest, SendVideoWithSetCodecTypeStillRaw) { +- const uint8_t kPayloadTypeRaw = 111; +- const uint8_t kPayload[] = {11, 22, 33, 44, 55}; +- +- // Send a frame with codectype "generic" +- RTPVideoHeader video_header; +- video_header.frame_type = VideoFrameType::kVideoFrameKey; +- ASSERT_TRUE(rtp_sender_video_->SendVideo( +- kPayloadTypeRaw, VideoCodecType::kVideoCodecGeneric, 1234, +- fake_clock_.CurrentTime(), kPayload, sizeof(kPayload), video_header, +- TimeDelta::PlusInfinity(), {})); +- +- // Should still be packetized as raw. +- EXPECT_THAT(transport_.last_sent_packet().payload(), +- ElementsAreArray(kPayload)); +-} +- + class RtpSenderVideoWithFrameTransformerTest : public ::testing::Test { + public: + RtpSenderVideoWithFrameTransformerTest() diff --git a/third_party/libwebrtc/moz-patch-stack/p0002.patch b/third_party/libwebrtc/moz-patch-stack/p0002.patch @@ -1,331 +1,118 @@ -From: Palak Agarwal <agpalak@google.com> -Date: Tue, 7 Oct 2025 13:45:52 +0200 -Subject: (cherry-pick-branch-heads/7390) [M141] Add logging while creating - {Window|Screen}Capturer +From: Daniel Baker <dbaker@mozilla.com> +Date: Mon, 1 Dec 2025 19:31:22 -0700 +Subject: (tmp-cherry-pick) [M142] Revert "Add instructions for removing a + Trampoline-wrapped Signal" (29d6eabaf0) -(cherry picked from commit 6908505ae0eba5d530ad0bb4b37d4654a4f36c95) +This reverts commit bb6b3aab159ebcd825526cf831f54170ccb2584d. -Fixed: chromium:450184498 -Bug: chromium:448881311 -Change-Id: I0f043f58bf831e6822451cac99a8972a054ffdf7 -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/414800 -Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> +Reason for revert: Need to fix downstream Chromium issues. + +Original change's description: +> Add instructions for removing a Trampoline-wrapped Signal +> +> Also apply the instructions to one Signal. +> +> Bug: webrtc:42222066 +> Change-Id: I63409d968d27a843b0ac7c61a122a1b685cb7a6f +> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408883 +> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> +> Commit-Queue: Harald Alvestrand <hta@webrtc.org> +> Cr-Commit-Position: refs/heads/main@{#45624} + +(cherry picked from commit 716c8eb942a74ad641bbace8c1db521b4857c636) + +Bug: webrtc:42222066, chromium:449225599, chromium:450516559 +No-IWYU: Revert +Change-Id: I7fdf1694664b11ffcfd91916f1e98ef88254059d +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/413923 +Auto-Submit: Harald Alvestrand <hta@webrtc.org> +Commit-Queue: Harald Alvestrand <hta@webrtc.org> +Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> +Reviewed-by: Guido Urdaneta <guidou@webrtc.org> +Cr-Original-Commit-Position: refs/heads/main@{#45840} +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/415743 +Commit-Queue: Guido Urdaneta <guidou@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> -Commit-Queue: Palak Agarwal <agpalak@google.com> -Cr-Original-Commit-Position: refs/heads/main@{#45856} -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/415420 -Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org> -Cr-Commit-Position: refs/branch-heads/7390@{#3} -Cr-Branched-From: 2f553bf8d573c90176d51559b76dfc836996c8f5-refs/heads/main@{#45520} +Cr-Commit-Position: refs/branch-heads/7444@{#2} +Cr-Branched-From: f70dc714a073397356f6ed866481da73f90f0b96-refs/heads/main@{#45766} --- - modules/desktop_capture/desktop_capturer.cc | 15 +++++++++++++++ - .../linux/x11/screen_capturer_x11.cc | 6 ++++++ - .../linux/x11/window_capturer_x11.cc | 4 ++++ - modules/desktop_capture/screen_capturer_darwin.mm | 7 +++++++ - .../desktop_capture/screen_capturer_fuchsia.cc | 3 +++ - modules/desktop_capture/screen_capturer_linux.cc | 4 ++++ - modules/desktop_capture/screen_capturer_null.cc | 4 ++++ - modules/desktop_capture/screen_capturer_win.cc | 6 ++++++ - modules/desktop_capture/window_capturer_linux.cc | 4 ++++ - modules/desktop_capture/window_capturer_mac.mm | 2 ++ - modules/desktop_capture/window_capturer_null.cc | 3 +++ - modules/desktop_capture/window_capturer_win.cc | 7 +++++++ - 12 files changed, 65 insertions(+) + p2p/base/ice_transport_internal.cc | 5 +++-- + p2p/base/ice_transport_internal.h | 9 ++++++--- + rtc_base/sigslot_trampoline.h | 12 ------------ + 3 files changed, 9 insertions(+), 17 deletions(-) -diff --git a/modules/desktop_capture/desktop_capturer.cc b/modules/desktop_capture/desktop_capturer.cc -index ae9aba26ee..bf63f73178 100644 ---- a/modules/desktop_capture/desktop_capturer.cc -+++ b/modules/desktop_capture/desktop_capturer.cc -@@ -21,6 +21,7 @@ - #include "modules/desktop_capture/desktop_capturer_differ_wrapper.h" - #include "modules/desktop_capture/desktop_geometry.h" - #include "modules/desktop_capture/shared_memory.h" -+#include "rtc_base/logging.h" - #include "system_wrappers/include/metrics.h" - - #if defined(WEBRTC_WIN) -@@ -81,18 +82,26 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateWindowCapturer( - #if defined(RTC_ENABLE_WIN_WGC) - if (options.allow_wgc_window_capturer() && - IsWgcSupported(CaptureType::kWindow)) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateWindowCapturer " -+ "creates DesktopCapturer of type WgcCapturerWin"; - return WgcCapturerWin::CreateRawWindowCapturer(options); - } - #endif // defined(RTC_ENABLE_WIN_WGC) - - #if defined(WEBRTC_WIN) - if (options.allow_cropping_window_capturer()) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateWindowCapturer " -+ "creates DesktopCapturer of type CroppingWindowCapturerWin"; - return CroppingWindowCapturer::CreateCapturer(options); - } - #endif // defined(WEBRTC_WIN) - - std::unique_ptr<DesktopCapturer> capturer = CreateRawWindowCapturer(options); - if (capturer && options.detect_updated_region()) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateWindowCapturer " -+ "creates DesktopCapturer of type " -+ "DesktopCapturerDifferWrapper over a base capturer"; - capturer.reset(new DesktopCapturerDifferWrapper(std::move(capturer))); - } - -@@ -105,12 +114,18 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateScreenCapturer( - #if defined(RTC_ENABLE_WIN_WGC) - if (options.allow_wgc_screen_capturer() && - IsWgcSupported(CaptureType::kScreen)) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateScreenCapturer " -+ "creates DesktopCapturer of type WgcCapturerWin"; - return WgcCapturerWin::CreateRawScreenCapturer(options); - } - #endif // defined(RTC_ENABLE_WIN_WGC) - - std::unique_ptr<DesktopCapturer> capturer = CreateRawScreenCapturer(options); - if (capturer && options.detect_updated_region()) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateScreenCapturer creates " -+ "DesktopCapturer of type DesktopCapturerDifferWrapper over a base " -+ "capturer"; - capturer.reset(new DesktopCapturerDifferWrapper(std::move(capturer))); - } - -diff --git a/modules/desktop_capture/linux/x11/screen_capturer_x11.cc b/modules/desktop_capture/linux/x11/screen_capturer_x11.cc -index 90dd797cb3..f10dcabc7e 100644 ---- a/modules/desktop_capture/linux/x11/screen_capturer_x11.cc -+++ b/modules/desktop_capture/linux/x11/screen_capturer_x11.cc -@@ -511,8 +511,14 @@ std::unique_ptr<DesktopCapturer> ScreenCapturerX11::CreateRawScreenCapturer( - if (!options.x_display()) - return nullptr; - -+ RTC_LOG(LS_INFO) -+ << "video capture: ScreenCapturerX11::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerX11"; - std::unique_ptr<ScreenCapturerX11> capturer(new ScreenCapturerX11()); - if (!capturer->Init(options)) { -+ RTC_LOG(LS_INFO) -+ << "video capture: ScreenCapturerX11::CreateRawScreenCapturer " -+ "DesktopCapturer is null because it can not be initiated"; - return nullptr; - } - -diff --git a/modules/desktop_capture/linux/x11/window_capturer_x11.cc b/modules/desktop_capture/linux/x11/window_capturer_x11.cc -index 8e592ff2d9..9505205b76 100644 ---- a/modules/desktop_capture/linux/x11/window_capturer_x11.cc -+++ b/modules/desktop_capture/linux/x11/window_capturer_x11.cc -@@ -247,6 +247,10 @@ std::unique_ptr<DesktopCapturer> WindowCapturerX11::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { - if (!options.x_display()) - return nullptr; -+ -+ RTC_LOG(LS_INFO) -+ << "video capture: WindowCapturerX11::CreateRawWindowCapturer creates " -+ "DesktopCapturer of type WindowCapturerX11"; - return std::unique_ptr<DesktopCapturer>(new WindowCapturerX11(options)); +diff --git a/p2p/base/ice_transport_internal.cc b/p2p/base/ice_transport_internal.cc +index 7843a8b37d..a4b96db00b 100644 +--- a/p2p/base/ice_transport_internal.cc ++++ b/p2p/base/ice_transport_internal.cc +@@ -236,7 +236,8 @@ RTCError IceConfig::IsValid() const { } -diff --git a/modules/desktop_capture/screen_capturer_darwin.mm b/modules/desktop_capture/screen_capturer_darwin.mm -index 95a877c45d..3f14ddfe58 100644 ---- a/modules/desktop_capture/screen_capturer_darwin.mm -+++ b/modules/desktop_capture/screen_capturer_darwin.mm -@@ -12,6 +12,7 @@ - - #include "modules/desktop_capture/mac/screen_capturer_mac.h" - #include "modules/desktop_capture/mac/screen_capturer_sck.h" -+#include "rtc_base/logging.h" - - namespace webrtc { - -@@ -27,10 +28,16 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - std::unique_ptr<DesktopCapturer> sck_capturer = - CreateScreenCapturerSck(options); - if (sck_capturer) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerSck"; - return sck_capturer; - } - } - -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerMac"; - auto capturer = - std::make_unique<ScreenCapturerMac>(options.configuration_monitor(), - options.detect_updated_region(), -diff --git a/modules/desktop_capture/screen_capturer_fuchsia.cc b/modules/desktop_capture/screen_capturer_fuchsia.cc -index c3f51ef0fc..2a6c5e753d 100644 ---- a/modules/desktop_capture/screen_capturer_fuchsia.cc -+++ b/modules/desktop_capture/screen_capturer_fuchsia.cc -@@ -56,6 +56,9 @@ size_t RoundUpToMultiple(size_t value, size_t multiple) { - - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerFuchsia"; - std::unique_ptr<ScreenCapturerFuchsia> capturer(new ScreenCapturerFuchsia()); - return capturer; - } -diff --git a/modules/desktop_capture/screen_capturer_linux.cc b/modules/desktop_capture/screen_capturer_linux.cc -index 94726750c5..f25e08fb59 100644 ---- a/modules/desktop_capture/screen_capturer_linux.cc -+++ b/modules/desktop_capture/screen_capturer_linux.cc -@@ -13,6 +13,7 @@ - #include "modules/desktop_capture/desktop_capture_options.h" - #include "modules/desktop_capture/desktop_capture_types.h" - #include "modules/desktop_capture/desktop_capturer.h" -+#include "rtc_base/logging.h" - - #if defined(WEBRTC_USE_PIPEWIRE) - #include "modules/desktop_capture/linux/wayland/base_capturer_pipewire.h" -@@ -29,6 +30,9 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - const DesktopCaptureOptions& options) { - #if defined(WEBRTC_USE_PIPEWIRE) - if (options.allow_pipewire() && BaseCapturerPipeWire::IsSupported()) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type BaseCapturerPipeWire"; - return std::make_unique<BaseCapturerPipeWire>(options, - CaptureType::kScreen); - } -diff --git a/modules/desktop_capture/screen_capturer_null.cc b/modules/desktop_capture/screen_capturer_null.cc -index aa6d4991a0..21b2f46c4d 100644 ---- a/modules/desktop_capture/screen_capturer_null.cc -+++ b/modules/desktop_capture/screen_capturer_null.cc -@@ -11,12 +11,16 @@ - #include <memory> - - #include "modules/desktop_capture/desktop_capturer.h" -+#include "rtc_base/logging.h" - - namespace webrtc { - - // static - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates null " -+ "DesktopCapturer"; - return nullptr; + IceTransportInternal::IceTransportInternal() +- : role_conflict_trampoline_(this), ++ : candidate_gathered_trampoline_(this), ++ role_conflict_trampoline_(this), + ice_transport_state_changed_trampoline_(this), + destroyed_trampoline_(this) {} + +@@ -265,7 +266,7 @@ void IceTransportInternal::RemoveGatheringStateCallback( + void IceTransportInternal::SubscribeCandidateGathered( + absl::AnyInvocable<void(IceTransportInternal*, const Candidate&)> + callback) { +- candidate_gathered_callbacks_.AddReceiver(std::move(callback)); ++ candidate_gathered_trampoline_.Subscribe(std::move(callback)); } -diff --git a/modules/desktop_capture/screen_capturer_win.cc b/modules/desktop_capture/screen_capturer_win.cc -index a5f2052979..6620888f18 100644 ---- a/modules/desktop_capture/screen_capturer_win.cc -+++ b/modules/desktop_capture/screen_capturer_win.cc -@@ -19,6 +19,7 @@ - #include "modules/desktop_capture/win/dxgi_duplicator_controller.h" - #include "modules/desktop_capture/win/screen_capturer_win_directx.h" - #include "modules/desktop_capture/win/screen_capturer_win_gdi.h" -+#include "rtc_base/logging.h" - - namespace webrtc { - -@@ -26,6 +27,9 @@ namespace { - - std::unique_ptr<DesktopCapturer> CreateScreenCapturerWinDirectx( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerWinDirectx"; - std::unique_ptr<DesktopCapturer> capturer( - new ScreenCapturerWinDirectx(options)); - capturer.reset(new BlankDetectorDesktopCapturerWrapper( -@@ -39,6 +43,8 @@ std::unique_ptr<DesktopCapturer> CreateScreenCapturerWinDirectx( - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - const DesktopCaptureOptions& options) { - // Default capturer if no options are enabled is GDI. -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawScreenCapturer " -+ "creates DesktopCapturer of type ScreenCapturerWinGdi"; - std::unique_ptr<DesktopCapturer> capturer(new ScreenCapturerWinGdi(options)); - - // If DirectX is enabled use it as main capturer with GDI as fallback. -diff --git a/modules/desktop_capture/window_capturer_linux.cc b/modules/desktop_capture/window_capturer_linux.cc -index f621a63e72..87ea3d5721 100644 ---- a/modules/desktop_capture/window_capturer_linux.cc -+++ b/modules/desktop_capture/window_capturer_linux.cc -@@ -13,6 +13,7 @@ - #include "modules/desktop_capture/desktop_capture_options.h" - #include "modules/desktop_capture/desktop_capture_types.h" - #include "modules/desktop_capture/desktop_capturer.h" -+#include "rtc_base/logging.h" - - #if defined(WEBRTC_USE_PIPEWIRE) - #include "modules/desktop_capture/linux/wayland/base_capturer_pipewire.h" -@@ -29,6 +30,9 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { - #if defined(WEBRTC_USE_PIPEWIRE) - if (options.allow_pipewire() && BaseCapturerPipeWire::IsSupported()) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawWindowCapturer creates " -+ "DesktopCapturer of type BaseCapturerPipeWire"; - return std::make_unique<BaseCapturerPipeWire>(options, - CaptureType::kWindow); + void IceTransportInternal::SubscribeRoleConflict( +diff --git a/p2p/base/ice_transport_internal.h b/p2p/base/ice_transport_internal.h +index 9f6722c8ad..c83a7d70d7 100644 +--- a/p2p/base/ice_transport_internal.h ++++ b/p2p/base/ice_transport_internal.h +@@ -352,9 +352,11 @@ class RTC_EXPORT IceTransportInternal : public PacketTransportInternal { + void RemoveGatheringStateCallback(const void* removal_tag); + + // Handles sending and receiving of candidates. ++ sigslot::signal2<IceTransportInternal*, const Candidate&> ++ SignalCandidateGathered; + void NotifyCandidateGathered(IceTransportInternal* transport, + const Candidate& candidate) { +- candidate_gathered_callbacks_.Send(transport, candidate); ++ SignalCandidateGathered(transport, candidate); } -diff --git a/modules/desktop_capture/window_capturer_mac.mm b/modules/desktop_capture/window_capturer_mac.mm -index a1e6157b87..731090d3fb 100644 ---- a/modules/desktop_capture/window_capturer_mac.mm -+++ b/modules/desktop_capture/window_capturer_mac.mm -@@ -217,6 +217,8 @@ void WindowCapturerMac::CaptureFrame() { - // static - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawWindowCapturer " -+ "creates DesktopCapturer of type WindowCapturerMac"; - return std::unique_ptr<DesktopCapturer>(new WindowCapturerMac( - options.full_screen_window_detector(), options.configuration_monitor())); - } -diff --git a/modules/desktop_capture/window_capturer_null.cc b/modules/desktop_capture/window_capturer_null.cc -index 2061dc5248..384e186d20 100644 ---- a/modules/desktop_capture/window_capturer_null.cc -+++ b/modules/desktop_capture/window_capturer_null.cc -@@ -12,6 +12,7 @@ - - #include "modules/desktop_capture/desktop_capturer.h" - #include "rtc_base/checks.h" -+#include "rtc_base/logging.h" - - namespace webrtc { - -@@ -65,6 +66,8 @@ void WindowCapturerNull::CaptureFrame() { - // static - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawWindowCapturer " -+ "creates DesktopCapturer of type WindowCapturerNull"; - return std::unique_ptr<DesktopCapturer>(new WindowCapturerNull()); - } - -diff --git a/modules/desktop_capture/window_capturer_win.cc b/modules/desktop_capture/window_capturer_win.cc -index 115bc7d9b0..15ed7f5121 100644 ---- a/modules/desktop_capture/window_capturer_win.cc -+++ b/modules/desktop_capture/window_capturer_win.cc -@@ -15,6 +15,7 @@ - #include "modules/desktop_capture/desktop_capturer.h" - #include "modules/desktop_capture/rgba_color.h" - #include "modules/desktop_capture/win/window_capturer_win_gdi.h" -+#include "rtc_base/logging.h" - - #if defined(RTC_ENABLE_WIN_WGC) - #include "modules/desktop_capture/blank_detector_desktop_capturer_wrapper.h" -@@ -28,6 +29,8 @@ namespace webrtc { - // static - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawWindowCapturer " -+ "creates DesktopCapturer of type WindowCapturerWinGdi"; - std::unique_ptr<DesktopCapturer> capturer( - WindowCapturerWinGdi::CreateRawWindowCapturer(options)); - #if defined(RTC_ENABLE_WIN_WGC) -@@ -36,6 +39,10 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - // BlankDectector capturer will send an error when it detects a failed - // GDI rendering, then Fallback capturer will try to capture it again with - // WGC. -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawWindowCapturer creates " -+ "DesktopCapturer of type FallbackDesktopCapturerWrapper which has a " -+ "fallback capturer of type WgcCapturerWin"; - capturer = std::make_unique<BlankDetectorDesktopCapturerWrapper>( - std::move(capturer), RgbaColor(0, 0, 0, 0), - /*check_per_capture*/ true); + void SubscribeCandidateGathered( + absl::AnyInvocable<void(IceTransportInternal*, const Candidate&)> +@@ -462,8 +464,9 @@ class RTC_EXPORT IceTransportInternal : public PacketTransportInternal { + candidate_pair_change_callback_; + + private: +- CallbackList<IceTransportInternal*, const Candidate&> +- candidate_gathered_callbacks_; ++ SignalTrampoline<IceTransportInternal, ++ &IceTransportInternal::SignalCandidateGathered> ++ candidate_gathered_trampoline_; + SignalTrampoline<IceTransportInternal, + &IceTransportInternal::SignalRoleConflict> + role_conflict_trampoline_; +diff --git a/rtc_base/sigslot_trampoline.h b/rtc_base/sigslot_trampoline.h +index a399e4177f..590e73d97b 100644 +--- a/rtc_base/sigslot_trampoline.h ++++ b/rtc_base/sigslot_trampoline.h +@@ -51,18 +51,6 @@ namespace webrtc { + // my_class_object.SubscibeMyNamedEvent( + // SafeInvocable(target.safety_flag_.flag(), + // [target] { target.function(); } +-// WHEN REMOVING THE SIGNAL +-// Make a CL that will: +-// - Delete the SignalMyNamedEvent signal +-// - Change my_named_event_trampoline_ to my_named_event_callbacks, +-// of type CallbackList<function arguments> +-// - Change SubscribeMyNamedEvent to call my_named_event_callbacks.AddReceiver +-// - Change NotifyMyNamedEvent to call my_named_event_callbacks_.Send +-// - If UnsubscribeMyNamedEvent exists, change that also. +-// - Delete the initialization of my_named_event_trampoline_ from the +-// relevant constructor. +-// Sending this through the bots will flush out remaining references to +-// SignalMyNamedEvent. + namespace internal { + template <typename MemberPtrT> + struct member_pointer_traits; diff --git a/third_party/libwebrtc/moz-patch-stack/p0002.patch b/third_party/libwebrtc/moz-patch-stack/p0003.patch