Commit 023dd772 authored by Fan Yang's avatar Fan Yang Committed by Commit Bot

Roll src/net/third_party/quiche/src/ 0be7fce4c..84639a15f (11 commits)

https://quiche.googlesource.com/quiche.git/+log/0be7fce4c6e4..84639a15fe70

$ git log 0be7fce4c..84639a15f --date=short --no-merges --format='%ad %ae %s'
2020-03-23 bnc Add QuicSpdySession::EnableServerPush().  Re-enable QuicSimpleServerSessionServerPushTests.
2020-03-21 fayang gfe-relnote: In QUIC, add a helper function to get N consecutive retransmission timeout delay. Only affecting client, no functional change expected, not protected.
2020-03-20 bnc gfe-relnote: Add and call Http3DebugVisitor methods.  Not protected.
2020-03-20 danzh gfe-relnote: n/a(test only) Nice mock send algorithm to reduce GMOCK WARNING.
2020-03-20 wub Enable //gfe/gfe2/quic:quic_backend_connection_test in gfe_cb_feature_flags.
2020-03-20 wub Internal QUICHE change
2020-03-20 fayang gfe-relnote: In QUIC, send H3 SETTINGs once 1-RTT write key is available (instead of both keys are available). Protected by gfe2_restart_flag_quic_send_settings_on_write_key_available.
2020-03-20 renjietang Simplify QuicUtils::GetMaxStreamCount() because it's never used in gQUIC.
2020-03-19 fayang gfe-relnote: Stop using SetDefaultEncryptionLevel in TLS handshake. Instead, use OnOneRttKeysAvailable. Refactor only, no functional change expected, not protected.
2020-03-19 renjietang Update QuicFramer methods' names to match IETF draft specs. Also removed unused peer methods.
2020-03-19 quiche-dev Change QuartcPeerTest to use a MockSendAlgorithm.

Created with:
  roll-dep src/net/third_party/quiche/src src/third_party/quic_trace/src

Change-Id: I69d2d1301aeb2dd1c4c34bec5f758aa1a735d2c7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2115781
Commit-Queue: Fan Yang <fayang@chromium.org>
Reviewed-by: default avatarNick Harper <nharper@chromium.org>
Cr-Commit-Position: refs/heads/master@{#752640}
parent 4c034b71
...@@ -306,7 +306,7 @@ vars = { ...@@ -306,7 +306,7 @@ vars = {
# Three lines of non-changing comments so that # Three lines of non-changing comments so that
# the commit queue can handle CLs rolling feed # the commit queue can handle CLs rolling feed
# and whatever else without interference from each other. # and whatever else without interference from each other.
'quiche_revision': '0be7fce4c6e4911295b2985175a1752b0e9ebb0a', 'quiche_revision': '84639a15fe700eedd3b158837c7e7e42338833f2',
# Three lines of non-changing comments so that # Three lines of non-changing comments so that
# the commit queue can handle CLs rolling ios_webkit # the commit queue can handle CLs rolling ios_webkit
# and whatever else without interference from each other. # and whatever else without interference from each other.
......
...@@ -142,7 +142,10 @@ bool MockCryptoClientStream::CryptoConnect() { ...@@ -142,7 +142,10 @@ bool MockCryptoClientStream::CryptoConnect() {
ENCRYPTION_ZERO_RTT, ENCRYPTION_ZERO_RTT,
std::make_unique<NullEncrypter>(Perspective::IS_CLIENT)); std::make_unique<NullEncrypter>(Perspective::IS_CLIENT));
} }
if (session()->connection()->version().handshake_protocol ==
quic::PROTOCOL_QUIC_CRYPTO) {
session()->SetDefaultEncryptionLevel(ENCRYPTION_ZERO_RTT); session()->SetDefaultEncryptionLevel(ENCRYPTION_ZERO_RTT);
}
break; break;
} }
...@@ -183,7 +186,12 @@ bool MockCryptoClientStream::CryptoConnect() { ...@@ -183,7 +186,12 @@ bool MockCryptoClientStream::CryptoConnect() {
ENCRYPTION_FORWARD_SECURE, ENCRYPTION_FORWARD_SECURE,
std::make_unique<NullEncrypter>(Perspective::IS_CLIENT)); std::make_unique<NullEncrypter>(Perspective::IS_CLIENT));
} }
if (session()->connection()->version().handshake_protocol ==
quic::PROTOCOL_TLS1_3) {
session()->OnOneRttKeysAvailable();
} else {
session()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); session()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
}
session()->DiscardOldEncryptionKey(ENCRYPTION_INITIAL); session()->DiscardOldEncryptionKey(ENCRYPTION_INITIAL);
session()->NeuterHandshakeData(); session()->NeuterHandshakeData();
break; break;
...@@ -260,9 +268,14 @@ void MockCryptoClientStream::NotifySessionOneRttKeyAvailable() { ...@@ -260,9 +268,14 @@ void MockCryptoClientStream::NotifySessionOneRttKeyAvailable() {
ENCRYPTION_FORWARD_SECURE, ENCRYPTION_FORWARD_SECURE,
std::make_unique<NullEncrypter>(Perspective::IS_CLIENT)); std::make_unique<NullEncrypter>(Perspective::IS_CLIENT));
} }
if (session()->connection()->version().handshake_protocol ==
quic::PROTOCOL_TLS1_3) {
session()->OnOneRttKeysAvailable();
} else {
session()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); session()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
session()->DiscardOldEncryptionKey(ENCRYPTION_INITIAL); }
session()->NeuterHandshakeData(); session()->DiscardOldEncryptionKey(ENCRYPTION_INITIAL);
session()->NeuterHandshakeData();
} }
// static // static
......
...@@ -1553,6 +1553,18 @@ void QuicChromiumClientSession::SetDefaultEncryptionLevel( ...@@ -1553,6 +1553,18 @@ void QuicChromiumClientSession::SetDefaultEncryptionLevel(
quic::QuicSpdySession::SetDefaultEncryptionLevel(level); quic::QuicSpdySession::SetDefaultEncryptionLevel(level);
} }
void QuicChromiumClientSession::OnOneRttKeysAvailable() {
if (!callback_.is_null()) {
// TODO(rtenneti): Currently for all CryptoHandshakeEvent events, callback_
// could be called because there are no error events in CryptoHandshakeEvent
// enum. If error events are added to CryptoHandshakeEvent, then the
// following code needs to changed.
std::move(callback_).Run(OK);
}
OnCryptoHandshakeComplete();
quic::QuicSpdySession::OnOneRttKeysAvailable();
}
void QuicChromiumClientSession::OnCryptoHandshakeMessageSent( void QuicChromiumClientSession::OnCryptoHandshakeMessageSent(
const quic::CryptoHandshakeMessage& message) { const quic::CryptoHandshakeMessage& message) {
logger_->OnCryptoHandshakeMessageSent(message); logger_->OnCryptoHandshakeMessageSent(message);
......
...@@ -495,6 +495,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession ...@@ -495,6 +495,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
quic::QuicRstStreamErrorCode error, quic::QuicRstStreamErrorCode error,
quic::QuicStreamOffset bytes_written) override; quic::QuicStreamOffset bytes_written) override;
void SetDefaultEncryptionLevel(quic::EncryptionLevel level) override; void SetDefaultEncryptionLevel(quic::EncryptionLevel level) override;
void OnOneRttKeysAvailable() override;
void OnCryptoHandshakeMessageSent( void OnCryptoHandshakeMessageSent(
const quic::CryptoHandshakeMessage& message) override; const quic::CryptoHandshakeMessage& message) override;
void OnCryptoHandshakeMessageReceived( void OnCryptoHandshakeMessageReceived(
......
...@@ -386,3 +386,9 @@ QUIC_FLAG( ...@@ -386,3 +386,9 @@ QUIC_FLAG(
bool, bool,
FLAGS_quic_reloadable_flag_quic_ignore_one_write_error_after_mtu_probe, FLAGS_quic_reloadable_flag_quic_ignore_one_write_error_after_mtu_probe,
false) false)
// If true, send H3 SETTINGs when 1-RTT write key is available (rather then both
// keys are available).
QUIC_FLAG(bool,
FLAGS_quic_restart_flag_quic_send_settings_on_write_key_available,
false)
...@@ -547,6 +547,23 @@ void P2PQuicTransportImpl::SetDefaultEncryptionLevel( ...@@ -547,6 +547,23 @@ void P2PQuicTransportImpl::SetDefaultEncryptionLevel(
} }
} }
void P2PQuicTransportImpl::OnOneRttKeysAvailable() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
QuicSession::OnOneRttKeysAvailable();
DCHECK(IsEncryptionEstablished());
DCHECK(OneRttKeysAvailable());
P2PQuicNegotiatedParams negotiated_params;
// The guaranteed largest message payload will not change throughout the
// connection.
uint16_t max_datagram_length =
quic::QuicSession::GetGuaranteedLargestMessagePayload();
if (max_datagram_length > 0) {
// Datagrams are supported in this case.
negotiated_params.set_max_datagram_length(max_datagram_length);
}
delegate_->OnConnected(negotiated_params);
}
void P2PQuicTransportImpl::OnCanWrite() { void P2PQuicTransportImpl::OnCanWrite() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
while (!datagram_buffer_.empty()) { while (!datagram_buffer_.empty()) {
......
...@@ -140,6 +140,7 @@ class MODULES_EXPORT P2PQuicTransportImpl final ...@@ -140,6 +140,7 @@ class MODULES_EXPORT P2PQuicTransportImpl final
P2PQuicStreamImpl* CreateOutgoingBidirectionalStream(); P2PQuicStreamImpl* CreateOutgoingBidirectionalStream();
void SetDefaultEncryptionLevel(quic::EncryptionLevel level) override; void SetDefaultEncryptionLevel(quic::EncryptionLevel level) override;
void OnOneRttKeysAvailable() override;
private: private:
// This is for testing connection failures and handshake failures. // This is for testing connection failures and handshake failures.
......
...@@ -482,7 +482,12 @@ class ConnectedCryptoClientStream final : public quic::QuicCryptoClientStream { ...@@ -482,7 +482,12 @@ class ConnectedCryptoClientStream final : public quic::QuicCryptoClientStream {
session()->config()->ProcessPeerHello(message, quic::CLIENT, session()->config()->ProcessPeerHello(message, quic::CLIENT,
&error_details); &error_details);
session()->OnConfigNegotiated(); session()->OnConfigNegotiated();
session()->SetDefaultEncryptionLevel(quic::ENCRYPTION_FORWARD_SECURE); if (session()->connection()->version().handshake_protocol ==
quic::PROTOCOL_TLS1_3) {
session()->OnOneRttKeysAvailable();
} else {
session()->SetDefaultEncryptionLevel(quic::ENCRYPTION_FORWARD_SECURE);
}
session()->DiscardOldEncryptionKey(quic::ENCRYPTION_INITIAL); session()->DiscardOldEncryptionKey(quic::ENCRYPTION_INITIAL);
session()->NeuterHandshakeData(); session()->NeuterHandshakeData();
return true; return true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment