Index: net/quic/core/quic_headers_stream.cc |
diff --git a/net/quic/core/quic_headers_stream.cc b/net/quic/core/quic_headers_stream.cc |
index 5b011e8cb445713dc667653959029b8760a66d70..a662c4ffea41f790cd88dd9409da825c440eb213 100644 |
--- a/net/quic/core/quic_headers_stream.cc |
+++ b/net/quic/core/quic_headers_stream.cc |
@@ -13,6 +13,7 @@ |
#include "net/quic/core/quic_bug_tracker.h" |
#include "net/quic/core/quic_flags.h" |
#include "net/quic/core/quic_header_list.h" |
+#include "net/quic/core/quic_server_session_base.h" |
#include "net/quic/core/quic_spdy_session.h" |
#include "net/quic/core/quic_time.h" |
#include "net/spdy/spdy_protocol.h" |
@@ -196,6 +197,22 @@ class QuicHeadersStream::SpdyFramerVisitor |
case SETTINGS_HEADER_TABLE_SIZE: |
stream_->UpdateHeaderEncoderTableSize(value); |
break; |
+ case SETTINGS_ENABLE_PUSH: |
+ if (FLAGS_quic_enable_server_push_by_default && |
+ stream_->session()->perspective() == Perspective::IS_SERVER) { |
+ // See rfc7540, Section 6.5.2. |
+ if (value > 1) { |
+ CloseConnection("Invalid value for SETTINGS_ENABLE_PUSH: " + |
+ base::IntToString(value)); |
+ return; |
+ } |
+ stream_->UpdateEnableServerPush(value); |
+ break; |
+ } else { |
+ CloseConnection("Unsupported field of HTTP/2 SETTINGS frame: " + |
+ base::IntToString(id)); |
+ } |
+ break; |
// TODO(fayang): Need to support SETTINGS_MAX_HEADER_LIST_SIZE when |
// clients are actually sending it. |
default: |
@@ -593,6 +610,10 @@ void QuicHeadersStream::UpdateHeaderEncoderTableSize(uint32_t value) { |
spdy_framer_.UpdateHeaderEncoderTableSize(value); |
} |
+void QuicHeadersStream::UpdateEnableServerPush(bool value) { |
+ spdy_session_->set_server_push_enabled(value); |
+} |
+ |
bool QuicHeadersStream::OnDataFrameHeader(QuicStreamId stream_id, |
size_t length, |
bool fin) { |