Deprecate --gfe2_reloadable_flag_quic_tls_fix_ticket_decrypt.

PiperOrigin-RevId: 393803452
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index a1d0b6d..f6d61eb 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -71,8 +71,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_drop_unsent_path_response, true)
 // If true, enable server retransmittable on wire PING.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_server_on_wire_ping, true)
-// If true, fix a bug in TlsServerHandshaker where the ticket decrypt callback is cleared without being cancelled first.
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_tls_fix_ticket_decrypt, true)
 // If true, flush any pending frame before default path is about to be updated.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_flush_pending_frame_before_updating_default_path, true)
 // If true, ignore peer_max_ack_delay during handshake.
diff --git a/quic/core/tls_server_handshaker.cc b/quic/core/tls_server_handshaker.cc
index 4605eaa..8112b41 100644
--- a/quic/core/tls_server_handshaker.cc
+++ b/quic/core/tls_server_handshaker.cc
@@ -138,49 +138,27 @@
     // The callback was cancelled before we could run.
     return;
   }
-  if (handshaker_->fix_ticket_decrypt_) {
-    TlsServerHandshaker* handshaker = handshaker_;
-    handshaker_ = nullptr;
 
-    handshaker->decrypted_session_ticket_ = std::move(plaintext);
-    // DecryptCallback::Run could be called synchronously. When that happens, we
-    // are currently in the middle of a call to AdvanceHandshake.
-    // (AdvanceHandshake called SSL_do_handshake, which through some layers
-    // called SessionTicketOpen, which called TicketCrypter::Decrypt, which
-    // synchronously called this function.) In that case, the handshake will
-    // continue to be processed when this function returns.
-    //
-    // When this callback is called asynchronously (i.e. the ticket decryption
-    // is pending), TlsServerHandshaker is not actively processing handshake
-    // messages. We need to have it resume processing handshake messages by
-    // calling AdvanceHandshake.
-    if (handshaker->expected_ssl_error() == SSL_ERROR_PENDING_TICKET) {
-      handshaker->AdvanceHandshakeFromCallback();
-    }
+  TlsServerHandshaker* handshaker = handshaker_;
+  handshaker_ = nullptr;
 
-    handshaker->ticket_decryption_callback_ = nullptr;
-    return;
-  }
-  handshaker_->decrypted_session_ticket_ = std::move(plaintext);
+  handshaker->decrypted_session_ticket_ = std::move(plaintext);
   // DecryptCallback::Run could be called synchronously. When that happens, we
   // are currently in the middle of a call to AdvanceHandshake.
-  // (AdvanceHandshake called SSL_do_handshake, which through some layers called
-  // SessionTicketOpen, which called TicketCrypter::Decrypt, which synchronously
-  // called this function.) In that case, the handshake will continue to be
-  // processed when this function returns.
+  // (AdvanceHandshake called SSL_do_handshake, which through some layers
+  // called SessionTicketOpen, which called TicketCrypter::Decrypt, which
+  // synchronously called this function.) In that case, the handshake will
+  // continue to be processed when this function returns.
   //
-  // When this callback is called asynchronously (i.e. the ticket decryption is
-  // pending), TlsServerHandshaker is not actively processing handshake
+  // When this callback is called asynchronously (i.e. the ticket decryption
+  // is pending), TlsServerHandshaker is not actively processing handshake
   // messages. We need to have it resume processing handshake messages by
   // calling AdvanceHandshake.
-  if (handshaker_->expected_ssl_error() == SSL_ERROR_PENDING_TICKET) {
-    handshaker_->AdvanceHandshakeFromCallback();
+  if (handshaker->expected_ssl_error() == SSL_ERROR_PENDING_TICKET) {
+    handshaker->AdvanceHandshakeFromCallback();
   }
-  // The TicketDecrypter took ownership of this callback when Decrypt was
-  // called. Once the callback returns, it will be deleted. Remove the
-  // (non-owning) pointer to the callback from the handshaker so the handshaker
-  // doesn't have an invalid pointer hanging around.
-  handshaker_->ticket_decryption_callback_ = nullptr;
+
+  handshaker->ticket_decryption_callback_ = nullptr;
 }
 
 void TlsServerHandshaker::DecryptCallback::Cancel() {
@@ -770,20 +748,14 @@
       }
       async_op_timer_ = QuicTimeAccumulator();
       async_op_timer_->Start(now());
-
-      if (!fix_ticket_decrypt_) {
-        return ssl_ticket_aead_retry;
-      }
     }
   }
 
-  if (fix_ticket_decrypt_) {
-    // If the async ticket decryption is pending, either started by this
-    // SessionTicketOpen call or one that happened earlier, return
-    // ssl_ticket_aead_retry.
-    if (ticket_decryption_callback_ && !ticket_decryption_callback_->IsDone()) {
-      return ssl_ticket_aead_retry;
-    }
+  // If the async ticket decryption is pending, either started by this
+  // SessionTicketOpen call or one that happened earlier, return
+  // ssl_ticket_aead_retry.
+  if (ticket_decryption_callback_ && !ticket_decryption_callback_->IsDone()) {
+    return ssl_ticket_aead_retry;
   }
 
   ssl_ticket_aead_result_t result =
diff --git a/quic/core/tls_server_handshaker.h b/quic/core/tls_server_handshaker.h
index 7ed1a8c..0f7289e 100644
--- a/quic/core/tls_server_handshaker.h
+++ b/quic/core/tls_server_handshaker.h
@@ -353,8 +353,6 @@
   HandshakeState state_ = HANDSHAKE_START;
   bool encryption_established_ = false;
   bool valid_alpn_received_ = false;
-  const bool fix_ticket_decrypt_ =
-      GetQuicReloadableFlag(quic_tls_fix_ticket_decrypt);
   QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters>
       crypto_negotiated_params_;
   TlsServerConnection tls_connection_;
diff --git a/quic/core/tls_server_handshaker_test.cc b/quic/core/tls_server_handshaker_test.cc
index b6ab9de..bf68c85 100644
--- a/quic/core/tls_server_handshaker_test.cc
+++ b/quic/core/tls_server_handshaker_test.cc
@@ -741,9 +741,7 @@
   // This will delete |server_handshaker_|.
   server_session_ = nullptr;
 
-  if (GetQuicReloadableFlag(quic_tls_fix_ticket_decrypt)) {
-    ticket_crypter_->RunPendingCallback(0);  // Should not crash.
-  }
+  ticket_crypter_->RunPendingCallback(0);  // Should not crash.
 }
 
 TEST_P(TlsServerHandshakerTest, ResumptionWithFailingDecryptCallback) {