Add a QUIC protocol flag to enable/disable Chaos protection. Such that we can enable tests disabled in crbug/1347664.
PiperOrigin-RevId: 500233723
diff --git a/quiche/quic/core/quic_packet_creator.cc b/quiche/quic/core/quic_packet_creator.cc
index cfcd3e2..566944c 100644
--- a/quiche/quic/core/quic_packet_creator.cc
+++ b/quiche/quic/core/quic_packet_creator.cc
@@ -780,7 +780,8 @@
absl::optional<size_t>
QuicPacketCreator::MaybeBuildDataPacketWithChaosProtection(
const QuicPacketHeader& header, char* buffer) {
- if (framer_->perspective() != Perspective::IS_CLIENT ||
+ if (!GetQuicFlag(quic_enable_chaos_protection) ||
+ framer_->perspective() != Perspective::IS_CLIENT ||
packet_.encryption_level != ENCRYPTION_INITIAL ||
!framer_->version().UsesCryptoFrames() || queued_frames_.size() != 2u ||
queued_frames_[0].type != CRYPTO_FRAME ||
diff --git a/quiche/quic/core/quic_packet_creator_test.cc b/quiche/quic/core/quic_packet_creator_test.cc
index 6dcd4a5..63a2dc1 100644
--- a/quiche/quic/core/quic_packet_creator_test.cc
+++ b/quiche/quic/core/quic_packet_creator_test.cc
@@ -255,6 +255,8 @@
n * 2;
}
+ void TestChaosProtection(bool enabled);
+
static constexpr QuicStreamOffset kOffset = 0u;
char buffer_[kMaxOutgoingPacketSize];
@@ -1345,7 +1347,7 @@
EXPECT_EQ(GetParam().version_serialization, header.version_flag);
}
-TEST_P(QuicPacketCreatorTest, ChaosProtection) {
+void QuicPacketCreatorTest::TestChaosProtection(bool enabled) {
if (!GetParam().version.UsesCryptoFrames()) {
return;
}
@@ -1362,13 +1364,28 @@
EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_, _));
EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
- EXPECT_CALL(framer_visitor_, OnCryptoFrame(_)).Times(AtLeast(2));
- EXPECT_CALL(framer_visitor_, OnPaddingFrame(_)).Times(AtLeast(2));
- EXPECT_CALL(framer_visitor_, OnPingFrame(_)).Times(AtLeast(1));
+ if (enabled) {
+ EXPECT_CALL(framer_visitor_, OnCryptoFrame(_)).Times(AtLeast(2));
+ EXPECT_CALL(framer_visitor_, OnPaddingFrame(_)).Times(AtLeast(2));
+ EXPECT_CALL(framer_visitor_, OnPingFrame(_)).Times(AtLeast(1));
+ } else {
+ EXPECT_CALL(framer_visitor_, OnCryptoFrame(_)).Times(1);
+ EXPECT_CALL(framer_visitor_, OnPaddingFrame(_)).Times(1);
+ EXPECT_CALL(framer_visitor_, OnPingFrame(_)).Times(0);
+ }
EXPECT_CALL(framer_visitor_, OnPacketComplete());
ProcessPacket(serialized);
}
+TEST_P(QuicPacketCreatorTest, ChaosProtectionEnabled) {
+ TestChaosProtection(true);
+}
+
+TEST_P(QuicPacketCreatorTest, ChaosProtectionDisabled) {
+ SetQuicFlag(quic_enable_chaos_protection, false);
+ TestChaosProtection(false);
+}
+
TEST_P(QuicPacketCreatorTest, ConsumeDataLargerThanOneStreamFrame) {
if (!GetParam().version_serialization) {
creator_.StopSendingVersion();
diff --git a/quiche/quic/core/quic_protocol_flags_list.h b/quiche/quic/core/quic_protocol_flags_list.h
index 1c92890..7644cbf 100644
--- a/quiche/quic/core/quic_protocol_flags_list.h
+++ b/quiche/quic/core/quic_protocol_flags_list.h
@@ -222,4 +222,8 @@
QUIC_PROTOCOL_FLAG(bool, quic_interval_set_enable_add_optimization, true,
"If true, enable an optimization in QuicIntervalSet")
+QUIC_PROTOCOL_FLAG(
+ bool, quic_enable_chaos_protection, true,
+ "If true, use chaos protection to randomize client initials.")
+
#endif