Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(468)

Unified Diff: net/quic/quic_headers_stream.cc

Issue 1471583002: Add WritePushPromise() method in QuicHeadersStream for server push. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@107697347
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
}

Powered by Google App Engine
This is Rietveld 408576698