commit cd426a944e6e13faba3e3dad43ce34d5f93238c5
parent bf88747eb44cea9140e2579aa6459995d4dd0ad9
Author: Dan Baker <dbaker@mozilla.com>
Date: Mon, 27 Oct 2025 11:31:10 -0600
Bug 1995393 - Vendor libwebrtc from a275d3e4af
We already cherry-picked this when we vendored 1c0ba91c85.
Upstream commit: https://webrtc.googlesource.com/src/+/a275d3e4af59c3bd34c93282afdf3bdbed8fe7c5
Revert "sigslot: make PortInterface::SignalRoleConflict a CallbackLst"
This reverts commit 1c0ba91c855f26868a6864ff048ca7ebf03ce724.
Reason for revert: Break downstream project
Bug: webrtc:42222066
Original change's description:
> sigslot: make PortInterface::SignalRoleConflict a CallbackLst
>
> Bug: webrtc:42222066
> Change-Id: I15dab9209a58fec8c42b4096dc5682e46a844e19
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/403220
> Reviewed-by: Evan Shrubsole <eshr@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Commit-Queue: Philipp Hancke <phancke@meta.com>
> Cr-Commit-Position: refs/heads/main@{#45406}
Bug: webrtc:42222066
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: I51121efd42f49b172fd5f0fd1b562010ec6242af
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/405660
Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45410}
Diffstat:
4 files changed, 95 insertions(+), 314 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-24T20:25:09.476036+00:00.
+libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-27T17:30:55.887559+00:00.
# base of lastest vendoring
-54aeeeb6f8
+a275d3e4af
diff --git a/third_party/libwebrtc/moz-patch-stack/a275d3e4af.no-op-cherry-pick-msg b/third_party/libwebrtc/moz-patch-stack/a275d3e4af.no-op-cherry-pick-msg
@@ -1 +0,0 @@
-We already cherry-picked this when we vendored 1c0ba91c85.
diff --git a/third_party/libwebrtc/moz-patch-stack/p0001.patch b/third_party/libwebrtc/moz-patch-stack/p0001.patch
@@ -1,218 +1,109 @@
-From: Daniel Baker <dbaker@mozilla.com>
-Date: Fri, 24 Oct 2025 14:18:02 -0600
-Subject: (tmp-cherry-pick) Revert "sigslot: make
- PortInterface::SignalRoleConflict a CallbackLst" (a275d3e4af)
+From: Jonas Oreland <jonaso@webrtc.org>
+Date: Tue, 26 Aug 2025 15:57:29 +0200
+Subject: (cherry-pick-branch-heads/7339) [M140] DTLS1.3: Fix missing
+ retransmission due to failure to set timer.
-This reverts commit 1c0ba91c855f26868a6864ff048ca7ebf03ce724.
+DTLS 1.3 considers itself connected earlier than DTLS 1.2 did - when
+second flight reaches the client. This CL fixes a bug that when
+client is connected (state_ != SSL_CONNECTING), it would not
+continue retransmitting. Continuous retransmission is needed
+when the third flight is lost multiple times. Or really anytime that DTLS request it :)
-Reason for revert: Break downstream project
+This fixes the TODO in dtls_ice_integrationtest.cc in which dtls1.3
+spuriously failed with certain (packet loss intensive) configurations.
-Bug: webrtc:42222066
-Original change's description:
-> sigslot: make PortInterface::SignalRoleConflict a CallbackLst
->
-> Bug: webrtc:42222066
-> Change-Id: I15dab9209a58fec8c42b4096dc5682e46a844e19
-> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/403220
-> Reviewed-by: Evan Shrubsole <eshr@webrtc.org>
-> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
-> Commit-Queue: Philipp Hancke <phancke@meta.com>
-> Cr-Commit-Position: refs/heads/main@{#45406}
+CREDITS: sergeysu@ that found and fixed the problem!
+
+(cherry picked from commit 4221e1bc2fc360448c1663f0bbae058ff9f65a48)
-Bug: webrtc:42222066
-No-Presubmit: true
-No-Tree-Checks: true
No-Try: true
-Change-Id: I51121efd42f49b172fd5f0fd1b562010ec6242af
-Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/405660
-Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
-Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
-Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
-Cr-Commit-Position: refs/heads/main@{#45410}
+Bug: chromium:441245658, chromium:441486101
+Change-Id: I3302f6f384d7e4cda090184094a6fadaf7e4f129
+Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/406320
+Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
+Reviewed-by: Harald Alvestrand <hta@webrtc.org>
+Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
+Cr-Original-Commit-Position: refs/heads/main@{#45439}
+Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407780
+Commit-Queue: Guido Urdaneta <guidou@webrtc.org>
+Cr-Commit-Position: refs/branch-heads/7339@{#2}
+Cr-Branched-From: 9bd64751d9b3b35a820cb72c9029993e218146a1-refs/heads/main@{#45270}
---
- p2p/BUILD.gn | 1 -
- p2p/base/connection.cc | 2 +-
- p2p/base/p2p_transport_channel.cc | 10 +++++-----
- p2p/base/p2p_transport_channel.h | 2 +-
- p2p/base/port.cc | 13 ++-----------
- p2p/base/port.h | 7 -------
- p2p/base/port_interface.h | 4 +---
- p2p/base/port_unittest.cc | 8 +++-----
- 8 files changed, 13 insertions(+), 34 deletions(-)
+ p2p/dtls/dtls_ice_integrationtest.cc | 6 +-----
+ rtc_base/openssl_stream_adapter.cc | 15 ++++++++++++---
+ rtc_base/openssl_stream_adapter.h | 2 ++
+ 3 files changed, 15 insertions(+), 8 deletions(-)
-diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
-index 8431c4ce1b..f101a540b9 100644
---- a/p2p/BUILD.gn
-+++ b/p2p/BUILD.gn
-@@ -649,7 +649,6 @@ rtc_library("port_interface") {
- "../rtc_base:socket_address",
- "../rtc_base/network:sent_packet",
- "../rtc_base/third_party/sigslot",
-- "//third_party/abseil-cpp/absl/functional:any_invocable",
- "//third_party/abseil-cpp/absl/strings:string_view",
- ]
- }
-diff --git a/p2p/base/connection.cc b/p2p/base/connection.cc
-index 659afe7c26..18288daf47 100644
---- a/p2p/base/connection.cc
-+++ b/p2p/base/connection.cc
-@@ -1611,7 +1611,7 @@ void Connection::OnConnectionRequestErrorResponse(ConnectionRequest* request,
- error_code == STUN_ERROR_UNAUTHORIZED) {
- // Recoverable error, retry
- } else if (error_code == STUN_ERROR_ROLE_CONFLICT) {
-- port_->NotifyRoleConflict();
-+ port_->SignalRoleConflict(port_.get());
- } else if (request->msg()->type() == GOOG_PING_REQUEST) {
- // Race, retry.
- } else {
-diff --git a/p2p/base/p2p_transport_channel.cc b/p2p/base/p2p_transport_channel.cc
-index 6c928bc8a9..323cdd26ab 100644
---- a/p2p/base/p2p_transport_channel.cc
-+++ b/p2p/base/p2p_transport_channel.cc
-@@ -921,15 +921,15 @@ void P2PTransportChannel::OnPortReady(PortAllocatorSession* /* session */,
- ports_.push_back(port);
- port->SignalUnknownAddress.connect(this,
- &P2PTransportChannel::OnUnknownAddress);
-- port->SignalSentPacket.connect(this, &P2PTransportChannel::OnSentPacket);
--
- port->SubscribePortDestroyed(
- [this](PortInterface* port) { OnPortDestroyed(port); });
-- port->SubscribeRoleConflict(
-- [this](PortInterface* /*unused*/) { NotifyRoleConflict(); });
-+
-+ port->SignalRoleConflict.connect(this, &P2PTransportChannel::OnRoleConflict);
-+ port->SignalSentPacket.connect(this, &P2PTransportChannel::OnSentPacket);
+diff --git a/p2p/dtls/dtls_ice_integrationtest.cc b/p2p/dtls/dtls_ice_integrationtest.cc
+index 339238d664..1610f0002a 100644
+--- a/p2p/dtls/dtls_ice_integrationtest.cc
++++ b/p2p/dtls/dtls_ice_integrationtest.cc
+@@ -127,11 +127,7 @@ class DtlsIceIntegrationTest : public ::testing::TestWithParam<std::tuple<
- // Attempt to create a connection from this new port to all of the remote
- // candidates that we were given so far.
-+
- std::vector<RemoteCandidate>::iterator iter;
- for (iter = remote_candidates_.begin(); iter != remote_candidates_.end();
- ++iter) {
-@@ -1133,7 +1133,7 @@ void P2PTransportChannel::OnCandidateFilterChanged(uint32_t prev_filter,
- }
- }
+ BuiltInNetworkBehaviorConfig networkBehavior;
+ networkBehavior.link_capacity = DataRate::KilobitsPerSec(220);
+- // TODO (webrtc:383141571) : Investigate why this testcase fails for
+- // DTLS 1.3 delay if networkBehavior.queue_delay_ms = 100ms.
+- // - unless both peers support dtls in stun, in which case it passes.
+- // - note: only for dtls1.3, it works for dtls1.2!
+- networkBehavior.queue_delay_ms = 50;
++ networkBehavior.queue_delay_ms = 100;
+ networkBehavior.queue_length_packets = 30;
+ networkBehavior.loss_percent = 50;
--void P2PTransportChannel::NotifyRoleConflict() {
-+void P2PTransportChannel::OnRoleConflict(PortInterface* /* port */) {
- SignalRoleConflict(this); // STUN ping will be sent when SetRole is called
- // from Transport.
- }
-diff --git a/p2p/base/p2p_transport_channel.h b/p2p/base/p2p_transport_channel.h
-index 067d2dce52..738e48e26a 100644
---- a/p2p/base/p2p_transport_channel.h
-+++ b/p2p/base/p2p_transport_channel.h
-@@ -364,7 +364,7 @@ class RTC_EXPORT P2PTransportChannel : public IceTransportInternal,
- // When pruning a port, move it from `ports_` to `pruned_ports_`.
- // Returns true if the port is found and removed from `ports_`.
- bool PrunePort(PortInterface* port);
-- void NotifyRoleConflict();
-+ void OnRoleConflict(PortInterface* port);
-
- void OnConnectionStateChange(Connection* connection);
- void OnReadPacket(Connection* connection, const ReceivedIpPacket& packet);
-diff --git a/p2p/base/port.cc b/p2p/base/port.cc
-index 2bab064184..68fb212bf4 100644
---- a/p2p/base/port.cc
-+++ b/p2p/base/port.cc
-@@ -682,7 +682,7 @@ bool Port::MaybeIceRoleConflict(const SocketAddress& addr,
- case ICEROLE_CONTROLLING:
- if (ICEROLE_CONTROLLING == remote_ice_role) {
- if (remote_tiebreaker >= tiebreaker_) {
-- NotifyRoleConflict();
-+ SignalRoleConflict(this);
- } else {
- // Send Role Conflict (487) error response.
- SendBindingErrorResponse(stun_msg, addr, STUN_ERROR_ROLE_CONFLICT,
-@@ -694,7 +694,7 @@ bool Port::MaybeIceRoleConflict(const SocketAddress& addr,
- case ICEROLE_CONTROLLED:
- if (ICEROLE_CONTROLLED == remote_ice_role) {
- if (remote_tiebreaker < tiebreaker_) {
-- NotifyRoleConflict();
-+ SignalRoleConflict(this);
+diff --git a/rtc_base/openssl_stream_adapter.cc b/rtc_base/openssl_stream_adapter.cc
+index 4acbb55890..2b45d37df7 100644
+--- a/rtc_base/openssl_stream_adapter.cc
++++ b/rtc_base/openssl_stream_adapter.cc
+@@ -852,10 +852,15 @@ void OpenSSLStreamAdapter::SetTimeout(int delay_ms) {
+ // We check the timer even after SSL_CONNECTED,
+ // but ContinueSSL() is only needed when SSL_CONNECTING
+ if (state_ == SSL_CONNECTING) {
++ // Note: timeout is set inside ContinueSSL()
+ ContinueSSL();
++ } else if (state_ == SSL_CONNECTED) {
++ MaybeSetTimeout();
++ } else {
++ RTC_DCHECK_NOTREACHED() << "state_: " << state_;
+ }
} else {
- // Send Role Conflict (487) error response.
- SendBindingErrorResponse(stun_msg, addr, STUN_ERROR_ROLE_CONFLICT,
-@@ -1021,13 +1021,4 @@ void Port::OnRequestLocalNetworkAccessPermission(
- std::move(callback)(status);
- }
-
--void Port::SubscribeRoleConflict(
-- std::function<void(PortInterface* /*unused*/)> callback) {
-- role_conflict_callback_list_.AddReceiver(std::move(callback));
--}
--
--void Port::NotifyRoleConflict() {
-- role_conflict_callback_list_.Send(this);
--}
--
- } // namespace webrtc
-diff --git a/p2p/base/port.h b/p2p/base/port.h
-index 5ceddb477c..e25ec527a4 100644
---- a/p2p/base/port.h
-+++ b/p2p/base/port.h
-@@ -383,11 +383,6 @@ class RTC_EXPORT Port : public PortInterface, public sigslot::has_slots<> {
-
- void GetStunStats(std::optional<StunStats>* /* stats */) override {}
-
-- // Signals for ICE role conflicts.
-- void SubscribeRoleConflict(
-- std::function<void(PortInterface*)> callback) override;
-- void NotifyRoleConflict() override;
--
- protected:
- void UpdateNetworkCost() override;
-
-@@ -557,8 +552,6 @@ class RTC_EXPORT Port : public PortInterface, public sigslot::has_slots<> {
- CallbackList<Port*, const IceCandidateErrorEvent&>
- candidate_error_callback_list_ RTC_GUARDED_BY(thread_);
+- RTC_DCHECK_NOTREACHED();
++ RTC_DCHECK_NOTREACHED() << "flag->alive() == false";
+ }
+ // This callback will never run again (stopped above).
+ return TimeDelta::PlusInfinity();
+@@ -970,6 +975,12 @@ int OpenSSLStreamAdapter::ContinueSSL() {
+ }
+ }
-- CallbackList<PortInterface*> role_conflict_callback_list_;
++ MaybeSetTimeout();
++
++ return 0;
++}
++
++void OpenSSLStreamAdapter::MaybeSetTimeout() {
+ if (ssl_ != nullptr) {
+ struct timeval timeout;
+ if (DTLSv1_get_timeout(ssl_, &timeout)) {
+@@ -977,8 +988,6 @@ int OpenSSLStreamAdapter::ContinueSSL() {
+ SetTimeout(delay);
+ }
+ }
-
- // Keep as the last member variable.
- WeakPtrFactory<Port> weak_factory_ RTC_GUARDED_BY(thread_);
- };
-diff --git a/p2p/base/port_interface.h b/p2p/base/port_interface.h
-index a25e6cd5c3..2335fc2434 100644
---- a/p2p/base/port_interface.h
-+++ b/p2p/base/port_interface.h
-@@ -124,9 +124,7 @@ class PortInterface {
- std::function<void(PortInterface*)> callback) = 0;
-
- // Signaled when Port discovers ice role conflict with the peer.
-- virtual void SubscribeRoleConflict(
-- std::function<void(PortInterface*)> callback) = 0;
-- virtual void NotifyRoleConflict() = 0;
-+ sigslot::signal1<PortInterface*> SignalRoleConflict;
+- return 0;
+ }
- // Normally, packets arrive through a connection (or they result signaling of
- // unknown address). Calling this method turns off delivery of packets
-diff --git a/p2p/base/port_unittest.cc b/p2p/base/port_unittest.cc
-index f8cdc6efac..60aa47d0fb 100644
---- a/p2p/base/port_unittest.cc
-+++ b/p2p/base/port_unittest.cc
-@@ -879,8 +879,7 @@ class PortTest : public ::testing::Test, public sigslot::has_slots<> {
- .ice_username_fragment = username,
- .ice_password = password};
- auto port = std::make_unique<TestPort>(args, 0, 0);
-- port->SubscribeRoleConflict(
-- [this](const PortInterface*) { OnRoleConflict(); });
-+ port->SignalRoleConflict.connect(this, &PortTest::OnRoleConflict);
- return port;
- }
- std::unique_ptr<TestPort> CreateTestPort(const SocketAddress& addr,
-@@ -904,12 +903,11 @@ class PortTest : public ::testing::Test, public sigslot::has_slots<> {
- .ice_username_fragment = username,
- .ice_password = password};
- auto port = std::make_unique<TestPort>(args, 0, 0);
-- port->SubscribeRoleConflict(
-- [this](const PortInterface*) { OnRoleConflict(); });
-+ port->SignalRoleConflict.connect(this, &PortTest::OnRoleConflict);
- return port;
+ void OpenSSLStreamAdapter::Error(absl::string_view context,
+diff --git a/rtc_base/openssl_stream_adapter.h b/rtc_base/openssl_stream_adapter.h
+index 856d37c156..c10e93e3d4 100644
+--- a/rtc_base/openssl_stream_adapter.h
++++ b/rtc_base/openssl_stream_adapter.h
+@@ -210,6 +210,8 @@ class OpenSSLStreamAdapter final : public SSLStreamAdapter {
+ !peer_certificate_digest_value_.empty();
}
-- void OnRoleConflict() { role_conflict_ = true; }
-+ void OnRoleConflict(PortInterface* port) { role_conflict_ = true; }
- bool role_conflict() const { return role_conflict_; }
++ void MaybeSetTimeout();
++
+ const std::unique_ptr<StreamInterface> stream_;
+ absl::AnyInvocable<void(SSLHandshakeError)> handshake_error_;
- void ConnectToSignalDestroyed(PortInterface* port) {
diff --git a/third_party/libwebrtc/moz-patch-stack/p0002.patch b/third_party/libwebrtc/moz-patch-stack/p0002.patch
@@ -1,109 +0,0 @@
-From: Jonas Oreland <jonaso@webrtc.org>
-Date: Tue, 26 Aug 2025 15:57:29 +0200
-Subject: (cherry-pick-branch-heads/7339) [M140] DTLS1.3: Fix missing
- retransmission due to failure to set timer.
-
-DTLS 1.3 considers itself connected earlier than DTLS 1.2 did - when
-second flight reaches the client. This CL fixes a bug that when
-client is connected (state_ != SSL_CONNECTING), it would not
-continue retransmitting. Continuous retransmission is needed
-when the third flight is lost multiple times. Or really anytime that DTLS request it :)
-
-This fixes the TODO in dtls_ice_integrationtest.cc in which dtls1.3
-spuriously failed with certain (packet loss intensive) configurations.
-
-CREDITS: sergeysu@ that found and fixed the problem!
-
-(cherry picked from commit 4221e1bc2fc360448c1663f0bbae058ff9f65a48)
-
-No-Try: true
-Bug: chromium:441245658, chromium:441486101
-Change-Id: I3302f6f384d7e4cda090184094a6fadaf7e4f129
-Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/406320
-Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
-Reviewed-by: Harald Alvestrand <hta@webrtc.org>
-Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
-Cr-Original-Commit-Position: refs/heads/main@{#45439}
-Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407780
-Commit-Queue: Guido Urdaneta <guidou@webrtc.org>
-Cr-Commit-Position: refs/branch-heads/7339@{#2}
-Cr-Branched-From: 9bd64751d9b3b35a820cb72c9029993e218146a1-refs/heads/main@{#45270}
----
- p2p/dtls/dtls_ice_integrationtest.cc | 6 +-----
- rtc_base/openssl_stream_adapter.cc | 15 ++++++++++++---
- rtc_base/openssl_stream_adapter.h | 2 ++
- 3 files changed, 15 insertions(+), 8 deletions(-)
-
-diff --git a/p2p/dtls/dtls_ice_integrationtest.cc b/p2p/dtls/dtls_ice_integrationtest.cc
-index 339238d664..1610f0002a 100644
---- a/p2p/dtls/dtls_ice_integrationtest.cc
-+++ b/p2p/dtls/dtls_ice_integrationtest.cc
-@@ -127,11 +127,7 @@ class DtlsIceIntegrationTest : public ::testing::TestWithParam<std::tuple<
-
- BuiltInNetworkBehaviorConfig networkBehavior;
- networkBehavior.link_capacity = DataRate::KilobitsPerSec(220);
-- // TODO (webrtc:383141571) : Investigate why this testcase fails for
-- // DTLS 1.3 delay if networkBehavior.queue_delay_ms = 100ms.
-- // - unless both peers support dtls in stun, in which case it passes.
-- // - note: only for dtls1.3, it works for dtls1.2!
-- networkBehavior.queue_delay_ms = 50;
-+ networkBehavior.queue_delay_ms = 100;
- networkBehavior.queue_length_packets = 30;
- networkBehavior.loss_percent = 50;
-
-diff --git a/rtc_base/openssl_stream_adapter.cc b/rtc_base/openssl_stream_adapter.cc
-index 4acbb55890..2b45d37df7 100644
---- a/rtc_base/openssl_stream_adapter.cc
-+++ b/rtc_base/openssl_stream_adapter.cc
-@@ -852,10 +852,15 @@ void OpenSSLStreamAdapter::SetTimeout(int delay_ms) {
- // We check the timer even after SSL_CONNECTED,
- // but ContinueSSL() is only needed when SSL_CONNECTING
- if (state_ == SSL_CONNECTING) {
-+ // Note: timeout is set inside ContinueSSL()
- ContinueSSL();
-+ } else if (state_ == SSL_CONNECTED) {
-+ MaybeSetTimeout();
-+ } else {
-+ RTC_DCHECK_NOTREACHED() << "state_: " << state_;
- }
- } else {
-- RTC_DCHECK_NOTREACHED();
-+ RTC_DCHECK_NOTREACHED() << "flag->alive() == false";
- }
- // This callback will never run again (stopped above).
- return TimeDelta::PlusInfinity();
-@@ -970,6 +975,12 @@ int OpenSSLStreamAdapter::ContinueSSL() {
- }
- }
-
-+ MaybeSetTimeout();
-+
-+ return 0;
-+}
-+
-+void OpenSSLStreamAdapter::MaybeSetTimeout() {
- if (ssl_ != nullptr) {
- struct timeval timeout;
- if (DTLSv1_get_timeout(ssl_, &timeout)) {
-@@ -977,8 +988,6 @@ int OpenSSLStreamAdapter::ContinueSSL() {
- SetTimeout(delay);
- }
- }
--
-- return 0;
- }
-
- void OpenSSLStreamAdapter::Error(absl::string_view context,
-diff --git a/rtc_base/openssl_stream_adapter.h b/rtc_base/openssl_stream_adapter.h
-index 856d37c156..c10e93e3d4 100644
---- a/rtc_base/openssl_stream_adapter.h
-+++ b/rtc_base/openssl_stream_adapter.h
-@@ -210,6 +210,8 @@ class OpenSSLStreamAdapter final : public SSLStreamAdapter {
- !peer_certificate_digest_value_.empty();
- }
-
-+ void MaybeSetTimeout();
-+
- const std::unique_ptr<StreamInterface> stream_;
- absl::AnyInvocable<void(SSLHandshakeError)> handshake_error_;
-