| Index: net/spdy/spdy_test_util_common.cc
|
| diff --git a/net/spdy/spdy_test_util_common.cc b/net/spdy/spdy_test_util_common.cc
|
| index 3d73c7f0c59507f5fa1e198411eae51e8ac76cce..2154786969349ca6b5ce49c479c184c4807f4d3b 100644
|
| --- a/net/spdy/spdy_test_util_common.cc
|
| +++ b/net/spdy/spdy_test_util_common.cc
|
| @@ -809,8 +809,8 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyControlFrame(
|
| SpdyFrameType type,
|
| SpdyControlFlags flags,
|
| SpdyStreamId associated_stream_id) const {
|
| - EXPECT_GE(type, FIRST_CONTROL_TYPE);
|
| - EXPECT_LE(type, LAST_CONTROL_TYPE);
|
| + EXPECT_GE(type, DATA);
|
| + EXPECT_LE(type, PRIORITY);
|
| const SpdyHeaderInfo header_info = {
|
| type,
|
| stream_id,
|
| @@ -939,20 +939,9 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyGet(
|
| bool compressed,
|
| SpdyStreamId stream_id,
|
| RequestPriority request_priority) const {
|
| - const SpdyHeaderInfo header_info = {
|
| - SYN_STREAM,
|
| - stream_id,
|
| - 0, // associated stream ID
|
| - ConvertRequestPriorityToSpdyPriority(request_priority, spdy_version_),
|
| - 0, // credential slot
|
| - CONTROL_FLAG_FIN,
|
| - compressed,
|
| - RST_STREAM_INVALID, // status
|
| - NULL, // data
|
| - 0, // length
|
| - DATA_FLAG_NONE
|
| - };
|
| - return ConstructSpdyFrame(header_info, ConstructGetHeaderBlock(url));
|
| + scoped_ptr<SpdyHeaderBlock> block(ConstructGetHeaderBlock(url));
|
| + return ConstructSpdySyn(
|
| + stream_id, *block, request_priority, compressed, true);
|
| }
|
|
|
| SpdyFrame* SpdyTestUtil::ConstructSpdyGet(const char* const extra_headers[],
|
| @@ -961,19 +950,15 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyGet(const char* const extra_headers[],
|
| int stream_id,
|
| RequestPriority request_priority,
|
| bool direct) const {
|
| - SpdySynStreamIR syn_stream(stream_id);
|
| - syn_stream.set_priority(
|
| - ConvertRequestPriorityToSpdyPriority(request_priority, spdy_version_));
|
| - syn_stream.set_fin(true);
|
| - syn_stream.SetHeader(GetMethodKey(), "GET");
|
| - syn_stream.SetHeader(GetHostKey(), "www.google.com");
|
| - syn_stream.SetHeader(GetSchemeKey(), "http");
|
| - syn_stream.SetHeader(GetPathKey(), (is_spdy2() && !direct) ?
|
| - "http://www.google.com/" : "/");
|
| - MaybeAddVersionHeader(&syn_stream);
|
| - AppendToHeaderBlock(extra_headers, extra_header_count,
|
| - syn_stream.mutable_name_value_block());
|
| - return CreateFramer(compressed)->SerializeFrame(syn_stream);
|
| + SpdyHeaderBlock block;
|
| + block[GetMethodKey()] = "GET";
|
| + block[GetPathKey()] =
|
| + (is_spdy2() && !direct) ? "http://www.google.com/" : "/";
|
| + block[GetHostKey()] = "www.google.com";
|
| + block[GetSchemeKey()] = "http";
|
| + MaybeAddVersionHeader(&block);
|
| + AppendToHeaderBlock(extra_headers, extra_header_count, &block);
|
| + return ConstructSpdySyn(stream_id, block, request_priority, compressed, true);
|
| }
|
|
|
| SpdyFrame* SpdyTestUtil::ConstructSpdyConnect(
|
| @@ -981,16 +966,13 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyConnect(
|
| int extra_header_count,
|
| int stream_id,
|
| RequestPriority priority) const {
|
| - SpdySynStreamIR syn_stream(stream_id);
|
| - syn_stream.set_priority(
|
| - ConvertRequestPriorityToSpdyPriority(priority, spdy_version_));
|
| - syn_stream.SetHeader(GetMethodKey(), "CONNECT");
|
| - syn_stream.SetHeader(GetPathKey(), "www.google.com:443");
|
| - syn_stream.SetHeader(GetHostKey(), "www.google.com");
|
| - MaybeAddVersionHeader(&syn_stream);
|
| - AppendToHeaderBlock(extra_headers, extra_header_count,
|
| - syn_stream.mutable_name_value_block());
|
| - return CreateFramer(false)->SerializeFrame(syn_stream);
|
| + SpdyHeaderBlock block;
|
| + block[GetMethodKey()] = "CONNECT";
|
| + block[GetPathKey()] = "www.google.com:443";
|
| + block[GetHostKey()] = "www.google.com";
|
| + MaybeAddVersionHeader(&block);
|
| + AppendToHeaderBlock(extra_headers, extra_header_count, &block);
|
| + return ConstructSpdySyn(stream_id, block, priority, false, false);
|
| }
|
|
|
| SpdyFrame* SpdyTestUtil::ConstructSpdyPush(const char* const extra_headers[],
|
| @@ -1015,10 +997,7 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyPush(const char* const extra_headers[],
|
| scoped_ptr<SpdyFrame> push_promise_frame(
|
| CreateFramer(false)->SerializeFrame(push_promise));
|
|
|
| - // Use SynStreamIR to create HEADERS+PRIORITY. Direct creation breaks
|
| - // framer.
|
| - SpdySynStreamIR headers(stream_id);
|
| - SetPriority(LOWEST, &headers);
|
| + SpdyHeadersIR headers(stream_id);
|
| headers.SetHeader("hello", "bye");
|
| headers.SetHeader(GetStatusKey(), "200 OK");
|
| AppendToHeaderBlock(
|
| @@ -1063,10 +1042,7 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyPush(const char* const extra_headers[],
|
| scoped_ptr<SpdyFrame> push_promise_frame(
|
| CreateFramer(false)->SerializeFrame(push_promise));
|
|
|
| - // Use SynStreamIR to create HEADERS+PRIORITY. Direct creation breaks
|
| - // framer.
|
| - SpdySynStreamIR headers(stream_id);
|
| - SetPriority(LOWEST, &headers);
|
| + SpdyHeadersIR headers(stream_id);
|
| headers.SetHeader("hello", "bye");
|
| headers.SetHeader(GetStatusKey(), status);
|
| headers.SetHeader("location", location);
|
| @@ -1116,18 +1092,54 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyPushHeaders(
|
| return CreateFramer(false)->SerializeFrame(headers);
|
| }
|
|
|
| +SpdyFrame* SpdyTestUtil::ConstructSpdySyn(int stream_id,
|
| + const SpdyHeaderBlock& block,
|
| + RequestPriority priority,
|
| + bool compressed,
|
| + bool fin) const {
|
| + if (protocol_ < kProtoSPDY4) {
|
| + SpdySynStreamIR syn_stream(stream_id);
|
| + syn_stream.set_name_value_block(block);
|
| + syn_stream.set_priority(
|
| + ConvertRequestPriorityToSpdyPriority(priority, spdy_version()));
|
| + syn_stream.set_fin(fin);
|
| + return CreateFramer(compressed)->SerializeFrame(syn_stream);
|
| + } else {
|
| + SpdyHeadersIR headers(stream_id);
|
| + headers.set_name_value_block(block);
|
| + headers.set_has_priority(true);
|
| + headers.set_priority(
|
| + ConvertRequestPriorityToSpdyPriority(priority, spdy_version()));
|
| + headers.set_fin(fin);
|
| + return CreateFramer(compressed)->SerializeFrame(headers);
|
| + }
|
| +}
|
| +
|
| +SpdyFrame* SpdyTestUtil::ConstructSpdyReply(int stream_id,
|
| + const SpdyHeaderBlock& headers) {
|
| + if (protocol_ < kProtoSPDY4) {
|
| + SpdySynReplyIR syn_reply(stream_id);
|
| + syn_reply.set_name_value_block(headers);
|
| + return CreateFramer(false)->SerializeFrame(syn_reply);
|
| + } else {
|
| + SpdyHeadersIR reply(stream_id);
|
| + reply.set_name_value_block(headers);
|
| + return CreateFramer(false)->SerializeFrame(reply);
|
| + }
|
| +}
|
| +
|
| SpdyFrame* SpdyTestUtil::ConstructSpdySynReplyError(
|
| const char* const status,
|
| const char* const* const extra_headers,
|
| int extra_header_count,
|
| int stream_id) {
|
| - SpdySynReplyIR syn_reply(stream_id);
|
| - syn_reply.SetHeader("hello", "bye");
|
| - syn_reply.SetHeader(GetStatusKey(), status);
|
| - MaybeAddVersionHeader(&syn_reply);
|
| - AppendToHeaderBlock(extra_headers, extra_header_count,
|
| - syn_reply.mutable_name_value_block());
|
| - return CreateFramer(false)->SerializeFrame(syn_reply);
|
| + SpdyHeaderBlock block;
|
| + block["hello"] = "bye";
|
| + block[GetStatusKey()] = status;
|
| + MaybeAddVersionHeader(&block);
|
| + AppendToHeaderBlock(extra_headers, extra_header_count, &block);
|
| +
|
| + return ConstructSpdyReply(stream_id, block);
|
| }
|
|
|
| SpdyFrame* SpdyTestUtil::ConstructSpdyGetSynReplyRedirect(int stream_id) {
|
| @@ -1146,13 +1158,13 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyGetSynReply(
|
| const char* const extra_headers[],
|
| int extra_header_count,
|
| int stream_id) {
|
| - SpdySynReplyIR syn_reply(stream_id);
|
| - syn_reply.SetHeader("hello", "bye");
|
| - syn_reply.SetHeader(GetStatusKey(), "200");
|
| - MaybeAddVersionHeader(&syn_reply);
|
| - AppendToHeaderBlock(extra_headers, extra_header_count,
|
| - syn_reply.mutable_name_value_block());
|
| - return CreateFramer(false)->SerializeFrame(syn_reply);
|
| + SpdyHeaderBlock block;
|
| + block["hello"] = "bye";
|
| + block[GetStatusKey()] = "200";
|
| + MaybeAddVersionHeader(&block);
|
| + AppendToHeaderBlock(extra_headers, extra_header_count, &block);
|
| +
|
| + return ConstructSpdyReply(stream_id, block);
|
| }
|
|
|
| SpdyFrame* SpdyTestUtil::ConstructSpdyPost(const char* url,
|
| @@ -1161,49 +1173,30 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyPost(const char* url,
|
| RequestPriority priority,
|
| const char* const extra_headers[],
|
| int extra_header_count) {
|
| - const SpdyHeaderInfo kSynStartHeader = {
|
| - SYN_STREAM,
|
| - stream_id,
|
| - 0, // Associated stream ID
|
| - ConvertRequestPriorityToSpdyPriority(priority, spdy_version_),
|
| - kSpdyCredentialSlotUnused,
|
| - CONTROL_FLAG_NONE,
|
| - false, // Compressed
|
| - RST_STREAM_INVALID,
|
| - NULL, // Data
|
| - 0, // Length
|
| - DATA_FLAG_NONE
|
| - };
|
| - return ConstructSpdyFrame(
|
| - kSynStartHeader, ConstructPostHeaderBlock(url, content_length));
|
| + scoped_ptr<SpdyHeaderBlock> block(
|
| + ConstructPostHeaderBlock(url, content_length));
|
| + AppendToHeaderBlock(extra_headers, extra_header_count, block.get());
|
| + return ConstructSpdySyn(stream_id, *block, priority, false, false);
|
| }
|
|
|
| SpdyFrame* SpdyTestUtil::ConstructChunkedSpdyPost(
|
| const char* const extra_headers[],
|
| int extra_header_count) {
|
| - SpdySynStreamIR syn_stream(1);
|
| - syn_stream.SetHeader(GetMethodKey(), "POST");
|
| - syn_stream.SetHeader(GetPathKey(), "/");
|
| - syn_stream.SetHeader(GetHostKey(), "www.google.com");
|
| - syn_stream.SetHeader(GetSchemeKey(), "http");
|
| - MaybeAddVersionHeader(&syn_stream);
|
| - SetPriority(LOWEST, &syn_stream);
|
| - AppendToHeaderBlock(extra_headers, extra_header_count,
|
| - syn_stream.mutable_name_value_block());
|
| - return CreateFramer(false)->SerializeFrame(syn_stream);
|
| + SpdyHeaderBlock block;
|
| + block[GetMethodKey()] = "POST";
|
| + block[GetPathKey()] = "/";
|
| + block[GetHostKey()] = "www.google.com";
|
| + block[GetSchemeKey()] = "http";
|
| + MaybeAddVersionHeader(&block);
|
| + AppendToHeaderBlock(extra_headers, extra_header_count, &block);
|
| + return ConstructSpdySyn(1, block, LOWEST, false, false);
|
| }
|
|
|
| SpdyFrame* SpdyTestUtil::ConstructSpdyPostSynReply(
|
| const char* const extra_headers[],
|
| int extra_header_count) {
|
| - SpdySynReplyIR syn_reply(1);
|
| - syn_reply.SetHeader("hello", "bye");
|
| - syn_reply.SetHeader(GetStatusKey(), "200");
|
| - syn_reply.SetHeader(GetPathKey(), "/index.php");
|
| - MaybeAddVersionHeader(&syn_reply);
|
| - AppendToHeaderBlock(extra_headers, extra_header_count,
|
| - syn_reply.mutable_name_value_block());
|
| - return CreateFramer(false)->SerializeFrame(syn_reply);
|
| + // TODO(jgraettinger): Remove this method.
|
| + return ConstructSpdyGetSynReply(NULL, 0, 1);
|
| }
|
|
|
| SpdyFrame* SpdyTestUtil::ConstructSpdyBodyFrame(int stream_id, bool fin) {
|
| @@ -1311,6 +1304,12 @@ void SpdyTestUtil::MaybeAddVersionHeader(
|
| }
|
| }
|
|
|
| +void SpdyTestUtil::MaybeAddVersionHeader(SpdyHeaderBlock* block) const {
|
| + if (include_version_header()) {
|
| + (*block)[GetVersionKey()] = "HTTP/1.1";
|
| + }
|
| +}
|
| +
|
| void SpdyTestUtil::SetPriority(RequestPriority priority,
|
| SpdySynStreamIR* ir) const {
|
| ir->set_priority(ConvertRequestPriorityToSpdyPriority(
|
|
|