| Index: net/spdy/hpack/hpack_decoder3.cc
|
| diff --git a/net/spdy/hpack/hpack_decoder3.cc b/net/spdy/hpack/hpack_decoder3.cc
|
| deleted file mode 100644
|
| index 71875b919dfa34af3895ab74e7d277417176a87d..0000000000000000000000000000000000000000
|
| --- a/net/spdy/hpack/hpack_decoder3.cc
|
| +++ /dev/null
|
| @@ -1,198 +0,0 @@
|
| -// Copyright 2017 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "net/spdy/hpack/hpack_decoder3.h"
|
| -
|
| -#include "base/logging.h"
|
| -#include "net/http2/decoder/decode_buffer.h"
|
| -#include "net/http2/decoder/decode_status.h"
|
| -#include "net/spdy/platform/api/spdy_estimate_memory_usage.h"
|
| -#include "net/spdy/spdy_flags.h"
|
| -
|
| -namespace net {
|
| -namespace {
|
| -const size_t kMaxDecodeBufferSizeBytes = 32 * 1024; // 32 KB
|
| -} // namespace
|
| -
|
| -HpackDecoder3::HpackDecoder3()
|
| - : hpack_decoder_(&listener_adapter_, kMaxDecodeBufferSizeBytes),
|
| - max_decode_buffer_size_bytes_(kMaxDecodeBufferSizeBytes),
|
| - header_block_started_(false) {}
|
| -
|
| -HpackDecoder3::~HpackDecoder3() {}
|
| -
|
| -void HpackDecoder3::ApplyHeaderTableSizeSetting(size_t size_setting) {
|
| - DVLOG(2) << "HpackDecoder3::ApplyHeaderTableSizeSetting";
|
| - hpack_decoder_.ApplyHeaderTableSizeSetting(size_setting);
|
| -}
|
| -
|
| -void HpackDecoder3::HandleControlFrameHeadersStart(
|
| - SpdyHeadersHandlerInterface* handler) {
|
| - DVLOG(2) << "HpackDecoder3::HandleControlFrameHeadersStart";
|
| - DCHECK(!header_block_started_);
|
| - listener_adapter_.set_handler(handler);
|
| -}
|
| -
|
| -bool HpackDecoder3::HandleControlFrameHeadersData(const char* headers_data,
|
| - size_t headers_data_length) {
|
| - DVLOG(2) << "HpackDecoder3::HandleControlFrameHeadersData: len="
|
| - << headers_data_length;
|
| - if (!header_block_started_) {
|
| - // Initialize the decoding process here rather than in
|
| - // HandleControlFrameHeadersStart because that method is not always called.
|
| - header_block_started_ = true;
|
| - if (!hpack_decoder_.StartDecodingBlock()) {
|
| - header_block_started_ = false;
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - // Sometimes we get a call with headers_data==nullptr and
|
| - // headers_data_length==0, in which case we need to avoid creating
|
| - // a DecodeBuffer, which would otherwise complain.
|
| - if (headers_data_length > 0) {
|
| - DCHECK_NE(headers_data, nullptr);
|
| - if (headers_data_length > max_decode_buffer_size_bytes_) {
|
| - DVLOG(1) << "max_decode_buffer_size_bytes_ < headers_data_length: "
|
| - << max_decode_buffer_size_bytes_ << " < " << headers_data_length;
|
| - return false;
|
| - }
|
| - listener_adapter_.AddToTotalHpackBytes(headers_data_length);
|
| - DecodeBuffer db(headers_data, headers_data_length);
|
| - bool ok = hpack_decoder_.DecodeFragment(&db);
|
| - DCHECK(!ok || db.Empty()) << "Remaining=" << db.Remaining();
|
| - return ok;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -// TODO(jamessynge): Determine if compressed_len is needed; it is used to
|
| -// produce UUMA stat Net.SpdyHpackDecompressionPercentage, but only for
|
| -// SPDY3, not HTTP2.
|
| -bool HpackDecoder3::HandleControlFrameHeadersComplete(size_t* compressed_len) {
|
| - DVLOG(2) << "HpackDecoder3::HandleControlFrameHeadersComplete";
|
| - if (compressed_len != nullptr) {
|
| - *compressed_len = listener_adapter_.total_hpack_bytes();
|
| - }
|
| - if (!hpack_decoder_.EndDecodingBlock()) {
|
| - DVLOG(3) << "EndDecodingBlock returned false";
|
| - return false;
|
| - }
|
| - header_block_started_ = false;
|
| - return true;
|
| -}
|
| -
|
| -const SpdyHeaderBlock& HpackDecoder3::decoded_block() const {
|
| - return listener_adapter_.decoded_block();
|
| -}
|
| -
|
| -void HpackDecoder3::SetHeaderTableDebugVisitor(
|
| - std::unique_ptr<HpackHeaderTable::DebugVisitorInterface> visitor) {
|
| - DVLOG(2) << "HpackDecoder3::SetHeaderTableDebugVisitor";
|
| - if (visitor != nullptr) {
|
| - listener_adapter_.SetHeaderTableDebugVisitor(std::move(visitor));
|
| - hpack_decoder_.set_tables_debug_listener(&listener_adapter_);
|
| - } else {
|
| - hpack_decoder_.set_tables_debug_listener(nullptr);
|
| - listener_adapter_.SetHeaderTableDebugVisitor(nullptr);
|
| - }
|
| -}
|
| -
|
| -void HpackDecoder3::set_max_decode_buffer_size_bytes(
|
| - size_t max_decode_buffer_size_bytes) {
|
| - DVLOG(2) << "HpackDecoder3::set_max_decode_buffer_size_bytes";
|
| - max_decode_buffer_size_bytes_ = max_decode_buffer_size_bytes;
|
| - hpack_decoder_.set_max_string_size_bytes(max_decode_buffer_size_bytes);
|
| -}
|
| -
|
| -size_t HpackDecoder3::EstimateMemoryUsage() const {
|
| - return SpdyEstimateMemoryUsage(hpack_decoder_);
|
| -}
|
| -
|
| -HpackDecoder3::ListenerAdapter::ListenerAdapter() : handler_(nullptr) {}
|
| -HpackDecoder3::ListenerAdapter::~ListenerAdapter() {}
|
| -
|
| -void HpackDecoder3::ListenerAdapter::set_handler(
|
| - SpdyHeadersHandlerInterface* handler) {
|
| - handler_ = handler;
|
| -}
|
| -
|
| -void HpackDecoder3::ListenerAdapter::SetHeaderTableDebugVisitor(
|
| - std::unique_ptr<HpackHeaderTable::DebugVisitorInterface> visitor) {
|
| - visitor_ = std::move(visitor);
|
| -}
|
| -
|
| -void HpackDecoder3::ListenerAdapter::OnHeaderListStart() {
|
| - DVLOG(2) << "HpackDecoder3::ListenerAdapter::OnHeaderListStart";
|
| - total_hpack_bytes_ = 0;
|
| - total_uncompressed_bytes_ = 0;
|
| - decoded_block_.clear();
|
| - if (handler_ != nullptr) {
|
| - handler_->OnHeaderBlockStart();
|
| - }
|
| -}
|
| -
|
| -void HpackDecoder3::ListenerAdapter::OnHeader(HpackEntryType entry_type,
|
| - const HpackString& name,
|
| - const HpackString& value) {
|
| - DVLOG(2) << "HpackDecoder3::ListenerAdapter::OnHeader:\n name: " << name
|
| - << "\n value: " << value;
|
| - total_uncompressed_bytes_ += name.size() + value.size();
|
| - if (handler_ == nullptr) {
|
| - DVLOG(3) << "Adding to decoded_block";
|
| - decoded_block_.AppendValueOrAddHeader(name, value);
|
| - } else {
|
| - DVLOG(3) << "Passing to handler";
|
| - handler_->OnHeader(name, value);
|
| - }
|
| -}
|
| -
|
| -void HpackDecoder3::ListenerAdapter::OnHeaderListEnd() {
|
| - DVLOG(2) << "HpackDecoder3::ListenerAdapter::OnHeaderListEnd";
|
| - // We don't clear the SpdyHeaderBlock here to allow access to it until the
|
| - // next HPACK block is decoded.
|
| - if (handler_ != nullptr) {
|
| - if (FLAGS_chromium_http2_flag_log_compressed_size) {
|
| - handler_->OnHeaderBlockEnd(total_uncompressed_bytes_, total_hpack_bytes_);
|
| - } else {
|
| - handler_->OnHeaderBlockEnd(total_uncompressed_bytes_);
|
| - }
|
| - handler_ = nullptr;
|
| - }
|
| -}
|
| -
|
| -void HpackDecoder3::ListenerAdapter::OnHeaderErrorDetected(
|
| - SpdyStringPiece error_message) {
|
| - VLOG(1) << error_message;
|
| -}
|
| -
|
| -int64_t HpackDecoder3::ListenerAdapter::OnEntryInserted(
|
| - const HpackStringPair& sp,
|
| - size_t insert_count) {
|
| - DVLOG(2) << "HpackDecoder3::ListenerAdapter::OnEntryInserted: " << sp
|
| - << ", insert_count=" << insert_count;
|
| - if (visitor_ == nullptr) {
|
| - return 0;
|
| - }
|
| - HpackEntry entry(sp.name, sp.value, /*is_static*/ false, insert_count);
|
| - int64_t time_added = visitor_->OnNewEntry(entry);
|
| - DVLOG(2) << "HpackDecoder3::ListenerAdapter::OnEntryInserted: time_added="
|
| - << time_added;
|
| - return time_added;
|
| -}
|
| -
|
| -void HpackDecoder3::ListenerAdapter::OnUseEntry(const HpackStringPair& sp,
|
| - size_t insert_count,
|
| - int64_t time_added) {
|
| - DVLOG(2) << "HpackDecoder3::ListenerAdapter::OnUseEntry: " << sp
|
| - << ", insert_count=" << insert_count
|
| - << ", time_added=" << time_added;
|
| - if (visitor_ != nullptr) {
|
| - HpackEntry entry(sp.name, sp.value, /*is_static*/ false, insert_count);
|
| - entry.set_time_added(time_added);
|
| - visitor_->OnUseEntry(entry);
|
| - }
|
| -}
|
| -
|
| -} // namespace net
|
|
|