| Index: net/spdy/spdy_framer_test.cc
|
| diff --git a/net/spdy/spdy_framer_test.cc b/net/spdy/spdy_framer_test.cc
|
| index d6f1a7eabd8f321c2d79cd59cd6669a546091aa0..375bb1d40de03c26df3e78fbf548d71e9c1768e0 100644
|
| --- a/net/spdy/spdy_framer_test.cc
|
| +++ b/net/spdy/spdy_framer_test.cc
|
| @@ -11,6 +11,7 @@
|
| #include "net/spdy/hpack_output_stream.h"
|
| #include "net/spdy/mock_spdy_framer_visitor.h"
|
| #include "net/spdy/spdy_frame_builder.h"
|
| +#include "net/spdy/spdy_frame_reader.h"
|
| #include "net/spdy/spdy_framer.h"
|
| #include "net/spdy/spdy_protocol.h"
|
| #include "net/spdy/spdy_test_utils.h"
|
| @@ -300,7 +301,9 @@ class TestSpdyVisitor : public SpdyFramerVisitorInterface,
|
| CHECK(header_buffer_valid_);
|
| size_t parsed_length = framer_.ParseHeaderBlockInBuffer(
|
| header_buffer_.get(), header_buffer_length_, &headers_);
|
| - DCHECK_EQ(header_buffer_length_, parsed_length);
|
| + LOG_IF(DFATAL, header_buffer_length_ != parsed_length)
|
| + << "Check failed: header_buffer_length_ == parsed_length "
|
| + << "(" << header_buffer_length_ << " vs. " << parsed_length << ")";
|
| return true;
|
| }
|
| const size_t available = header_buffer_size_ - header_buffer_length_;
|
| @@ -492,12 +495,39 @@ class TestSpdyVisitor : public SpdyFramerVisitorInterface,
|
| SpdyHeaderBlock headers_;
|
| };
|
|
|
| -// Retrieves serialized headers from SYN_STREAM frame.
|
| -// Does not check that the given frame is a SYN_STREAM.
|
| +// Retrieves serialized headers from a HEADERS or SYN_STREAM frame.
|
| base::StringPiece GetSerializedHeaders(const SpdyFrame* frame,
|
| const SpdyFramer& framer) {
|
| - return base::StringPiece(frame->data() + framer.GetSynStreamMinimumSize(),
|
| - frame->size() - framer.GetSynStreamMinimumSize());
|
| + SpdyFrameReader reader(frame->data(), frame->size());
|
| + reader.Seek(2); // Seek past the frame length.
|
| + SpdyFrameType frame_type;
|
| + if (framer.protocol_version() > SPDY3) {
|
| + uint8 serialized_type;
|
| + reader.ReadUInt8(&serialized_type);
|
| + frame_type = SpdyConstants::ParseFrameType(framer.protocol_version(),
|
| + serialized_type);
|
| + DCHECK_EQ(HEADERS, frame_type);
|
| + uint8 flags;
|
| + reader.ReadUInt8(&flags);
|
| + if (flags & HEADERS_FLAG_PRIORITY) {
|
| + frame_type = SYN_STREAM;
|
| + }
|
| + } else {
|
| + uint16 serialized_type;
|
| + reader.ReadUInt16(&serialized_type);
|
| + frame_type = SpdyConstants::ParseFrameType(framer.protocol_version(),
|
| + serialized_type);
|
| + DCHECK(frame_type == HEADERS ||
|
| + frame_type == SYN_STREAM) << frame_type;
|
| + }
|
| +
|
| + if (frame_type == SYN_STREAM) {
|
| + return StringPiece(frame->data() + framer.GetSynStreamMinimumSize(),
|
| + frame->size() - framer.GetSynStreamMinimumSize());
|
| + } else {
|
| + return StringPiece(frame->data() + framer.GetHeadersMinimumSize(),
|
| + frame->size() - framer.GetHeadersMinimumSize());
|
| + }
|
| }
|
|
|
| } // namespace test
|
|
|