Fix TlsChloExtractor move assignment operator

The default move assignement operator does not
update the delegates on various members, which
means that callbacks will be sent to the wrong
instance. This CL fixes that and adds a
regression test.

gfe-relnote: n/a, unused code
PiperOrigin-RevId: 308172454
Change-Id: Ie2784af64071b21995207b9ce2341443b4181d26
diff --git a/quic/core/tls_chlo_extractor.h b/quic/core/tls_chlo_extractor.h
index af47144..1762566 100644
--- a/quic/core/tls_chlo_extractor.h
+++ b/quic/core/tls_chlo_extractor.h
@@ -28,9 +28,9 @@
  public:
   TlsChloExtractor();
   TlsChloExtractor(const TlsChloExtractor&) = delete;
-  TlsChloExtractor(TlsChloExtractor&&) = default;
+  TlsChloExtractor(TlsChloExtractor&&);
   TlsChloExtractor& operator=(const TlsChloExtractor&) = delete;
-  TlsChloExtractor& operator=(TlsChloExtractor&&) = default;
+  TlsChloExtractor& operator=(TlsChloExtractor&&);
 
   enum class State : uint8_t {
     kInitial = 0,
@@ -229,6 +229,10 @@
   std::string server_name_;
 };
 
+// Convenience method to facilitate logging TlsChloExtractor::State.
+QUIC_NO_EXPORT std::ostream& operator<<(std::ostream& os,
+                                        const TlsChloExtractor::State& state);
+
 }  // namespace quic
 
 #endif  // QUICHE_QUIC_CORE_TLS_CHLO_EXTRACTOR_H_