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