1 // Copyright 2016 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef NET_SPDY_HEADER_COALESCER_H_ 6 #define NET_SPDY_HEADER_COALESCER_H_ 7 8 #include <string_view> 9 10 #include "net/base/net_export.h" 11 #include "net/log/net_log_with_source.h" 12 #include "net/third_party/quiche/src/quiche/spdy/core/http2_header_block.h" 13 #include "net/third_party/quiche/src/quiche/spdy/core/spdy_headers_handler_interface.h" 14 15 namespace net { 16 17 class NET_EXPORT_PRIVATE HeaderCoalescer 18 : public spdy::SpdyHeadersHandlerInterface { 19 public: 20 HeaderCoalescer(uint32_t max_header_list_size, 21 const NetLogWithSource& net_log); 22 OnHeaderBlockStart()23 void OnHeaderBlockStart() override {} 24 25 void OnHeader(std::string_view key, absl::string_view value) override; 26 OnHeaderBlockEnd(size_t uncompressed_header_bytes,size_t compressed_header_bytes)27 void OnHeaderBlockEnd(size_t uncompressed_header_bytes, 28 size_t compressed_header_bytes) override {} 29 30 spdy::Http2HeaderBlock release_headers(); error_seen()31 bool error_seen() const { return error_seen_; } 32 33 private: 34 // Helper to add a header. Return true on success. 35 bool AddHeader(std::string_view key, std::string_view value); 36 37 spdy::Http2HeaderBlock headers_; 38 bool headers_valid_ = true; 39 size_t header_list_size_ = 0; 40 bool error_seen_ = false; 41 bool regular_header_seen_ = false; 42 const uint32_t max_header_list_size_; 43 NetLogWithSource net_log_; 44 }; 45 46 } // namespace net 47 48 #endif // NET_SPDY_HEADER_COALESCER_H_ 49