tor-browser

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

commit c1169b7770445bb613b057ca63cd3ac4715125a9
parent 7a0f5cb43e8e0326cf21b3cc92d04a7f020e06d6
Author: Dan Baker <dbaker@mozilla.com>
Date:   Mon, 27 Oct 2025 12:37:34 -0600

Bug 1995393 - Vendor libwebrtc from 306943dd4e

Upstream commit: https://webrtc.googlesource.com/src/+/306943dd4eab212b857557e20e597d50e6b116c7
    Demonstrate a trampoline for step 1 of Sigslot removal

    This demonstrates use of a trampoline so that callers to sigslot
    functions can use lambda functions without any other changes.

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

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Mthird_party/libwebrtc/api/task_queue/pending_task_safety_flag.h | 11+++++++++++
Mthird_party/libwebrtc/moz-patch-stack/s0001.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0027.patch | 30+++++++++++++++---------------
Mthird_party/libwebrtc/moz-patch-stack/s0053.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0091.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0094.patch | 6+++---
Mthird_party/libwebrtc/moz-patch-stack/s0102.patch | 4++--
Mthird_party/libwebrtc/moz-patch-stack/s0107.patch | 8++++----
Mthird_party/libwebrtc/p2p/client/basic_port_allocator.cc | 4++--
Mthird_party/libwebrtc/rtc_base/BUILD.gn | 2++
Mthird_party/libwebrtc/rtc_base/network.h | 31+++++++++++++++++++++++++++++++
Mthird_party/libwebrtc/rtc_base/network_unittest.cc | 24++++++++----------------
13 files changed, 83 insertions(+), 47 deletions(-)

diff --git a/third_party/libwebrtc/README.mozilla.last-vendor b/third_party/libwebrtc/README.mozilla.last-vendor @@ -1,4 +1,4 @@ # ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc -libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-27T18:34:57.996454+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-27T18:37:16.988872+00:00. # base of lastest vendoring -dc0a35fe85 +306943dd4e diff --git a/third_party/libwebrtc/api/task_queue/pending_task_safety_flag.h b/third_party/libwebrtc/api/task_queue/pending_task_safety_flag.h @@ -172,6 +172,17 @@ inline absl::AnyInvocable<void() &&> SafeTask( }; } +// Safely execute an Invocable that can be used multiple times. +inline absl::AnyInvocable<void()> SafeInvocable( + scoped_refptr<PendingTaskSafetyFlag> flag, + absl::AnyInvocable<void()> task) { + return [flag = std::move(flag), task = std::move(task)]() mutable { + if (flag->alive()) { + task(); + } + }; +} + } // namespace webrtc #endif // API_TASK_QUEUE_PENDING_TASK_SAFETY_FLAG_H_ diff --git a/third_party/libwebrtc/moz-patch-stack/s0001.patch b/third_party/libwebrtc/moz-patch-stack/s0001.patch @@ -1383,7 +1383,7 @@ index 5ccc3d7d38..cd957416bc 100644 const bool enable_svc_for_simulcast_; std::optional<SimulcastToSvcConverter> simulcast_to_svc_converter_; diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index b806050fca..66b76b8c78 100644 +index 6293f7cc2a..1e88de16e7 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -449,6 +449,12 @@ rtc_library("logging") { diff --git a/third_party/libwebrtc/moz-patch-stack/s0027.patch b/third_party/libwebrtc/moz-patch-stack/s0027.patch @@ -1013,7 +1013,7 @@ index 39aa39a41c..b26e30e8bb 100644 "/config/external/nspr", "/nsprpub/lib/ds", diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index 66b76b8c78..f88a45d683 100644 +index 1e88de16e7..2d87e879e3 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -326,6 +326,7 @@ rtc_library("sample_counter") { @@ -1050,7 +1050,7 @@ index 66b76b8c78..f88a45d683 100644 visibility = [ "*" ] sources = [ "network.cc", -@@ -1220,16 +1225,20 @@ rtc_library("network") { +@@ -1222,16 +1227,20 @@ rtc_library("network") { deps += [ ":win32" ] } } @@ -1071,7 +1071,7 @@ index 66b76b8c78..f88a45d683 100644 visibility = [ "*" ] sources = [ "net_helper.cc", -@@ -1240,8 +1249,10 @@ rtc_library("net_helper") { +@@ -1242,8 +1251,10 @@ rtc_library("net_helper") { "//third_party/abseil-cpp/absl/strings:string_view", ] } @@ -1082,7 +1082,7 @@ index 66b76b8c78..f88a45d683 100644 visibility = [ "*" ] sources = [ "socket_adapters.cc", -@@ -1262,6 +1273,7 @@ rtc_library("socket_adapters") { +@@ -1264,6 +1275,7 @@ rtc_library("socket_adapters") { "//third_party/abseil-cpp/absl/strings:string_view", ] } @@ -1090,7 +1090,7 @@ index 66b76b8c78..f88a45d683 100644 rtc_library("network_route") { sources = [ -@@ -1276,6 +1288,7 @@ rtc_library("network_route") { +@@ -1278,6 +1290,7 @@ rtc_library("network_route") { } rtc_library("async_tcp_socket") { @@ -1098,7 +1098,7 @@ index 66b76b8c78..f88a45d683 100644 sources = [ "async_tcp_socket.cc", "async_tcp_socket.h", -@@ -1295,8 +1308,10 @@ rtc_library("async_tcp_socket") { +@@ -1297,8 +1310,10 @@ rtc_library("async_tcp_socket") { "network:sent_packet", ] } @@ -1109,7 +1109,7 @@ index 66b76b8c78..f88a45d683 100644 visibility = [ "*" ] sources = [ "async_udp_socket.cc", -@@ -1320,8 +1335,10 @@ rtc_library("async_udp_socket") { +@@ -1322,8 +1337,10 @@ rtc_library("async_udp_socket") { "system:no_unique_address", ] } @@ -1120,7 +1120,7 @@ index 66b76b8c78..f88a45d683 100644 visibility = [ "*" ] sources = [ "async_packet_socket.cc", -@@ -1344,6 +1361,7 @@ rtc_library("async_packet_socket") { +@@ -1346,6 +1363,7 @@ rtc_library("async_packet_socket") { "//third_party/abseil-cpp/absl/functional:any_invocable", ] } @@ -1128,7 +1128,7 @@ index 66b76b8c78..f88a45d683 100644 if (rtc_include_tests) { rtc_library("async_packet_socket_unittest") { -@@ -1429,6 +1447,7 @@ rtc_library("data_rate_limiter") { +@@ -1431,6 +1449,7 @@ rtc_library("data_rate_limiter") { } rtc_library("unique_id_generator") { @@ -1136,7 +1136,7 @@ index 66b76b8c78..f88a45d683 100644 sources = [ "unique_id_generator.cc", "unique_id_generator.h", -@@ -1446,6 +1465,7 @@ rtc_library("unique_id_generator") { +@@ -1448,6 +1467,7 @@ rtc_library("unique_id_generator") { "//third_party/abseil-cpp/absl/strings:string_view", ] } @@ -1144,7 +1144,7 @@ index 66b76b8c78..f88a45d683 100644 rtc_library("crc32") { sources = [ -@@ -1477,6 +1497,7 @@ rtc_library("stream") { +@@ -1479,6 +1499,7 @@ rtc_library("stream") { } rtc_library("rtc_certificate_generator") { @@ -1152,7 +1152,7 @@ index 66b76b8c78..f88a45d683 100644 visibility = [ "*" ] sources = [ "rtc_certificate_generator.cc", -@@ -1491,6 +1512,7 @@ rtc_library("rtc_certificate_generator") { +@@ -1493,6 +1514,7 @@ rtc_library("rtc_certificate_generator") { "//third_party/abseil-cpp/absl/functional:any_invocable", ] } @@ -1160,7 +1160,7 @@ index 66b76b8c78..f88a45d683 100644 rtc_source_set("ssl_header") { visibility = [ "*" ] -@@ -1547,6 +1569,7 @@ rtc_library("crypto_random") { +@@ -1549,6 +1571,7 @@ rtc_library("crypto_random") { } rtc_library("ssl") { @@ -1168,7 +1168,7 @@ index 66b76b8c78..f88a45d683 100644 visibility = [ "*" ] sources = [ "openssl_key_pair.cc", -@@ -1619,6 +1642,7 @@ rtc_library("ssl") { +@@ -1621,6 +1644,7 @@ rtc_library("ssl") { deps += [ ":win32" ] } } @@ -1176,7 +1176,7 @@ index 66b76b8c78..f88a45d683 100644 rtc_library("ssl_adapter") { visibility = [ "*" ] -@@ -2342,7 +2366,7 @@ if (rtc_include_tests) { +@@ -2344,7 +2368,7 @@ if (rtc_include_tests) { } } diff --git a/third_party/libwebrtc/moz-patch-stack/s0053.patch b/third_party/libwebrtc/moz-patch-stack/s0053.patch @@ -29,7 +29,7 @@ index 7db75d5fd3..d0feb5007c 100644 rtc_library("task_queue_test") { visibility = [ "*" ] diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index f88a45d683..4e6b30a721 100644 +index 2d87e879e3..54a023fecb 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -664,10 +664,14 @@ if (is_mac || is_ios) { diff --git a/third_party/libwebrtc/moz-patch-stack/s0091.patch b/third_party/libwebrtc/moz-patch-stack/s0091.patch @@ -13,7 +13,7 @@ Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/4e7b3c485e549e7e3 1 file changed, 6 insertions(+) diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index 4e6b30a721..731aa89c4c 100644 +index 54a023fecb..e3dbf32b11 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -992,6 +992,12 @@ rtc_library("threading") { diff --git a/third_party/libwebrtc/moz-patch-stack/s0094.patch b/third_party/libwebrtc/moz-patch-stack/s0094.patch @@ -9,10 +9,10 @@ Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/ee2f06666bcc6d22c 1 file changed, 2 insertions(+) diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index 731aa89c4c..aca465a29f 100644 +index e3dbf32b11..5631595e2c 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn -@@ -1655,6 +1655,7 @@ if (!build_with_mozilla) { +@@ -1657,6 +1657,7 @@ if (!build_with_mozilla) { } rtc_library("ssl_adapter") { @@ -20,7 +20,7 @@ index 731aa89c4c..aca465a29f 100644 visibility = [ "*" ] sources = [ "openssl_adapter.cc", -@@ -1703,6 +1704,7 @@ rtc_library("ssl_adapter") { +@@ -1705,6 +1706,7 @@ rtc_library("ssl_adapter") { configs += [ "..:external_ssl_library" ] } } diff --git a/third_party/libwebrtc/moz-patch-stack/s0102.patch b/third_party/libwebrtc/moz-patch-stack/s0102.patch @@ -616,7 +616,7 @@ index 47e5c4d2ca..10fdbd3c1c 100644 if (rtc_build_libsrtp) { diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index aca465a29f..8309bcaadc 100644 +index 5631595e2c..a21820e9e7 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -9,8 +9,8 @@ @@ -630,7 +630,7 @@ index aca465a29f..8309bcaadc 100644 } rtc_source_set("protobuf_utils") { -@@ -1895,8 +1895,8 @@ if (!rtc_rusty_base64) { +@@ -1897,8 +1897,8 @@ if (!rtc_rusty_base64) { ] } } else { diff --git a/third_party/libwebrtc/moz-patch-stack/s0107.patch b/third_party/libwebrtc/moz-patch-stack/s0107.patch @@ -116,10 +116,10 @@ index 12c65b29f3..22057def53 100644 public_configs = [] if (!build_with_chromium) { diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index 8309bcaadc..c99788fbef 100644 +index a21820e9e7..8208b5d0e1 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn -@@ -1534,6 +1534,7 @@ rtc_source_set("ssl_header") { +@@ -1536,6 +1536,7 @@ rtc_source_set("ssl_header") { } rtc_library("digest") { @@ -127,7 +127,7 @@ index 8309bcaadc..c99788fbef 100644 visibility = [ "*" ] sources = [ "message_digest.cc", -@@ -1555,8 +1556,10 @@ rtc_library("digest") { +@@ -1557,8 +1558,10 @@ rtc_library("digest") { configs += [ "..:external_ssl_library" ] } } @@ -138,7 +138,7 @@ index 8309bcaadc..c99788fbef 100644 visibility = [ "*" ] sources = [ "crypto_random.cc", -@@ -1577,6 +1580,7 @@ rtc_library("crypto_random") { +@@ -1579,6 +1582,7 @@ rtc_library("crypto_random") { configs += [ "..:external_ssl_library" ] } } diff --git a/third_party/libwebrtc/p2p/client/basic_port_allocator.cc b/third_party/libwebrtc/p2p/client/basic_port_allocator.cc @@ -268,8 +268,8 @@ BasicPortAllocatorSession::BasicPortAllocatorSession( turn_port_prune_policy_(allocator->turn_port_prune_policy()) { TRACE_EVENT0("webrtc", "BasicPortAllocatorSession::BasicPortAllocatorSession"); - allocator_->network_manager()->SignalNetworksChanged.connect( - this, &BasicPortAllocatorSession::OnNetworksChanged); + allocator_->network_manager()->SubscribeNetworksChanged( + SafeInvocable(network_safety_.flag(), [this] { OnNetworksChanged(); })); allocator_->network_manager()->StartUpdating(); } diff --git a/third_party/libwebrtc/rtc_base/BUILD.gn b/third_party/libwebrtc/rtc_base/BUILD.gn @@ -1200,6 +1200,7 @@ if (!build_with_mozilla) { "network.h", ] deps = [ + ":callback_list", ":checks", ":ifaddrs_converter", ":ip_address", @@ -1226,6 +1227,7 @@ if (!build_with_mozilla) { "//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/base:nullability", + "//third_party/abseil-cpp/absl/functional:any_invocable", "//third_party/abseil-cpp/absl/memory", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", diff --git a/third_party/libwebrtc/rtc_base/network.h b/third_party/libwebrtc/rtc_base/network.h @@ -20,6 +20,7 @@ #include <vector> #include "absl/base/nullability.h" +#include "absl/functional/any_invocable.h" #include "absl/strings/string_view.h" #include "api/array_view.h" #include "api/environment/environment.h" @@ -27,6 +28,7 @@ #include "api/scoped_refptr.h" #include "api/sequence_checker.h" #include "api/task_queue/pending_task_safety_flag.h" +#include "rtc_base/callback_list.h" #include "rtc_base/checks.h" #include "rtc_base/ip_address.h" #include "rtc_base/mdns_responder_interface.h" @@ -124,6 +126,8 @@ class NetworkMask { class RTC_EXPORT NetworkManager : public DefaultLocalAddressProvider, public MdnsResponderProvider { public: + NetworkManager() + : networks_changed_trampoline_(this), error_trampoline_(this) {} // This enum indicates whether adapter enumeration is allowed. enum EnumerationPermission { ENUMERATION_ALLOWED, // Adapter enumeration is allowed. Getting 0 network @@ -188,6 +192,33 @@ class RTC_EXPORT NetworkManager : public DefaultLocalAddressProvider, MdnsResponderInterface* GetMdnsResponder() const override; virtual void set_vpn_list(const std::vector<NetworkMask>& /* vpn */) {} + void SubscribeNetworksChanged(absl::AnyInvocable<void()> callback) { + networks_changed_trampoline_.Subscribe(std::move(callback)); + } + void NotifyNetworksChanged() { SignalNetworksChanged(); } + void SubscribeError(absl::AnyInvocable<void()> callback) { + error_trampoline_.Subscribe(std::move(callback)); + } + void NotifyError() { SignalError(); } + + private: + template <auto member_signal> + class SignalTrampoline : public sigslot::has_slots<> { + public: + explicit SignalTrampoline(NetworkManager* that) { + (that->*member_signal).connect(this, &SignalTrampoline::Notify); + } + void Notify() { callbacks_.Send(); } + void Subscribe(absl::AnyInvocable<void()> callback) { + callbacks_.AddReceiver(std::move(callback)); + } + + private: + CallbackList<> callbacks_; + }; + SignalTrampoline<&NetworkManager::SignalNetworksChanged> + networks_changed_trampoline_; + SignalTrampoline<&NetworkManager::SignalError> error_trampoline_; }; // Represents a Unix-type network interface, with a name and single address. diff --git a/third_party/libwebrtc/rtc_base/network_unittest.cc b/third_party/libwebrtc/rtc_base/network_unittest.cc @@ -426,8 +426,7 @@ TEST_F(NetworkTest, DISABLED_TestCreateNetworks) { TEST_F(NetworkTest, TestUpdateNetworks) { PhysicalSocketServer socket_server; BasicNetworkManager manager(env_, &socket_server); - manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this), - &NetworkTest::OnNetworksChanged); + manager.SubscribeNetworksChanged([this] { OnNetworksChanged(); }); EXPECT_EQ(NetworkManager::ENUMERATION_ALLOWED, manager.enumeration_permission()); manager.StartUpdating(); @@ -573,8 +572,7 @@ void SetupNetworks(std::vector<std::unique_ptr<Network>>* list) { TEST_F(NetworkTest, TestIPv6MergeNetworkList) { PhysicalSocketServer socket_server; BasicNetworkManager manager(env_, &socket_server); - manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this), - &NetworkTest::OnNetworksChanged); + manager.SubscribeNetworksChanged([this]() { OnNetworksChanged(); }); std::vector<std::unique_ptr<Network>> networks; SetupNetworks(&networks); std::vector<const Network*> original_list = CopyNetworkPointers(networks); @@ -595,8 +593,7 @@ TEST_F(NetworkTest, TestIPv6MergeNetworkList) { TEST_F(NetworkTest, TestNoChangeMerge) { PhysicalSocketServer socket_server; BasicNetworkManager manager(env_, &socket_server); - manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this), - &NetworkTest::OnNetworksChanged); + manager.SubscribeNetworksChanged([this]() { OnNetworksChanged(); }); std::vector<std::unique_ptr<Network>> networks; SetupNetworks(&networks); std::vector<const Network*> original_list = CopyNetworkPointers(networks); @@ -626,8 +623,7 @@ TEST_F(NetworkTest, TestNoChangeMerge) { TEST_F(NetworkTest, MergeWithChangedIP) { PhysicalSocketServer socket_server; BasicNetworkManager manager(env_, &socket_server); - manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this), - &NetworkTest::OnNetworksChanged); + manager.SubscribeNetworksChanged([this]() { OnNetworksChanged(); }); std::vector<std::unique_ptr<Network>> original_list; SetupNetworks(&original_list); // Make a network that we're going to change. @@ -663,8 +659,7 @@ TEST_F(NetworkTest, MergeWithChangedIP) { TEST_F(NetworkTest, TestMultipleIPMergeNetworkList) { PhysicalSocketServer socket_server; BasicNetworkManager manager(env_, &socket_server); - manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this), - &NetworkTest::OnNetworksChanged); + manager.SubscribeNetworksChanged([this]() { OnNetworksChanged(); }); std::vector<std::unique_ptr<Network>> original_list; SetupNetworks(&original_list); const Network* const network_ptr = original_list[2].get(); @@ -717,8 +712,7 @@ TEST_F(NetworkTest, TestMultipleIPMergeNetworkList) { TEST_F(NetworkTest, TestMultiplePublicNetworksOnOneInterfaceMerge) { PhysicalSocketServer socket_server; BasicNetworkManager manager(env_, &socket_server); - manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this), - &NetworkTest::OnNetworksChanged); + manager.SubscribeNetworksChanged([this]() { OnNetworksChanged(); }); std::vector<std::unique_ptr<Network>> original_list; SetupNetworks(&original_list); bool changed = false; @@ -1253,8 +1247,7 @@ TEST_F(NetworkTest, TestNetworkMonitoring) { FakeNetworkMonitorFactory factory; PhysicalSocketServer socket_server; BasicNetworkManager manager(env_, &socket_server, &factory); - manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this), - &NetworkTest::OnNetworksChanged); + manager.SubscribeNetworksChanged([this]() { OnNetworksChanged(); }); manager.StartUpdating(); FakeNetworkMonitor* network_monitor = GetNetworkMonitor(manager); EXPECT_TRUE(network_monitor && network_monitor->started()); @@ -1285,8 +1278,7 @@ TEST_F(NetworkTest, MAYBE_DefaultLocalAddress) { FakeNetworkMonitorFactory factory; PhysicalSocketServer socket_server; TestBasicNetworkManager manager(env_, &socket_server, &factory); - manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this), - &NetworkTest::OnNetworksChanged); + manager.SubscribeNetworksChanged([this]() { OnNetworksChanged(); }); manager.StartUpdating(); EXPECT_THAT(WaitUntil([&] { return callback_called_; }, IsTrue()), IsRtcOk());