Index: net/quic/quic_headers_stream.cc |
diff --git a/net/quic/quic_headers_stream.cc b/net/quic/quic_headers_stream.cc |
index 2b101640c1e0917aaa5f31b4dd76af4ea36195da..310bfc6f1452114ac9ae28a268eae75a50bc2abd 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, |
- SpdyPriority 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,31 @@ 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(); |
} |