diff --git a/quic/core/crypto/crypto_server_test.cc b/quic/core/crypto/crypto_server_test.cc
index 306a28b..8663832 100644
--- a/quic/core/crypto/crypto_server_test.cc
+++ b/quic/core/crypto/crypto_server_test.cc
@@ -290,15 +290,12 @@
       bool should_succeed,
       const char* error_substr) {
     QuicSocketAddress server_address(QuicIpAddress::Any4(), 5);
-    QuicConnectionId server_designated_connection_id =
-        TestConnectionId(rand_for_id_generation_.RandUint64());
     bool called;
     config_.ProcessClientHello(
         result, /*reject_only=*/false,
         /*connection_id=*/TestConnectionId(1), server_address, client_address_,
-        supported_versions_.front(), supported_versions_,
-        /*use_stateless_rejects=*/false, server_designated_connection_id,
-        &clock_, rand_, &compressed_certs_cache_, params_, signed_config_,
+        supported_versions_.front(), supported_versions_, &clock_, rand_,
+        &compressed_certs_cache_, params_, signed_config_,
         /*total_framing_overhead=*/50, chlo_packet_size_,
         QuicMakeUnique<ProcessCallback>(result, should_succeed, error_substr,
                                         &called, &out_));
diff --git a/quic/core/crypto/quic_crypto_server_config.cc b/quic/core/crypto/quic_crypto_server_config.cc
index 54d4bf4..ccf9714 100644
--- a/quic/core/crypto/quic_crypto_server_config.cc
+++ b/quic/core/crypto/quic_crypto_server_config.cc
@@ -656,8 +656,6 @@
     const QuicSocketAddress& client_address,
     ParsedQuicVersion version,
     const ParsedQuicVersionVector& supported_versions,
-    bool use_stateless_rejects,
-    QuicConnectionId server_designated_connection_id,
     const QuicClock* clock,
     QuicRandom* rand,
     QuicCompressedCertsCache* compressed_certs_cache,
@@ -669,10 +667,9 @@
   DCHECK(done_cb);
   auto context = QuicMakeUnique<ProcessClientHelloContext>(
       validate_chlo_result, reject_only, connection_id, server_address,
-      client_address, version, supported_versions, use_stateless_rejects,
-      server_designated_connection_id, clock, rand, compressed_certs_cache,
-      params, signed_config, total_framing_overhead, chlo_packet_size,
-      std::move(done_cb));
+      client_address, version, supported_versions, clock, rand,
+      compressed_certs_cache, params, signed_config, total_framing_overhead,
+      chlo_packet_size, std::move(done_cb));
 
   // Verify that various parts of the CHLO are valid
   std::string error_details;
diff --git a/quic/core/crypto/quic_crypto_server_config.h b/quic/core/crypto/quic_crypto_server_config.h
index 039da84..503b377 100644
--- a/quic/core/crypto/quic_crypto_server_config.h
+++ b/quic/core/crypto/quic_crypto_server_config.h
@@ -338,10 +338,6 @@
       const QuicSocketAddress& client_address,
       ParsedQuicVersion version,
       const ParsedQuicVersionVector& supported_versions,
-      // TODO(wub): Deprecate use_stateless_rejects and
-      // server_designated_connection_id.
-      bool use_stateless_rejects,
-      QuicConnectionId server_designated_connection_id,
       const QuicClock* clock,
       QuicRandom* rand,
       QuicCompressedCertsCache* compressed_certs_cache,
@@ -568,8 +564,6 @@
         const QuicSocketAddress& client_address,
         ParsedQuicVersion version,
         const ParsedQuicVersionVector& supported_versions,
-        bool use_stateless_rejects,
-        QuicConnectionId server_designated_connection_id,
         const QuicClock* clock,
         QuicRandom* rand,
         QuicCompressedCertsCache* compressed_certs_cache,
@@ -585,8 +579,6 @@
           client_address_(client_address),
           version_(version),
           supported_versions_(supported_versions),
-          use_stateless_rejects_(use_stateless_rejects),
-          server_designated_connection_id_(server_designated_connection_id),
           clock_(clock),
           rand_(rand),
           compressed_certs_cache_(compressed_certs_cache),
@@ -619,10 +611,6 @@
     ParsedQuicVersionVector supported_versions() const {
       return supported_versions_;
     }
-    bool use_stateless_rejects() const { return use_stateless_rejects_; }
-    QuicConnectionId server_designated_connection_id() const {
-      return server_designated_connection_id_;
-    }
     const QuicClock* clock() const { return clock_; }
     QuicRandom* rand() const { return rand_; }  // NOLINT
     QuicCompressedCertsCache* compressed_certs_cache() const {
@@ -657,8 +645,6 @@
     const QuicSocketAddress client_address_;
     const ParsedQuicVersion version_;
     const ParsedQuicVersionVector supported_versions_;
-    const bool use_stateless_rejects_;
-    const QuicConnectionId server_designated_connection_id_;
     const QuicClock* const clock_;
     QuicRandom* const rand_;
     QuicCompressedCertsCache* const compressed_certs_cache_;
diff --git a/quic/core/quic_crypto_server_handshaker.cc b/quic/core/quic_crypto_server_handshaker.cc
index f345a14..5ccc109 100644
--- a/quic/core/quic_crypto_server_handshaker.cc
+++ b/quic/core/quic_crypto_server_handshaker.cc
@@ -405,13 +405,10 @@
   previous_source_address_tokens_ = result->info.source_address_tokens;
 
   QuicConnection* connection = session()->connection();
-  const QuicConnectionId server_designated_connection_id =
-      GenerateConnectionIdForReject(/*use_stateless_rejects=*/false);
   crypto_config_->ProcessClientHello(
       result, /*reject_only=*/false, connection->connection_id(),
       connection->self_address(), GetClientAddress(), connection->version(),
-      session()->supported_versions(), /*use_stateless_rejects=*/false,
-      server_designated_connection_id, connection->clock(),
+      session()->supported_versions(), connection->clock(),
       connection->random_generator(), compressed_certs_cache_,
       crypto_negotiated_params_, signed_config_,
       QuicCryptoStream::CryptoMessageFramingOverhead(
@@ -439,15 +436,6 @@
   }
 }
 
-QuicConnectionId QuicCryptoServerHandshaker::GenerateConnectionIdForReject(
-    bool use_stateless_rejects) {
-  if (!use_stateless_rejects) {
-    return EmptyQuicConnectionId();
-  }
-  return helper_->GenerateConnectionIdForReject(
-      transport_version(), session()->connection()->connection_id());
-}
-
 const QuicSocketAddress QuicCryptoServerHandshaker::GetClientAddress() {
   return session()->connection()->peer_address();
 }
diff --git a/quic/core/quic_crypto_server_handshaker.h b/quic/core/quic_crypto_server_handshaker.h
index 9920712..c7b5a69 100644
--- a/quic/core/quic_crypto_server_handshaker.h
+++ b/quic/core/quic_crypto_server_handshaker.h
@@ -152,10 +152,6 @@
   void FinishSendServerConfigUpdate(bool ok,
                                     const CryptoHandshakeMessage& message);
 
-  // Returns a new ConnectionId to be used for statelessly rejected connections
-  // if |use_stateless_rejects| is true. Returns 0 otherwise.
-  QuicConnectionId GenerateConnectionIdForReject(bool use_stateless_rejects);
-
   // Returns the QuicTransportVersion of the connection.
   QuicTransportVersion transport_version() const {
     return session_->connection()->transport_version();
diff --git a/quic/core/quic_crypto_server_stream.h b/quic/core/quic_crypto_server_stream.h
index 71ce297..c5e0abc 100644
--- a/quic/core/quic_crypto_server_stream.h
+++ b/quic/core/quic_crypto_server_stream.h
@@ -126,7 +126,7 @@
     virtual ~Helper() {}
 
     // Given the current connection_id, generates a new ConnectionId to
-    // be returned with a stateless reject.
+    // be returned with a reject.
     virtual QuicConnectionId GenerateConnectionIdForReject(
         QuicTransportVersion version,
         QuicConnectionId connection_id) const = 0;
