| 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 d442a474fc1a42cf71bc14e8045e33d23d2a294c..361b2699b04055dd55e5400715961f44302013dd 100644
|
| --- a/net/spdy/spdy_test_util_common.cc
|
| +++ b/net/spdy/spdy_test_util_common.cc
|
| @@ -734,13 +734,16 @@ void SpdySessionPoolPeer::SetStreamInitialRecvWindowSize(size_t window) {
|
| pool_->stream_max_recv_window_size_ = window;
|
| }
|
|
|
| -SpdyTestUtil::SpdyTestUtil(NextProto protocol)
|
| +SpdyTestUtil::SpdyTestUtil(NextProto protocol, bool dependency_priorities)
|
| : protocol_(protocol),
|
| spdy_version_(NextProtoToSpdyMajorVersion(protocol)),
|
| - default_url_(GURL(kDefaultURL)) {
|
| + default_url_(GURL(kDefaultURL)),
|
| + dependency_priorities_(dependency_priorities) {
|
| DCHECK(next_proto_is_spdy(protocol)) << "Invalid protocol: " << protocol;
|
| }
|
|
|
| +SpdyTestUtil::~SpdyTestUtil() {}
|
| +
|
| void SpdyTestUtil::AddUrlToHeaderBlock(base::StringPiece url,
|
| SpdyHeaderBlock* headers) const {
|
| std::string scheme, host, path;
|
| @@ -961,11 +964,10 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyRstStream(
|
| return CreateFramer(false)->SerializeRstStream(rst_ir);
|
| }
|
|
|
| -SpdyFrame* SpdyTestUtil::ConstructSpdyGet(
|
| - const char* const url,
|
| - bool compressed,
|
| - SpdyStreamId stream_id,
|
| - RequestPriority request_priority) const {
|
| +SpdyFrame* SpdyTestUtil::ConstructSpdyGet(const char* const url,
|
| + bool compressed,
|
| + SpdyStreamId stream_id,
|
| + RequestPriority request_priority) {
|
| scoped_ptr<SpdyHeaderBlock> block(ConstructGetHeaderBlock(url));
|
| return ConstructSpdySyn(
|
| stream_id, *block, request_priority, compressed, true);
|
| @@ -976,7 +978,7 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyGet(const char* const extra_headers[],
|
| bool compressed,
|
| int stream_id,
|
| RequestPriority request_priority,
|
| - bool direct) const {
|
| + bool direct) {
|
| SpdyHeaderBlock block;
|
| MaybeAddVersionHeader(&block);
|
| block[GetMethodKey()] = "GET";
|
| @@ -990,7 +992,7 @@ SpdyFrame* SpdyTestUtil::ConstructSpdyConnect(
|
| int extra_header_count,
|
| int stream_id,
|
| RequestPriority priority,
|
| - const HostPortPair& host_port_pair) const {
|
| + const HostPortPair& host_port_pair) {
|
| SpdyHeaderBlock block;
|
| MaybeAddVersionHeader(&block);
|
| block[GetMethodKey()] = "CONNECT";
|
| @@ -1134,7 +1136,20 @@ SpdyFrame* SpdyTestUtil::ConstructSpdySyn(int stream_id,
|
| const SpdyHeaderBlock& block,
|
| RequestPriority priority,
|
| bool compressed,
|
| - bool fin) const {
|
| + bool fin) {
|
| + // Get the stream id of the next highest priority request
|
| + // (most recent request of the same priority, or last request of
|
| + // an earlier priority).
|
| + int parent_stream_id = 0;
|
| + for (int q = priority; q >= IDLE; --q) {
|
| + if (!priority_to_stream_id_list_[q].empty()) {
|
| + parent_stream_id = priority_to_stream_id_list_[q].back();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + priority_to_stream_id_list_[priority].push_back(stream_id);
|
| +
|
| if (protocol_ < kProtoHTTP2) {
|
| SpdySynStreamIR syn_stream(stream_id);
|
| syn_stream.set_header_block(block);
|
| @@ -1148,6 +1163,10 @@ SpdyFrame* SpdyTestUtil::ConstructSpdySyn(int stream_id,
|
| headers.set_has_priority(true);
|
| headers.set_priority(
|
| ConvertRequestPriorityToSpdyPriority(priority, spdy_version()));
|
| + if (dependency_priorities_) {
|
| + headers.set_parent_stream_id(parent_stream_id);
|
| + headers.set_exclusive(true);
|
| + }
|
| headers.set_fin(fin);
|
| return CreateFramer(compressed)->SerializeFrame(headers);
|
| }
|
| @@ -1272,6 +1291,20 @@ SpdyFrame* SpdyTestUtil::ConstructWrappedSpdyFrame(
|
| frame->size(), false);
|
| }
|
|
|
| +void SpdyTestUtil::UpdateWithStreamDestruction(int stream_id) {
|
| + for (auto priority_it = priority_to_stream_id_list_.begin();
|
| + priority_it != priority_to_stream_id_list_.end(); ++priority_it) {
|
| + for (auto stream_it = priority_it->second.begin();
|
| + stream_it != priority_it->second.end(); ++stream_it) {
|
| + if (*stream_it == stream_id) {
|
| + priority_it->second.erase(stream_it);
|
| + return;
|
| + }
|
| + }
|
| + }
|
| + NOTREACHED();
|
| +}
|
| +
|
| const SpdyHeaderInfo SpdyTestUtil::MakeSpdyHeader(SpdyFrameType type) {
|
| const SpdyHeaderInfo kHeader = {
|
| type,
|
|
|