Pass early data reject reason to debug_visitor.

This way we can add this information in net log

PiperOrigin-RevId: 331597899
Change-Id: I90455ee1bfa5ade67f36c61ccc1130db1493bf58
diff --git a/quic/core/handshaker_delegate_interface.h b/quic/core/handshaker_delegate_interface.h
index d72471f..5103509 100644
--- a/quic/core/handshaker_delegate_interface.h
+++ b/quic/core/handshaker_delegate_interface.h
@@ -58,7 +58,7 @@
 
   // Called when 0-RTT data is rejected by the server. This is only called in
   // TLS handshakes and only called on clients.
-  virtual void OnZeroRttRejected() = 0;
+  virtual void OnZeroRttRejected(int reason) = 0;
 
   // Fills in |params| with values from the delegate's QuicConfig.
   // Returns whether the operation succeeded.
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 0630d80..637edcf 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -1710,7 +1710,7 @@
   server_writer_ = new PacketDroppingTestWriter();
   StartServer();
 
-  ON_CALL(visitor, OnZeroRttRejected()).WillByDefault(Invoke([this]() {
+  ON_CALL(visitor, OnZeroRttRejected(_)).WillByDefault(Invoke([this]() {
     EXPECT_FALSE(GetClientSession()->IsEncryptionEstablished());
     // Trigger an OnCanWrite() to make sure no unencrypted data will be written.
     GetClientSession()->OnCanWrite();
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index fc6ed3d..7eb0202 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -2482,10 +2482,10 @@
   }
 }
 
-void QuicConnection::MarkZeroRttPacketsForRetransmission() {
+void QuicConnection::MarkZeroRttPacketsForRetransmission(int reject_reason) {
   sent_packet_manager_.MarkZeroRttPacketsForRetransmission();
   if (debug_visitor_ != nullptr && version().UsesTls()) {
-    debug_visitor_->OnZeroRttRejected();
+    debug_visitor_->OnZeroRttRejected(reject_reason);
   }
 }
 
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index 77b32dc..4e2c507 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -364,7 +364,7 @@
       const TransportParameters& /*transport_parameters*/) {}
 
   // Called for QUIC+TLS versions when 0-RTT is rejected.
-  virtual void OnZeroRttRejected() {}
+  virtual void OnZeroRttRejected(int /*reject_reason*/) {}
 };
 
 class QUIC_EXPORT_PRIVATE QuicConnectionHelperInterface {
@@ -719,8 +719,8 @@
 
   // Mark all sent 0-RTT encrypted packets for retransmission. Called when new
   // 0-RTT or 1-RTT key is available in gQUIC, or when 0-RTT is rejected in IETF
-  // QUIC.
-  void MarkZeroRttPacketsForRetransmission();
+  // QUIC. |reject_reason| is used in TLS-QUIC to log why 0-RTT was rejected.
+  void MarkZeroRttPacketsForRetransmission(int reject_reason);
 
   // Calls |sent_packet_manager_|'s NeuterUnencryptedPackets. Used when the
   // connection becomes forward secure and hasn't received acks for all packets.
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index ef15691..1070c77 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -4574,7 +4574,7 @@
 
   SendStreamDataToPeer(2, "bar", 0, NO_FIN, nullptr);
   EXPECT_FALSE(notifier_.HasLostStreamData());
-  connection_.MarkZeroRttPacketsForRetransmission();
+  connection_.MarkZeroRttPacketsForRetransmission(0);
   EXPECT_TRUE(notifier_.HasLostStreamData());
 }
 
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 56a7c64..ec17c19 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -1552,7 +1552,7 @@
       if (perspective() == Perspective::IS_CLIENT) {
         // Retransmit old 0-RTT data (if any) with the new 0-RTT keys, since
         // they can't be decrypted by the server.
-        connection_->MarkZeroRttPacketsForRetransmission();
+        connection_->MarkZeroRttPacketsForRetransmission(0);
         // Given any streams blocked by encryption a chance to write.
         OnCanWrite();
       }
@@ -1626,9 +1626,9 @@
   connection()->OnHandshakeComplete();
 }
 
-void QuicSession::OnZeroRttRejected() {
+void QuicSession::OnZeroRttRejected(int reason) {
   was_zero_rtt_rejected_ = true;
-  connection_->MarkZeroRttPacketsForRetransmission();
+  connection_->MarkZeroRttPacketsForRetransmission(reason);
   if (connection_->encryption_level() == ENCRYPTION_FORWARD_SECURE) {
     QUIC_BUG << "1-RTT keys already available when 0-RTT is rejected.";
     connection_->CloseConnection(
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index 6f83430..302a47a 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -262,7 +262,7 @@
   void DiscardOldEncryptionKey(EncryptionLevel level) override;
   void NeuterUnencryptedData() override;
   void NeuterHandshakeData() override;
-  void OnZeroRttRejected() override;
+  void OnZeroRttRejected(int reason) override;
   bool FillTransportParameters(TransportParameters* params) override;
   QuicErrorCode ProcessTransportParameters(const TransportParameters& params,
                                            bool is_resumption,
diff --git a/quic/core/tls_client_handshaker.cc b/quic/core/tls_client_handshaker.cc
index fa19005..d11437d 100644
--- a/quic/core/tls_client_handshaker.cc
+++ b/quic/core/tls_client_handshaker.cc
@@ -526,7 +526,7 @@
   DCHECK(session_cache_);
   // Disable encrytion to block outgoing data until 1-RTT keys are available.
   encryption_established_ = false;
-  handshaker_delegate()->OnZeroRttRejected();
+  handshaker_delegate()->OnZeroRttRejected(EarlyDataReason());
   SSL_reset_early_data_reject(ssl());
   session_cache_->ClearEarlyData(server_id_);
   AdvanceHandshake();
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h
index c37ee4c..cf9969f 100644
--- a/quic/test_tools/quic_test_utils.h
+++ b/quic/test_tools/quic_test_utils.h
@@ -1466,7 +1466,7 @@
               (const TransportParameters&),
               (override));
 
-  MOCK_METHOD(void, OnZeroRttRejected, (), (override));
+  MOCK_METHOD(void, OnZeroRttRejected, (int), (override));
 };
 
 class MockReceivedPacketManager : public QuicReceivedPacketManager {