Index: net/quic/quic_headers_stream.cc |
diff --git a/net/quic/quic_headers_stream.cc b/net/quic/quic_headers_stream.cc |
index c47f14fa36fc8544494e759cda9fd3f3d1cba701..0d93cf9a29243032f6602fb233a20cef0d15ab83 100644 |
--- a/net/quic/quic_headers_stream.cc |
+++ b/net/quic/quic_headers_stream.cc |
@@ -204,12 +204,11 @@ QuicHeadersStream::QuicHeadersStream(QuicSpdySession* session) |
QuicHeadersStream::~QuicHeadersStream() {} |
-size_t QuicHeadersStream::WriteHeaders( |
- QuicStreamId stream_id, |
- const SpdyHeaderBlock& headers, |
- bool fin, |
- QuicPriority priority, |
- QuicAckListenerInterface* ack_notifier_delegate) { |
+size_t QuicHeadersStream::WriteHeaders(QuicStreamId stream_id, |
+ const SpdyHeaderBlock& headers, |
+ bool fin, |
+ SpdyPriority priority, |
+ QuicAckListenerInterface* ack_listener) { |
SpdyHeadersIR headers_frame(stream_id); |
headers_frame.set_header_block(headers); |
headers_frame.set_fin(fin); |
@@ -220,7 +219,30 @@ size_t QuicHeadersStream::WriteHeaders( |
scoped_ptr<SpdySerializedFrame> frame( |
spdy_framer_.SerializeFrame(headers_frame)); |
WriteOrBufferData(StringPiece(frame->data(), frame->size()), false, |
- ack_notifier_delegate); |
+ ack_listener); |
+ return frame->size(); |
+} |
+ |
+size_t QuicHeadersStream::WritePushPromise( |
+ QuicStreamId original_stream_id, |
+ QuicStreamId promised_stream_id, |
+ const SpdyHeaderBlock& headers, |
+ QuicAckListenerInterface* ack_listener) { |
+ if (session()->perspective() == Perspective::IS_CLIENT) { |
+ LOG(DFATAL) << "Client shouldn't send PUSH_PROMISE"; |
+ return 0; |
+ } |
+ |
+ SpdyPushPromiseIR push_promise(original_stream_id, promised_stream_id); |
+ push_promise.set_header_block(headers); |
+ // PUSH_PROMISE must not be the last frame sent out, at least followed by |
+ // response headers. |
+ push_promise.set_fin(false); |
+ |
+ scoped_ptr<SpdySerializedFrame> frame( |
+ spdy_framer_.SerializeFrame(push_promise)); |
+ WriteOrBufferData(StringPiece(frame->data(), frame->size()), false, |
+ ack_listener); |
return frame->size(); |
} |
@@ -253,7 +275,9 @@ void QuicHeadersStream::OnDataAvailable() { |
} |
} |
-QuicPriority QuicHeadersStream::EffectivePriority() const { return 0; } |
+SpdyPriority QuicHeadersStream::Priority() const { |
+ return net::kHighestPriority; // The smallest priority is also the highest |
+} |
void QuicHeadersStream::OnSynStream(SpdyStreamId stream_id, |
SpdyPriority priority, |