Chromium Code Reviews| 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..77597df5ef70381cb83b275962dc1149fdf39262 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; |
| @@ -1135,6 +1138,19 @@ SpdyFrame* SpdyTestUtil::ConstructSpdySyn(int stream_id, |
| RequestPriority priority, |
| bool compressed, |
| bool fin) const { |
| + // 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 +1164,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 +1292,26 @@ SpdyFrame* SpdyTestUtil::ConstructWrappedSpdyFrame( |
| frame->size(), false); |
| } |
| +void SpdyTestUtil::OnStreamDestruction(int stream_id) { |
| + LOG(ERROR) << __FUNCTION__ << " stream_id " << stream_id; |
|
Bence
2015/11/11 18:47:15
I assume you do not intend to keep these LOG state
Randy Smith (Not in Mondays)
2015/11/11 23:25:59
Whoops, I was trying to keep these in the git stas
|
| + 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) { |
| + LOG(ERROR) << __FUNCTION__ << ":" << __LINE__ << " vector size " |
| + << priority_it->second.size(); |
| + priority_it->second.erase(stream_it); |
| + LOG(ERROR) << __FUNCTION__ << ":" << __LINE__ << " vector size " |
| + << priority_it->second.size(); |
| + return; |
| + } |
| + } |
| + } |
| + LOG(ERROR) << __FUNCTION__ << "Reached end."; |
| + NOTREACHED(); |
| +} |
| + |
| const SpdyHeaderInfo SpdyTestUtil::MakeSpdyHeader(SpdyFrameType type) { |
| const SpdyHeaderInfo kHeader = { |
| type, |