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_