Index: net/spdy/spdy_framer.cc |
diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc |
index c0f214cb15d0db883431c22d3e4fc6bc88e25d02..f0efd0447bd5b538d668064d0e9f5bf9d9c46ba4 100644 |
--- a/net/spdy/spdy_framer.cc |
+++ b/net/spdy/spdy_framer.cc |
@@ -124,6 +124,7 @@ bool SpdyFramerVisitorInterface::OnRstStreamFrameData( |
SpdyFramer::SpdyFramer(SpdyMajorVersion version) |
: current_frame_buffer_(new char[kControlFrameBufferSize]), |
enable_compression_(true), |
+ hpack_encoder_(ObtainHpackHuffmanTable()), |
hpack_decoder_(ObtainHpackHuffmanTable()), |
visitor_(NULL), |
debug_visitor_(NULL), |
@@ -2163,8 +2164,13 @@ SpdySerializedFrame* SpdyFramer::SerializeSynStream( |
string hpack_encoding; |
if (protocol_version() > SPDY3) { |
- hpack_encoder_.EncodeHeaderSet(syn_stream.name_value_block(), |
- &hpack_encoding); |
+ if (enable_compression_) { |
+ hpack_encoder_.EncodeHeaderSet( |
+ syn_stream.name_value_block(), &hpack_encoding); |
+ } else { |
+ hpack_encoder_.EncodeHeaderSetWithoutCompression( |
+ syn_stream.name_value_block(), &hpack_encoding); |
+ } |
size += hpack_encoding.size(); |
} else { |
size += GetSerializedLength(syn_stream.name_value_block()); |
@@ -2223,8 +2229,13 @@ SpdySerializedFrame* SpdyFramer::SerializeSynReply( |
string hpack_encoding; |
if (protocol_version() > SPDY3) { |
- hpack_encoder_.EncodeHeaderSet(syn_reply.name_value_block(), |
- &hpack_encoding); |
+ if (enable_compression_) { |
+ hpack_encoder_.EncodeHeaderSet( |
+ syn_reply.name_value_block(), &hpack_encoding); |
+ } else { |
+ hpack_encoder_.EncodeHeaderSetWithoutCompression( |
+ syn_reply.name_value_block(), &hpack_encoding); |
+ } |
size += hpack_encoding.size(); |
} else { |
size += GetSerializedLength(syn_reply.name_value_block()); |
@@ -2442,7 +2453,13 @@ SpdySerializedFrame* SpdyFramer::SerializeHeaders( |
string hpack_encoding; |
if (protocol_version() > SPDY3) { |
- hpack_encoder_.EncodeHeaderSet(headers.name_value_block(), &hpack_encoding); |
+ if (enable_compression_) { |
+ hpack_encoder_.EncodeHeaderSet( |
+ headers.name_value_block(), &hpack_encoding); |
+ } else { |
+ hpack_encoder_.EncodeHeaderSetWithoutCompression( |
+ headers.name_value_block(), &hpack_encoding); |
+ } |
size += hpack_encoding.size(); |
if (size > GetControlFrameBufferMaxSize()) { |
size += GetNumberRequiredContinuationFrames(size) * |
@@ -2533,8 +2550,13 @@ SpdyFrame* SpdyFramer::SerializePushPromise( |
string hpack_encoding; |
if (protocol_version() > SPDY3) { |
- hpack_encoder_.EncodeHeaderSet(push_promise.name_value_block(), |
- &hpack_encoding); |
+ if (enable_compression_) { |
+ hpack_encoder_.EncodeHeaderSet( |
+ push_promise.name_value_block(), &hpack_encoding); |
+ } else { |
+ hpack_encoder_.EncodeHeaderSetWithoutCompression( |
+ push_promise.name_value_block(), &hpack_encoding); |
+ } |
size += hpack_encoding.size(); |
if (size > GetControlFrameBufferMaxSize()) { |
size += GetNumberRequiredContinuationFrames(size) * |
@@ -2588,8 +2610,13 @@ SpdyFrame* SpdyFramer::SerializeContinuation( |
// The size of this frame, including variable-length name-value block. |
size_t size = GetContinuationMinimumSize(); |
string hpack_encoding; |
- hpack_encoder_.EncodeHeaderSet(continuation.name_value_block(), |
- &hpack_encoding); |
+ if (enable_compression_) { |
+ hpack_encoder_.EncodeHeaderSet( |
+ continuation.name_value_block(), &hpack_encoding); |
+ } else { |
+ hpack_encoder_.EncodeHeaderSetWithoutCompression( |
+ continuation.name_value_block(), &hpack_encoding); |
+ } |
size += hpack_encoding.size(); |
SpdyFrameBuilder builder(size, protocol_version()); |