Refactor GfeQuicCryptoServerStream so parent class owns handshaker

Before this change, GfeQuicCryptoServerStream owns a
GfeQuicCryptoServerHandshaker (which is a
QuicCryptoServerStream::HandshakerDelegate), as well as being a
QuicCryptoServerStream which also owns a HandshakerDelegate. This
restructures those two classes so only QuicCryptoServerStream owns the
handshaker, and GfeQuicCryptoServerStream can provide a different
handshaker.

gfe-relnote: refactor GfeQuicCryptoServerStream and QuicCryptoServerStream, no behavior change, not flag protected
PiperOrigin-RevId: 286504120
Change-Id: Ifd219b1a43e06606a96f2967ff84f07be644e8b6
diff --git a/quic/core/quic_crypto_server_stream.h b/quic/core/quic_crypto_server_stream.h
index d80c495..2e0e723 100644
--- a/quic/core/quic_crypto_server_stream.h
+++ b/quic/core/quic_crypto_server_stream.h
@@ -184,7 +184,16 @@
 
  protected:
   // Provided so that subclasses can provide their own handshaker.
-  virtual HandshakerDelegate* handshaker() const;
+  // set_handshaker can only be called if this QuicCryptoServerStream's
+  // handshaker hasn't been set yet. If set_handshaker is called outside of
+  // OnSuccessfulVersionNegotiation, then that method must be overridden to not
+  // set a handshaker.
+  void set_handshaker(std::unique_ptr<HandshakerDelegate> handshaker);
+  HandshakerDelegate* handshaker() const;
+
+  const QuicCryptoServerConfig* crypto_config() const;
+  QuicCompressedCertsCache* compressed_certs_cache() const;
+  Helper* helper() const;
 
  private:
   std::unique_ptr<HandshakerDelegate> handshaker_;