Extract NoOpHeadersHandler and HeaderByteListenerInterface into separate header files.
This CL extracts NoOpHeadersHandler and HeaderByteListenerInterface from
gfe/gfe2/http2/http2_headers_handler.h to //third_party/spdy, which will enable
reuse of NoOpHeadersHandler in //third_party/http2 (specifically
OgHttp2Session, to ignore header events on closed streams).
PiperOrigin-RevId: 410127287
diff --git a/spdy/core/header_byte_listener_interface.h b/spdy/core/header_byte_listener_interface.h
new file mode 100644
index 0000000..e2ae4f9
--- /dev/null
+++ b/spdy/core/header_byte_listener_interface.h
@@ -0,0 +1,22 @@
+#ifndef QUICHE_SPDY_CORE_HEADER_BYTE_LISTENER_INTERFACE_H_
+#define QUICHE_SPDY_CORE_HEADER_BYTE_LISTENER_INTERFACE_H_
+
+#include <stddef.h>
+
+#include "common/platform/api/quiche_export.h"
+
+namespace spdy {
+
+// Listens for the receipt of uncompressed header bytes.
+class QUICHE_EXPORT_PRIVATE HeaderByteListenerInterface {
+ public:
+ virtual ~HeaderByteListenerInterface() {}
+
+ // Called when a header block has been parsed, with the number of uncompressed
+ // header bytes parsed from the header block.
+ virtual void OnHeaderBytesReceived(size_t uncompressed_header_bytes) = 0;
+};
+
+} // namespace spdy
+
+#endif // QUICHE_SPDY_CORE_HEADER_BYTE_LISTENER_INTERFACE_H_
diff --git a/spdy/core/no_op_headers_handler.h b/spdy/core/no_op_headers_handler.h
new file mode 100644
index 0000000..8c99459
--- /dev/null
+++ b/spdy/core/no_op_headers_handler.h
@@ -0,0 +1,39 @@
+#ifndef QUICHE_SPDY_CORE_NO_OP_HEADERS_HANDLER_H_
+#define QUICHE_SPDY_CORE_NO_OP_HEADERS_HANDLER_H_
+
+#include "common/platform/api/quiche_export.h"
+#include "spdy/core/header_byte_listener_interface.h"
+#include "spdy/core/spdy_headers_handler_interface.h"
+
+namespace spdy {
+
+// Drops all header data, but passes information about header bytes parsed to
+// a listener.
+class QUICHE_EXPORT_PRIVATE NoOpHeadersHandler
+ : public SpdyHeadersHandlerInterface {
+ public:
+ // Does not take ownership of listener.
+ explicit NoOpHeadersHandler(HeaderByteListenerInterface* listener)
+ : listener_(listener) {}
+ NoOpHeadersHandler(const NoOpHeadersHandler&) = delete;
+ NoOpHeadersHandler& operator=(const NoOpHeadersHandler&) = delete;
+ ~NoOpHeadersHandler() override {}
+
+ // From SpdyHeadersHandlerInterface
+ void OnHeaderBlockStart() override {}
+ void OnHeader(absl::string_view /*key*/,
+ absl::string_view /*value*/) override {}
+ void OnHeaderBlockEnd(size_t uncompressed_header_bytes,
+ size_t /* compressed_header_bytes */) override {
+ if (listener_ != nullptr) {
+ listener_->OnHeaderBytesReceived(uncompressed_header_bytes);
+ }
+ }
+
+ private:
+ HeaderByteListenerInterface* listener_;
+};
+
+} // namespace spdy
+
+#endif // QUICHE_SPDY_CORE_NO_OP_HEADERS_HANDLER_H_