Chromium Code Reviews| Index: net/spdy/spdy_session.cc |
| diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc |
| index fc1d94fd1dee838ceb1338aef88a7985c23ad281..ab808fcdd09e184605982dbedefccd513cb3b1df 100644 |
| --- a/net/spdy/spdy_session.cc |
| +++ b/net/spdy/spdy_session.cc |
| @@ -1085,7 +1085,7 @@ std::unique_ptr<SpdySerializedFrame> SpdySession::CreateSynStream( |
| SpdyStreamId stream_id, |
| RequestPriority priority, |
| SpdyControlFlags flags, |
| - const SpdyHeaderBlock& block) { |
| + SpdyHeaderBlock block) { |
| ActiveStreamMap::const_iterator it = active_streams_.find(stream_id); |
| CHECK(it != active_streams_.end()); |
| CHECK_EQ(it->second.stream->stream_id(), stream_id); |
| @@ -1097,17 +1097,7 @@ std::unique_ptr<SpdySerializedFrame> SpdySession::CreateSynStream( |
| ConvertRequestPriorityToSpdyPriority(priority, GetProtocolVersion()); |
| std::unique_ptr<SpdySerializedFrame> syn_frame; |
| - // TODO(hkhalil): Avoid copy of |block|. |
|
Ryan Hamilton
2016/06/23 18:23:18
yay!
|
| if (GetProtocolVersion() <= SPDY3) { |
| - SpdySynStreamIR syn_stream(stream_id); |
| - syn_stream.set_associated_to_stream_id(0); |
| - syn_stream.set_priority(spdy_priority); |
| - syn_stream.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
| - syn_stream.set_unidirectional((flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0); |
| - syn_stream.set_header_block(block); |
| - syn_frame.reset(new SpdySerializedFrame( |
| - buffered_spdy_framer_->SerializeFrame(syn_stream))); |
| - |
| if (net_log().IsCapturing()) { |
| net_log().AddEvent(NetLog::TYPE_HTTP2_SESSION_SYN_STREAM, |
| base::Bind(&NetLogSpdySynStreamSentCallback, &block, |
| @@ -1115,33 +1105,42 @@ std::unique_ptr<SpdySerializedFrame> SpdySession::CreateSynStream( |
| (flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0, |
| spdy_priority, stream_id)); |
| } |
| + |
| + SpdySynStreamIR syn_stream(stream_id, std::move(block)); |
| + syn_stream.set_associated_to_stream_id(0); |
| + syn_stream.set_priority(spdy_priority); |
| + syn_stream.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
| + syn_stream.set_unidirectional((flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0); |
| + syn_frame.reset(new SpdySerializedFrame( |
| + buffered_spdy_framer_->SerializeFrame(syn_stream))); |
| + |
| } else { |
| - SpdyHeadersIR headers(stream_id); |
| - headers.set_weight(Spdy3PriorityToHttp2Weight(spdy_priority)); |
| - headers.set_has_priority(true); |
| + bool has_priority = true; |
| + int weight = Spdy3PriorityToHttp2Weight(spdy_priority); |
| + SpdyStreamId dependent_stream_id = 0; |
| + bool exclusive = false; |
| if (priority_dependencies_enabled_) { |
| - SpdyStreamId dependent_stream_id = 0; |
| - bool exclusive = false; |
| priority_dependency_state_.OnStreamSynSent( |
| stream_id, spdy_priority, &dependent_stream_id, &exclusive); |
| - headers.set_parent_stream_id(dependent_stream_id); |
| - headers.set_exclusive(exclusive); |
| } |
| - headers.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
| - headers.set_header_block(block); |
| - syn_frame.reset(new SpdySerializedFrame( |
| - buffered_spdy_framer_->SerializeFrame(headers))); |
| - |
| if (net_log().IsCapturing()) { |
| net_log().AddEvent( |
| NetLog::TYPE_HTTP2_SESSION_SEND_HEADERS, |
| base::Bind(&NetLogSpdyHeadersSentCallback, &block, |
| - (flags & CONTROL_FLAG_FIN) != 0, stream_id, |
| - headers.has_priority(), headers.weight(), |
| - headers.parent_stream_id(), headers.exclusive())); |
| + (flags & CONTROL_FLAG_FIN) != 0, stream_id, has_priority, |
| + weight, dependent_stream_id, exclusive)); |
| } |
| + |
| + SpdyHeadersIR headers(stream_id, std::move(block)); |
| + headers.set_has_priority(has_priority); |
| + headers.set_weight(weight); |
| + headers.set_parent_stream_id(dependent_stream_id); |
| + headers.set_exclusive(exclusive); |
| + headers.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
| + syn_frame.reset(new SpdySerializedFrame( |
| + buffered_spdy_framer_->SerializeFrame(headers))); |
| } |
| streams_initiated_count_++; |