| Index: net/spdy/spdy_framer.cc
|
| diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc
|
| index b951301bcde8c6c97681a4b5804bc2625eed5b0b..7ead331721bb86582dee2065ff66d53991609119 100644
|
| --- a/net/spdy/spdy_framer.cc
|
| +++ b/net/spdy/spdy_framer.cc
|
| @@ -21,7 +21,6 @@
|
| #include "net/spdy/spdy_bug_tracker.h"
|
| #include "net/spdy/spdy_frame_builder.h"
|
| #include "net/spdy/spdy_frame_reader.h"
|
| -#include "net/spdy/spdy_headers_block_parser.h"
|
| #include "third_party/zlib/zlib.h"
|
|
|
| using base::StringPiece;
|
| @@ -171,7 +170,6 @@
|
| expect_continuation_(0),
|
| visitor_(NULL),
|
| debug_visitor_(NULL),
|
| - header_handler_(nullptr),
|
| display_protocol_("SPDY"),
|
| protocol_version_(version),
|
| enable_compression_(true),
|
| @@ -450,8 +448,6 @@
|
| return "SPDY_INVALID_CONTROL_FRAME_FLAGS";
|
| case SPDY_UNEXPECTED_FRAME:
|
| return "UNEXPECTED_FRAME";
|
| - case SPDY_INTERNAL_FRAMER_ERROR:
|
| - return "SPDY_INTERNAL_FRAMER_ERROR";
|
| }
|
| return "UNKNOWN_ERROR";
|
| }
|
| @@ -1613,21 +1609,6 @@
|
| return original_len - len;
|
| #endif
|
| }
|
| -
|
| - if (current_frame_type_ != CONTINUATION) {
|
| - header_handler_ = visitor_->OnHeaderFrameStart(current_frame_stream_id_);
|
| - if (header_handler_ == nullptr) {
|
| - SPDY_BUG << "visitor_->OnHeaderFrameStart returned nullptr";
|
| - set_error(SPDY_INTERNAL_FRAMER_ERROR);
|
| - return original_len - len;
|
| - }
|
| - if (protocol_version() == SPDY3) {
|
| - header_parser_.reset(
|
| - new SpdyHeadersBlockParser(protocol_version(), header_handler_));
|
| - } else {
|
| - GetHpackDecoder()->HandleControlFrameHeadersStart(header_handler_);
|
| - }
|
| - }
|
| CHANGE_STATE(SPDY_CONTROL_FRAME_HEADER_BLOCK);
|
| }
|
| return original_len - len;
|
| @@ -1684,19 +1665,19 @@
|
| size_t compressed_len = 0;
|
| if (GetHpackDecoder()->HandleControlFrameHeadersComplete(
|
| &compressed_len)) {
|
| - visitor_->OnHeaderFrameEnd(current_frame_stream_id_, true);
|
| - if (state_ == SPDY_ERROR) {
|
| - return data_len;
|
| - }
|
| - } else {
|
| - set_error(SPDY_DECOMPRESS_FAILURE);
|
| - processed_successfully = false;
|
| + // TODO(jgraettinger): To be removed with migration to
|
| + // SpdyHeadersHandlerInterface. Serializes the HPACK block as a SPDY3
|
| + // block, delivered via reentrant call to
|
| + // ProcessControlFrameHeaderBlock().
|
| + DeliverHpackBlockAsSpdy3Block(compressed_len);
|
| + return process_bytes;
|
| }
|
| + set_error(SPDY_DECOMPRESS_FAILURE);
|
| + processed_successfully = false;
|
| } else {
|
| - visitor_->OnHeaderFrameEnd(current_frame_stream_id_, true);
|
| - if (state_ == SPDY_ERROR) {
|
| - return data_len;
|
| - }
|
| + // The complete header block has been delivered. We send a zero-length
|
| + // OnControlFrameHeaderData() to indicate this.
|
| + visitor_->OnControlFrameHeaderData(current_frame_stream_id_, NULL, 0);
|
| }
|
| }
|
| if (processed_successfully) {
|
| @@ -3107,12 +3088,8 @@
|
| if ((rv == Z_OK) || input_exhausted) {
|
| size_t decompressed_len = arraysize(buffer) - decomp->avail_out;
|
| if (decompressed_len > 0) {
|
| - processed_successfully = header_parser_->HandleControlFrameHeadersData(
|
| + processed_successfully = visitor_->OnControlFrameHeaderData(
|
| stream_id, buffer, decompressed_len);
|
| - if (header_parser_->get_error() ==
|
| - SpdyHeadersBlockParser::NEED_MORE_DATA) {
|
| - processed_successfully = true;
|
| - }
|
| }
|
| if (!processed_successfully) {
|
| // Assume that the problem was the header block was too large for the
|
| @@ -3133,11 +3110,8 @@
|
| bool read_successfully = true;
|
| while (read_successfully && len > 0) {
|
| size_t bytes_to_deliver = std::min(len, kHeaderDataChunkMaxSize);
|
| - read_successfully = header_parser_->HandleControlFrameHeadersData(
|
| - stream_id, data, bytes_to_deliver);
|
| - if (header_parser_->get_error() == SpdyHeadersBlockParser::NEED_MORE_DATA) {
|
| - read_successfully = true;
|
| - }
|
| + read_successfully = visitor_->OnControlFrameHeaderData(stream_id, data,
|
| + bytes_to_deliver);
|
| data += bytes_to_deliver;
|
| len -= bytes_to_deliver;
|
| if (!read_successfully) {
|
|
|