Internal change
PiperOrigin-RevId: 480965510
diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc
index c37c86d..0e71a7f 100644
--- a/quiche/quic/core/quic_connection.cc
+++ b/quiche/quic/core/quic_connection.cc
@@ -2497,18 +2497,16 @@
QuicUtils::IsCryptoStreamId(transport_version(), id)) {
MaybeActivateLegacyVersionEncapsulation();
}
- if (version().CanSendCoalescedPackets() && !IsHandshakeConfirmed()) {
+ if (perspective_ == Perspective::IS_SERVER &&
+ version().CanSendCoalescedPackets() && !IsHandshakeConfirmed()) {
if (in_on_retransmission_time_out_ &&
coalesced_packet_.NumberOfPackets() == 0u) {
// PTO fires while handshake is not confirmed. Do not preempt handshake
// data with stream data.
QUIC_CODE_COUNT(quic_try_to_send_half_rtt_data_when_pto_fires);
- QUIC_DVLOG(1) << ENDPOINT
- << "Not PTOing stream data before handshake gets confirmed";
return QuicConsumedData(0, false);
}
- if (perspective_ == Perspective::IS_SERVER &&
- coalesced_packet_.ContainsPacketOfEncryptionLevel(ENCRYPTION_INITIAL) &&
+ if (coalesced_packet_.ContainsPacketOfEncryptionLevel(ENCRYPTION_INITIAL) &&
coalesced_packet_.NumberOfPackets() == 1u) {
// Handshake is not confirmed yet, if there is only an initial packet in
// the coalescer, try to bundle an ENCRYPTION_HANDSHAKE packet before
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc
index 6ffef91..608d306 100644
--- a/quiche/quic/core/quic_connection_test.cc
+++ b/quiche/quic/core/quic_connection_test.cc
@@ -9865,9 +9865,6 @@
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
connection_.SetFromConfig(config);
EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet());
- EXPECT_CALL(visitor_, GetHandshakeState())
- .WillRepeatedly(Return(HANDSHAKE_CONFIRMED));
- connection_.OnHandshakeComplete();
QuicStreamId stream_id = 2;
QuicPacketNumber last_packet;
@@ -14673,80 +14670,6 @@
EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
}
-TEST_P(QuicConnectionTest, ClientPtoSendZeroRttStreamData) {
- if (!connection_.SupportsMultiplePacketNumberSpaces()) {
- return;
- }
- use_tagging_decrypter();
- connection_.SetEncrypter(ENCRYPTION_INITIAL,
- std::make_unique<TaggingEncrypter>(0x01));
- connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
- // Send CHLO.
- connection_.SendCryptoStreamData();
- ASSERT_TRUE(connection_.GetRetransmissionAlarm()->IsSet());
- // Install 0-RTT keys.
- connection_.SetEncrypter(ENCRYPTION_ZERO_RTT,
- std::make_unique<TaggingEncrypter>(0x02));
- connection_.SetDefaultEncryptionLevel(ENCRYPTION_ZERO_RTT);
- // Send 0-RTT stream data with congestion control blocked.
- EXPECT_CALL(*send_algorithm_, CanSend(_)).WillRepeatedly(Return(false));
- connection_.SendStreamDataWithString(2, std::string(1500, 'a'), 0, NO_FIN);
-
- ASSERT_TRUE(connection_.GetRetransmissionAlarm()->IsSet());
- connection_.GetRetransmissionAlarm()->Fire();
- // Verify INITIAL packet get retransmitted.
- EXPECT_EQ(0x01010101u, writer_->final_bytes_of_last_packet());
-}
-
-TEST_P(QuicConnectionTest, ClientPtoSendForwardSecureStreamData) {
- if (!connection_.SupportsMultiplePacketNumberSpaces()) {
- return;
- }
- if (QuicVersionUsesCryptoFrames(connection_.transport_version())) {
- EXPECT_CALL(visitor_, OnCryptoFrame(_)).Times(AnyNumber());
- }
- EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
- use_tagging_decrypter();
- connection_.SetEncrypter(ENCRYPTION_INITIAL,
- std::make_unique<TaggingEncrypter>(0x01));
- connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
- // Send CHLO.
- connection_.SendCryptoDataWithString("foo", 0, ENCRYPTION_INITIAL);
- // Receive server INITIAL + HANDSHAKE
- QuicFrames frames1;
- frames1.push_back(QuicFrame(&crypto_frame_));
- QuicAckFrame ack_frame1 = InitAckFrame(1);
- frames1.push_back(QuicFrame(&ack_frame1));
-
- QuicFrames frames2;
- QuicCryptoFrame crypto_frame(ENCRYPTION_HANDSHAKE, 0,
- absl::string_view(data1));
- frames2.push_back(QuicFrame(&crypto_frame));
- EXPECT_CALL(*send_algorithm_, OnCongestionEvent(_, _, _, _, _));
- ProcessCoalescedPacket(
- {{1, frames1, ENCRYPTION_INITIAL}, {2, frames2, ENCRYPTION_HANDSHAKE}});
- // Send Client finished.
- connection_.SetEncrypter(ENCRYPTION_HANDSHAKE,
- std::make_unique<TaggingEncrypter>(0x02));
- connection_.SetDefaultEncryptionLevel(ENCRYPTION_HANDSHAKE);
- EXPECT_CALL(visitor_, OnHandshakePacketSent()).Times(1);
- connection_.SendCryptoDataWithString("foo", 0, ENCRYPTION_HANDSHAKE);
-
- EXPECT_CALL(visitor_, GetHandshakeState())
- .WillRepeatedly(Return(HANDSHAKE_COMPLETE));
- connection_.SetEncrypter(ENCRYPTION_FORWARD_SECURE,
- std::make_unique<TaggingEncrypter>(0x03));
- connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
- // Send 1-RTT stream data with congestion control blocked.
- EXPECT_CALL(*send_algorithm_, CanSend(_)).WillRepeatedly(Return(false));
- connection_.SendStreamDataWithString(2, std::string(1500, 'a'), 0, NO_FIN);
-
- ASSERT_TRUE(connection_.GetRetransmissionAlarm()->IsSet());
- connection_.GetRetransmissionAlarm()->Fire();
- // Verify HANDSHAKE packet get retransmitted.
- EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
-}
-
TEST_P(QuicConnectionTest, SendingZeroRttPacketsDoesNotPostponePTO) {
if (!connection_.SupportsMultiplePacketNumberSpaces()) {
return;