gfe-relnote: Add a bool to QuicSentPacketManager, indicating whether a forward secure packet gets acked. No functional change expected. Not protected. PiperOrigin-RevId: 275462288 Change-Id: Id2384a6f85791b53c5d30f33a73e8237ff738265
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc index d6bf700..70ae9ea 100644 --- a/quic/core/quic_sent_packet_manager.cc +++ b/quic/core/quic_sent_packet_manager.cc
@@ -109,6 +109,7 @@ max_probe_packets_per_pto_(2), consecutive_pto_count_(0), handshake_mode_disabled_(false), + forward_secure_packet_acked_(false), detect_spurious_losses_(GetQuicReloadableFlag(quic_detect_spurious_loss)), neuter_handshake_packets_once_( GetQuicReloadableFlag(quic_neuter_handshake_packets_once)) { @@ -1370,6 +1371,9 @@ return PACKETS_ACKED_IN_WRONG_PACKET_NUMBER_SPACE; } last_ack_frame_.packets.Add(acked_packet.packet_number); + if (info->encryption_level == ENCRYPTION_FORWARD_SECURE) { + forward_secure_packet_acked_ = true; + } largest_packet_peer_knows_is_acked_.UpdateMax(info->largest_acked); if (supports_multiple_packet_number_spaces()) { largest_packets_peer_knows_is_acked_[packet_number_space].UpdateMax(
diff --git a/quic/core/quic_sent_packet_manager.h b/quic/core/quic_sent_packet_manager.h index e0adb01..eee5e01 100644 --- a/quic/core/quic_sent_packet_manager.h +++ b/quic/core/quic_sent_packet_manager.h
@@ -413,6 +413,10 @@ bool handshake_mode_disabled() const { return handshake_mode_disabled_; } + bool forward_secure_packet_acked() const { + return forward_secure_packet_acked_; + } + private: friend class test::QuicConnectionPeer; friend class test::QuicSentPacketManagerPeer; @@ -653,6 +657,10 @@ // True if HANDSHAKE mode has been disabled. bool handshake_mode_disabled_; + // True if an acknowledgment has been received for a sent + // ENCRYPTION_FORWARD_SECURE packet. + bool forward_secure_packet_acked_; + // Latched value of quic_detect_spurious_loss. const bool detect_spurious_losses_;
diff --git a/quic/core/quic_sent_packet_manager_test.cc b/quic/core/quic_sent_packet_manager_test.cc index 389f5cb..c7b3cfd 100644 --- a/quic/core/quic_sent_packet_manager_test.cc +++ b/quic/core/quic_sent_packet_manager_test.cc
@@ -3218,6 +3218,42 @@ EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); } +TEST_P(QuicSentPacketManagerTest, ForwardSecurePacketAcked) { + EXPECT_FALSE(manager_.forward_secure_packet_acked()); + SendDataPacket(1, ENCRYPTION_INITIAL); + // Ack packet 1. + ExpectAck(1); + manager_.OnAckFrameStart(QuicPacketNumber(1), QuicTime::Delta::Infinite(), + clock_.Now()); + manager_.OnAckRange(QuicPacketNumber(1), QuicPacketNumber(2)); + EXPECT_EQ(PACKETS_NEWLY_ACKED, + manager_.OnAckFrameEnd(clock_.Now(), QuicPacketNumber(1), + ENCRYPTION_INITIAL)); + EXPECT_FALSE(manager_.forward_secure_packet_acked()); + + SendDataPacket(2, ENCRYPTION_ZERO_RTT); + // Ack packet 2. + ExpectAck(2); + manager_.OnAckFrameStart(QuicPacketNumber(2), QuicTime::Delta::Infinite(), + clock_.Now()); + manager_.OnAckRange(QuicPacketNumber(2), QuicPacketNumber(3)); + EXPECT_EQ(PACKETS_NEWLY_ACKED, + manager_.OnAckFrameEnd(clock_.Now(), QuicPacketNumber(2), + ENCRYPTION_FORWARD_SECURE)); + EXPECT_FALSE(manager_.forward_secure_packet_acked()); + + SendDataPacket(3, ENCRYPTION_FORWARD_SECURE); + // Ack packet 3. + ExpectAck(3); + manager_.OnAckFrameStart(QuicPacketNumber(3), QuicTime::Delta::Infinite(), + clock_.Now()); + manager_.OnAckRange(QuicPacketNumber(3), QuicPacketNumber(4)); + EXPECT_EQ(PACKETS_NEWLY_ACKED, + manager_.OnAckFrameEnd(clock_.Now(), QuicPacketNumber(3), + ENCRYPTION_FORWARD_SECURE)); + EXPECT_TRUE(manager_.forward_secure_packet_acked()); +} + } // namespace } // namespace test } // namespace quic