tor-browser

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

commit 14bd24cb136b822096bbfbc0e4aded3da1f69571
parent 53b343539854e734c6b2ec29ad7c1cd66982cc0c
Author: Dan Baker <dbaker@mozilla.com>
Date:   Mon,  1 Dec 2025 17:45:42 -0700

Bug 2000941 - Vendor libwebrtc from a0e60db139

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

Upstream commit: https://webrtc.googlesource.com/src/+/a0e60db139e8d06f3646b374837fcbdd5b98df42
    Avoid seeding Random with current time in rtp_sender

    Random default constructor now provides a non-deterministic random seed.

    This CL was uploaded by an experimental version of git cl split
    (https://crbug.com/389069356).

    R=danilchap@webrtc.org

    Bug: webrtc:42223992, webrtc:441137274
    Change-Id: If0b2959994c474d2d8d433749879e72f1e0c530c
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408744
    Commit-Queue: Evan Shrubsole <eshr@webrtc.org>
    Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
    Auto-Submit: Evan Shrubsole <eshr@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45590}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Athird_party/libwebrtc/moz-patch-stack/40c9ccfc4a.no-op-cherry-pick-msg | 1+
Mthird_party/libwebrtc/moz-patch-stack/p0001.patch | 146+++++++++++++++++++++----------------------------------------------------------
Mthird_party/libwebrtc/moz-patch-stack/p0002.patch | 170+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
Mthird_party/libwebrtc/moz-patch-stack/p0003.patch | 380++++++++++++-------------------------------------------------------------------
Cthird_party/libwebrtc/moz-patch-stack/p0003.patch -> third_party/libwebrtc/moz-patch-stack/p0004.patch | 0
6 files changed, 211 insertions(+), 490 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-02T00:43:05.159850+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T00:45:26.415668+00:00. # base of lastest vendoring -7a191b1218 +a0e60db139 diff --git a/third_party/libwebrtc/moz-patch-stack/40c9ccfc4a.no-op-cherry-pick-msg b/third_party/libwebrtc/moz-patch-stack/40c9ccfc4a.no-op-cherry-pick-msg @@ -0,0 +1 @@ +We already cherry-picked this when we vendored a0e60db139. diff --git a/third_party/libwebrtc/moz-patch-stack/p0001.patch b/third_party/libwebrtc/moz-patch-stack/p0001.patch @@ -1,121 +1,51 @@ From: Daniel Baker <dbaker@mozilla.com> -Date: Mon, 1 Dec 2025 17:39:53 -0700 -Subject: (tmp-cherry-pick) Revert "Use absl::BitGen to generate Random's seed" - (b90d283911) +Date: Mon, 1 Dec 2025 17:44:54 -0700 +Subject: (tmp-cherry-pick) Revert "Avoid seeding Random with current time in + rtp_sender" (40c9ccfc4a) -This reverts commit f2556b4ffe51bc25bfa99771801800ddb71aad8e. +This reverts commit a0e60db139e8d06f3646b374837fcbdd5b98df42. -Reason for revert: absl::BitGen has issues seeding on Windows10 Chromium render process. https://ci.chromium.org/ui/p/chromium/builders/webrtc.fyi/WebRTC%20Chromium%20FYI%20Win10%20Tester/18543/test-results +Reason for revert: Broke win10 chrome bots: https://ci.chromium.org/ui/p/chromium/builders/webrtc.fyi/WebRTC%20Chromium%20FYI%20Win10%20Tester/18529/overview Original change's description: -> Use absl::BitGen to generate Random's seed +> Avoid seeding Random with current time in rtp_sender > -> This adds a default constructor to Random which uses absl::BitGet to -> generate its own seed. This allows us to replace places where the -> current time was used to set a seed. +> Random default constructor now provides a non-deterministic random seed. > -> Bug: webrtc:441137274 -> Change-Id: I5afeca99b2fee5e5a2a0b31043ee0c81c00af5cc -> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408005 +> This CL was uploaded by an experimental version of git cl split +> (https://crbug.com/389069356). +> +> R=danilchap@webrtc.org +> +> Bug: webrtc:42223992, webrtc:441137274 +> Change-Id: If0b2959994c474d2d8d433749879e72f1e0c530c +> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408744 > Commit-Queue: Evan Shrubsole <eshr@webrtc.org> +> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> > Auto-Submit: Evan Shrubsole <eshr@webrtc.org> -> Reviewed-by: Harald Alvestrand <hta@webrtc.org> -> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> -> Cr-Commit-Position: refs/heads/main@{#45588} +> Cr-Commit-Position: refs/heads/main@{#45590} -Bug: webrtc:441137274 -Change-Id: I7acb39e56cfb119742a2b36f053abd1a43781417 -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408903 +Bug: webrtc:42223992, webrtc:441137274 +Change-Id: Ib09ca1047a798dd6c9500b9ce4a33198f0f5cb21 +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408820 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> -Commit-Queue: Evan Shrubsole <eshr@webrtc.org> -Reviewed-by: Harald Alvestrand <hta@webrtc.org> -Cr-Commit-Position: refs/heads/main@{#45619} +Owners-Override: Ilya Nikolaevskiy <ilnik@webrtc.org> +Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> +Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org> +Cr-Commit-Position: refs/heads/main@{#45605} --- - rtc_base/BUILD.gn | 1 - - rtc_base/DEPS | 3 --- - rtc_base/random.cc | 8 -------- - rtc_base/random.h | 19 ++++++++++++------- - 4 files changed, 12 insertions(+), 19 deletions(-) + modules/rtp_rtcp/source/rtp_sender.cc | 1 + + 1 file changed, 1 insertion(+) -diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index b7ec9d0fdf..4d4014adc9 100644 ---- a/rtc_base/BUILD.gn -+++ b/rtc_base/BUILD.gn -@@ -251,7 +251,6 @@ rtc_library("random") { - deps = [ - ":checks", - ":safe_conversions", -- "//third_party/abseil-cpp/absl/random", - ] - } - -diff --git a/rtc_base/DEPS b/rtc_base/DEPS -index 8ad49971f1..9e8908ceb2 100644 ---- a/rtc_base/DEPS -+++ b/rtc_base/DEPS -@@ -44,7 +44,4 @@ specific_include_rules = { - "base64_rust\.cc": [ - "+third_party/rust/chromium_crates_io/vendor/cxx-v1/include/cxx.h", - ], -- "random\.cc": [ -- "+absl/random/random.h", -- ], - } -diff --git a/rtc_base/random.cc b/rtc_base/random.cc -index 7f2303b711..8fd23ea7ad 100644 ---- a/rtc_base/random.cc -+++ b/rtc_base/random.cc -@@ -11,21 +11,13 @@ - - #include <cmath> - #include <cstdint> --#include <limits> - #include <numbers> - --#include "absl/random/random.h" - #include "rtc_base/checks.h" - #include "rtc_base/numerics/safe_conversions.h" - - namespace webrtc { - --Random::Random() { -- absl::BitGen gen; -- state_ = -- absl::Uniform<uint64_t>(gen, 1, std::numeric_limits<uint64_t>::max()); --} -- - Random::Random(uint64_t seed) { - RTC_DCHECK(seed != 0x0ull); - state_ = seed; -diff --git a/rtc_base/random.h b/rtc_base/random.h -index 3b9112a9e3..b3b9fd1608 100644 ---- a/rtc_base/random.h -+++ b/rtc_base/random.h -@@ -21,15 +21,20 @@ namespace webrtc { - - class Random { - public: -- // Returns a random number generator with a random seed. -- Random(); -- -- // Returns a random number generator with the given seed. The seed must not -- // be 0. It is expected that callers intelligently generate their seeds and do -- // not simply pass a constant value or use the current time as a seed. -- // This function should only be used for testing. -+ // TODO(tommi): Change this so that the seed can be initialized internally, -+ // e.g. by offering two ways of constructing or offer a static method that -+ // returns a seed that's suitable for initialization. -+ // The problem now is that callers are calling clock_->TimeInMicroseconds() -+ // which calls TickTime::Now().Ticks(), which can return a very low value on -+ // Mac and can result in a seed of 0 after conversion to microseconds. -+ // Besides the quality of the random seed being poor, this also requires -+ // the client to take on extra dependencies to generate a seed. -+ // If we go for a static seed generator in Random, we can use something from -+ // webrtc/rtc_base and make sure that it works the same way across platforms. -+ // See also discussion here: https://codereview.webrtc.org/1623543002/ - explicit Random(uint64_t seed); - -+ Random() = delete; - Random(const Random&) = delete; - Random& operator=(const Random&) = delete; - +diff --git a/modules/rtp_rtcp/source/rtp_sender.cc b/modules/rtp_rtcp/source/rtp_sender.cc +index 3e333af6e5..ef9d0250f6 100644 +--- a/modules/rtp_rtcp/source/rtp_sender.cc ++++ b/modules/rtp_rtcp/source/rtp_sender.cc +@@ -157,6 +157,7 @@ RTPSender::RTPSender(const Environment& env, + RtpPacketHistory* packet_history, + RtpPacketSender* packet_sender) + : clock_(&env.clock()), ++ random_(clock_->TimeInMicroseconds()), + audio_configured_(config.audio), + ssrc_(config.local_media_ssrc), + rtx_ssrc_(config.rtx_send_ssrc), diff --git a/third_party/libwebrtc/moz-patch-stack/p0002.patch b/third_party/libwebrtc/moz-patch-stack/p0002.patch @@ -1,61 +1,121 @@ -From: =?UTF-8?q?Henrik=20Bostr=C3=B6m?= <hbos@webrtc.org> -Date: Wed, 10 Sep 2025 12:47:04 +0200 -Subject: (cherry-pick-branch-heads/7390) [M141] Do not hide inbound-rtp if - media is received. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +From: Daniel Baker <dbaker@mozilla.com> +Date: Mon, 1 Dec 2025 17:39:53 -0700 +Subject: (tmp-cherry-pick) Revert "Use absl::BitGen to generate Random's seed" + (b90d283911) -This condition neglected the fact that if Insertable Streams API is used -we can have frames or samples despite packets never being received. +This reverts commit f2556b4ffe51bc25bfa99771801800ddb71aad8e. -This CL fixes this unintended regression. +Reason for revert: absl::BitGen has issues seeding on Windows10 Chromium render process. https://ci.chromium.org/ui/p/chromium/builders/webrtc.fyi/WebRTC%20Chromium%20FYI%20Win10%20Tester/18543/test-results -# Ignore unrelated compile issues on ios webrtc bots -NOTRY=True +Original change's description: +> Use absl::BitGen to generate Random's seed +> +> This adds a default constructor to Random which uses absl::BitGet to +> generate its own seed. This allows us to replace places where the +> current time was used to set a seed. +> +> Bug: webrtc:441137274 +> Change-Id: I5afeca99b2fee5e5a2a0b31043ee0c81c00af5cc +> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408005 +> Commit-Queue: Evan Shrubsole <eshr@webrtc.org> +> Auto-Submit: Evan Shrubsole <eshr@webrtc.org> +> Reviewed-by: Harald Alvestrand <hta@webrtc.org> +> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> +> Cr-Commit-Position: refs/heads/main@{#45588} -(cherry picked from commit c15949eda5a00122e2f3b5a643e15781049b9927) - -Bug: chromium:444048024, chromium:444384230 -Change-Id: Ie6e17a3bc96701476787f5898446f3f706715d15 -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408884 -Commit-Queue: Guido Urdaneta <guidou@webrtc.org> -Reviewed-by: Guido Urdaneta <guidou@webrtc.org> -Auto-Submit: Henrik Boström <hbos@webrtc.org> -Commit-Queue: Henrik Boström <hbos@webrtc.org> -Cr-Original-Commit-Position: refs/heads/main@{#45616} -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/409020 -Cr-Commit-Position: refs/branch-heads/7390@{#2} -Cr-Branched-From: 2f553bf8d573c90176d51559b76dfc836996c8f5-refs/heads/main@{#45520} +Bug: webrtc:441137274 +Change-Id: I7acb39e56cfb119742a2b36f053abd1a43781417 +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408903 +Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> +Commit-Queue: Evan Shrubsole <eshr@webrtc.org> +Reviewed-by: Harald Alvestrand <hta@webrtc.org> +Cr-Commit-Position: refs/heads/main@{#45619} --- - pc/rtc_stats_collector.cc | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) + rtc_base/BUILD.gn | 1 - + rtc_base/DEPS | 3 --- + rtc_base/random.cc | 8 -------- + rtc_base/random.h | 19 ++++++++++++------- + 4 files changed, 12 insertions(+), 19 deletions(-) -diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc -index 8686143e68..8d6cc22426 100644 ---- a/pc/rtc_stats_collector.cc -+++ b/pc/rtc_stats_collector.cc -@@ -1754,7 +1754,10 @@ void RTCStatsCollector::ProduceAudioRTPStreamStats_n( - if (!voice_receiver_info.connected()) { - continue; // The SSRC is not known yet. - } -- if (spec_lifetime && voice_receiver_info.packets_received == 0) { -+ // Check both packets received and samples received to handle the Insertable -+ // Streams use case of receiving media without receiving packets. -+ if (spec_lifetime && voice_receiver_info.packets_received == 0 && -+ voice_receiver_info.total_samples_received == 0) { - // The SSRC is known despite not receiving any packets. This happens if - // SSRC is signalled in the SDP which we should not rely on for getStats. - continue; -@@ -1868,7 +1871,10 @@ void RTCStatsCollector::ProduceVideoRTPStreamStats_n( - if (!video_receiver_info.connected()) { - continue; // The SSRC is not known yet. - } -- if (spec_lifetime && video_receiver_info.packets_received == 0) { -+ // Check both packets received and frames received to handle the Insertable -+ // Streams use case of receiving media without receiving packets. -+ if (spec_lifetime && video_receiver_info.packets_received == 0 && -+ video_receiver_info.frames_received == 0) { - // The SSRC is known despite not receiving any packets. This happens if - // SSRC is signalled in the SDP which we should not rely on for getStats. - continue; +diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn +index b7ec9d0fdf..4d4014adc9 100644 +--- a/rtc_base/BUILD.gn ++++ b/rtc_base/BUILD.gn +@@ -251,7 +251,6 @@ rtc_library("random") { + deps = [ + ":checks", + ":safe_conversions", +- "//third_party/abseil-cpp/absl/random", + ] + } + +diff --git a/rtc_base/DEPS b/rtc_base/DEPS +index 8ad49971f1..9e8908ceb2 100644 +--- a/rtc_base/DEPS ++++ b/rtc_base/DEPS +@@ -44,7 +44,4 @@ specific_include_rules = { + "base64_rust\.cc": [ + "+third_party/rust/chromium_crates_io/vendor/cxx-v1/include/cxx.h", + ], +- "random\.cc": [ +- "+absl/random/random.h", +- ], + } +diff --git a/rtc_base/random.cc b/rtc_base/random.cc +index 7f2303b711..8fd23ea7ad 100644 +--- a/rtc_base/random.cc ++++ b/rtc_base/random.cc +@@ -11,21 +11,13 @@ + + #include <cmath> + #include <cstdint> +-#include <limits> + #include <numbers> + +-#include "absl/random/random.h" + #include "rtc_base/checks.h" + #include "rtc_base/numerics/safe_conversions.h" + + namespace webrtc { + +-Random::Random() { +- absl::BitGen gen; +- state_ = +- absl::Uniform<uint64_t>(gen, 1, std::numeric_limits<uint64_t>::max()); +-} +- + Random::Random(uint64_t seed) { + RTC_DCHECK(seed != 0x0ull); + state_ = seed; +diff --git a/rtc_base/random.h b/rtc_base/random.h +index 3b9112a9e3..b3b9fd1608 100644 +--- a/rtc_base/random.h ++++ b/rtc_base/random.h +@@ -21,15 +21,20 @@ namespace webrtc { + + class Random { + public: +- // Returns a random number generator with a random seed. +- Random(); +- +- // Returns a random number generator with the given seed. The seed must not +- // be 0. It is expected that callers intelligently generate their seeds and do +- // not simply pass a constant value or use the current time as a seed. +- // This function should only be used for testing. ++ // TODO(tommi): Change this so that the seed can be initialized internally, ++ // e.g. by offering two ways of constructing or offer a static method that ++ // returns a seed that's suitable for initialization. ++ // The problem now is that callers are calling clock_->TimeInMicroseconds() ++ // which calls TickTime::Now().Ticks(), which can return a very low value on ++ // Mac and can result in a seed of 0 after conversion to microseconds. ++ // Besides the quality of the random seed being poor, this also requires ++ // the client to take on extra dependencies to generate a seed. ++ // If we go for a static seed generator in Random, we can use something from ++ // webrtc/rtc_base and make sure that it works the same way across platforms. ++ // See also discussion here: https://codereview.webrtc.org/1623543002/ + explicit Random(uint64_t seed); + ++ Random() = delete; + Random(const Random&) = delete; + Random& operator=(const Random&) = delete; + diff --git a/third_party/libwebrtc/moz-patch-stack/p0003.patch b/third_party/libwebrtc/moz-patch-stack/p0003.patch @@ -1,331 +1,61 @@ -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: =?UTF-8?q?Henrik=20Bostr=C3=B6m?= <hbos@webrtc.org> +Date: Wed, 10 Sep 2025 12:47:04 +0200 +Subject: (cherry-pick-branch-heads/7390) [M141] Do not hide inbound-rtp if + media is received. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit -(cherry picked from commit 6908505ae0eba5d530ad0bb4b37d4654a4f36c95) +This condition neglected the fact that if Insertable Streams API is used +we can have frames or samples despite packets never being received. -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> -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} +This CL fixes this unintended regression. + +# Ignore unrelated compile issues on ios webrtc bots +NOTRY=True + +(cherry picked from commit c15949eda5a00122e2f3b5a643e15781049b9927) + +Bug: chromium:444048024, chromium:444384230 +Change-Id: Ie6e17a3bc96701476787f5898446f3f706715d15 +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408884 +Commit-Queue: Guido Urdaneta <guidou@webrtc.org> +Reviewed-by: Guido Urdaneta <guidou@webrtc.org> +Auto-Submit: Henrik Boström <hbos@webrtc.org> +Commit-Queue: Henrik Boström <hbos@webrtc.org> +Cr-Original-Commit-Position: refs/heads/main@{#45616} +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/409020 +Cr-Commit-Position: refs/branch-heads/7390@{#2} Cr-Branched-From: 2f553bf8d573c90176d51559b76dfc836996c8f5-refs/heads/main@{#45520} --- - 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(+) + pc/rtc_stats_collector.cc | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 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/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; +diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc +index 8686143e68..8d6cc22426 100644 +--- a/pc/rtc_stats_collector.cc ++++ b/pc/rtc_stats_collector.cc +@@ -1754,7 +1754,10 @@ void RTCStatsCollector::ProduceAudioRTPStreamStats_n( + if (!voice_receiver_info.connected()) { + continue; // The SSRC is not known yet. + } +- if (spec_lifetime && voice_receiver_info.packets_received == 0) { ++ // Check both packets received and samples received to handle the Insertable ++ // Streams use case of receiving media without receiving packets. ++ if (spec_lifetime && voice_receiver_info.packets_received == 0 && ++ voice_receiver_info.total_samples_received == 0) { + // The SSRC is known despite not receiving any packets. This happens if + // SSRC is signalled in the SDP which we should not rely on for getStats. + continue; +@@ -1868,7 +1871,10 @@ void RTCStatsCollector::ProduceVideoRTPStreamStats_n( + if (!video_receiver_info.connected()) { + continue; // The SSRC is not known yet. } - } - -+ 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; - } - -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); - } -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); +- if (spec_lifetime && video_receiver_info.packets_received == 0) { ++ // Check both packets received and frames received to handle the Insertable ++ // Streams use case of receiving media without receiving packets. ++ if (spec_lifetime && video_receiver_info.packets_received == 0 && ++ video_receiver_info.frames_received == 0) { + // The SSRC is known despite not receiving any packets. This happens if + // SSRC is signalled in the SDP which we should not rely on for getStats. + continue; diff --git a/third_party/libwebrtc/moz-patch-stack/p0003.patch b/third_party/libwebrtc/moz-patch-stack/p0004.patch