Commit 3a76c140 authored by Bence Béky's avatar Bence Béky Committed by Commit Bot

Set max_inbound_header_list_size in QuicChromiumClientSession.

Call max_inbound_header_list_size() instead of
set_max_uncompressed_header_bytes() in
QuicChromiumClientSession::Initialize(), and do so before calling
QuicSpdyClientSessionBase::Initialize().  This sets the base class
QuicSpdySession's max_uncompressed_header_bytes_ member, which then
gets passed to set_max_uncompressed_header_bytes() in
QuicSpdySession::Initialize(), making sure that SpdyFramerVisitor still
gets the new limit.  However, this also makes sure that the limit passed
to QpackDecodedHeadersAccumulator constructor in
QuicSpdySession::OnHeadersFrameStart() reflects the limit.

Also update QuicTestPacketMaker to use the Chromium-specific limit,
which is different from the one defined in QUICHE.

Change-Id: Id36e7e4998dbf69a07ae390a9bf5d93a88079a11
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1693401
Commit-Queue: Ryan Hamilton <rch@chromium.org>
Reviewed-by: default avatarRyan Hamilton <rch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#678037}
parent a96d4c75
...@@ -74,9 +74,6 @@ const size_t kMinRetryTimeForDefaultNetworkSecs = 1; ...@@ -74,9 +74,6 @@ const size_t kMinRetryTimeForDefaultNetworkSecs = 1;
// network. // network.
const int kDefaultRTTMilliSecs = 300; const int kDefaultRTTMilliSecs = 300;
// The maximum size of uncompressed QUIC headers that will be allowed.
const size_t kMaxUncompressedHeaderSize = 256 * 1024;
// Histograms for tracking down the crashes from http://crbug.com/354669 // Histograms for tracking down the crashes from http://crbug.com/354669
// Note: these values must be kept in sync with the corresponding values in: // Note: these values must be kept in sync with the corresponding values in:
// tools/metrics/histograms/histograms.xml // tools/metrics/histograms/histograms.xml
...@@ -929,10 +926,10 @@ QuicChromiumClientSession::~QuicChromiumClientSession() { ...@@ -929,10 +926,10 @@ QuicChromiumClientSession::~QuicChromiumClientSession() {
} }
void QuicChromiumClientSession::Initialize() { void QuicChromiumClientSession::Initialize() {
set_max_inbound_header_list_size(kQuicMaxHeaderListSize);
quic::QuicSpdyClientSessionBase::Initialize(); quic::QuicSpdyClientSessionBase::Initialize();
SetHpackEncoderDebugVisitor(std::make_unique<HpackEncoderDebugVisitor>()); SetHpackEncoderDebugVisitor(std::make_unique<HpackEncoderDebugVisitor>());
SetHpackDecoderDebugVisitor(std::make_unique<HpackDecoderDebugVisitor>()); SetHpackDecoderDebugVisitor(std::make_unique<HpackDecoderDebugVisitor>());
set_max_uncompressed_header_bytes(kMaxUncompressedHeaderSize);
} }
size_t QuicChromiumClientSession::WriteHeadersOnHeadersStream( size_t QuicChromiumClientSession::WriteHeadersOnHeadersStream(
......
...@@ -64,6 +64,10 @@ namespace test { ...@@ -64,6 +64,10 @@ namespace test {
class QuicChromiumClientSessionPeer; class QuicChromiumClientSessionPeer;
} // namespace test } // namespace test
// SETTINGS_MAX_HEADERS_LIST_SIZE, the maximum size of uncompressed QUIC headers
// that the server is allowed to send.
const size_t kQuicMaxHeaderListSize = 256 * 1024;
// Result of a session migration attempt. // Result of a session migration attempt.
enum class MigrationResult { enum class MigrationResult {
SUCCESS, // Migration succeeded. SUCCESS, // Migration succeeded.
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <utility> #include <utility>
#include "net/quic/mock_crypto_client_stream.h" #include "net/quic/mock_crypto_client_stream.h"
#include "net/quic/quic_chromium_client_session.h"
#include "net/quic/quic_http_utils.h" #include "net/quic/quic_http_utils.h"
#include "net/third_party/quiche/src/quic/core/http/quic_spdy_session.h" #include "net/third_party/quiche/src/quic/core/http/quic_spdy_session.h"
#include "net/third_party/quiche/src/quic/core/quic_framer.h" #include "net/third_party/quiche/src/quic/core/quic_framer.h"
...@@ -355,8 +356,7 @@ QuicTestPacketMaker::MakeRstAndRequestHeadersPacket( ...@@ -355,8 +356,7 @@ QuicTestPacketMaker::MakeRstAndRequestHeadersPacket(
std::string type(1, 0x00); std::string type(1, 0x00);
quic::SettingsFrame settings; quic::SettingsFrame settings;
settings.values[quic::kSettingsMaxHeaderListSize] = settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
quic::kDefaultMaxUncompressedHeaderSize;
std::unique_ptr<char[]> buffer1; std::unique_ptr<char[]> buffer1;
quic::QuicByteCount frame_length1 = quic::QuicByteCount frame_length1 =
http_encoder_.SerializeSettingsFrame(settings, &buffer1); http_encoder_.SerializeSettingsFrame(settings, &buffer1);
...@@ -808,8 +808,7 @@ QuicTestPacketMaker::MakeRequestHeadersAndMultipleDataFramesPacket( ...@@ -808,8 +808,7 @@ QuicTestPacketMaker::MakeRequestHeadersAndMultipleDataFramesPacket(
std::string type(1, 0x00); std::string type(1, 0x00);
quic::SettingsFrame settings; quic::SettingsFrame settings;
settings.values[quic::kSettingsMaxHeaderListSize] = settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
quic::kDefaultMaxUncompressedHeaderSize;
std::unique_ptr<char[]> buffer1; std::unique_ptr<char[]> buffer1;
quic::QuicByteCount frame_length1 = quic::QuicByteCount frame_length1 =
http_encoder_.SerializeSettingsFrame(settings, &buffer1); http_encoder_.SerializeSettingsFrame(settings, &buffer1);
...@@ -903,8 +902,7 @@ QuicTestPacketMaker::MakeRequestHeadersPacket( ...@@ -903,8 +902,7 @@ QuicTestPacketMaker::MakeRequestHeadersPacket(
std::string type(1, 0x00); std::string type(1, 0x00);
quic::SettingsFrame settings; quic::SettingsFrame settings;
settings.values[quic::kSettingsMaxHeaderListSize] = settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
quic::kDefaultMaxUncompressedHeaderSize;
std::unique_ptr<char[]> buffer1; std::unique_ptr<char[]> buffer1;
quic::QuicByteCount frame_length1 = quic::QuicByteCount frame_length1 =
http_encoder_.SerializeSettingsFrame(settings, &buffer1); http_encoder_.SerializeSettingsFrame(settings, &buffer1);
...@@ -975,8 +973,7 @@ QuicTestPacketMaker::MakeRequestHeadersAndRstPacket( ...@@ -975,8 +973,7 @@ QuicTestPacketMaker::MakeRequestHeadersAndRstPacket(
std::string type(1, 0x00); std::string type(1, 0x00);
quic::SettingsFrame settings; quic::SettingsFrame settings;
settings.values[quic::kSettingsMaxHeaderListSize] = settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
quic::kDefaultMaxUncompressedHeaderSize;
std::unique_ptr<char[]> buffer1; std::unique_ptr<char[]> buffer1;
quic::QuicByteCount frame_length1 = quic::QuicByteCount frame_length1 =
http_encoder_.SerializeSettingsFrame(settings, &buffer1); http_encoder_.SerializeSettingsFrame(settings, &buffer1);
...@@ -1287,7 +1284,7 @@ QuicTestPacketMaker::MakeSettingsPacket(uint64_t packet_number, ...@@ -1287,7 +1284,7 @@ QuicTestPacketMaker::MakeSettingsPacket(uint64_t packet_number,
if (!quic::VersionHasStreamType(version_.transport_version)) { if (!quic::VersionHasStreamType(version_.transport_version)) {
spdy::SpdySettingsIR settings_frame; spdy::SpdySettingsIR settings_frame;
settings_frame.AddSetting(spdy::SETTINGS_MAX_HEADER_LIST_SIZE, settings_frame.AddSetting(spdy::SETTINGS_MAX_HEADER_LIST_SIZE,
quic::kDefaultMaxUncompressedHeaderSize); kQuicMaxHeaderListSize);
spdy::SpdySerializedFrame spdy_frame( spdy::SpdySerializedFrame spdy_frame(
spdy_request_framer_.SerializeFrame(settings_frame)); spdy_request_framer_.SerializeFrame(settings_frame));
InitializeHeader(packet_number, should_include_version); InitializeHeader(packet_number, should_include_version);
...@@ -1301,8 +1298,7 @@ QuicTestPacketMaker::MakeSettingsPacket(uint64_t packet_number, ...@@ -1301,8 +1298,7 @@ QuicTestPacketMaker::MakeSettingsPacket(uint64_t packet_number,
// first. // first.
std::string type(1, 0x00); std::string type(1, 0x00);
quic::SettingsFrame settings; quic::SettingsFrame settings;
settings.values[quic::kSettingsMaxHeaderListSize] = settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
quic::kDefaultMaxUncompressedHeaderSize;
std::unique_ptr<char[]> buffer; std::unique_ptr<char[]> buffer;
quic::QuicByteCount frame_length = quic::QuicByteCount frame_length =
http_encoder_.SerializeSettingsFrame(settings, &buffer); http_encoder_.SerializeSettingsFrame(settings, &buffer);
...@@ -1333,7 +1329,7 @@ QuicTestPacketMaker::MakeInitialSettingsPacket(uint64_t packet_number) { ...@@ -1333,7 +1329,7 @@ QuicTestPacketMaker::MakeInitialSettingsPacket(uint64_t packet_number) {
if (!quic::VersionHasStreamType(version_.transport_version)) { if (!quic::VersionHasStreamType(version_.transport_version)) {
spdy::SpdySettingsIR settings_frame; spdy::SpdySettingsIR settings_frame;
settings_frame.AddSetting(spdy::SETTINGS_MAX_HEADER_LIST_SIZE, settings_frame.AddSetting(spdy::SETTINGS_MAX_HEADER_LIST_SIZE,
quic::kDefaultMaxUncompressedHeaderSize); kQuicMaxHeaderListSize);
spdy::SpdySerializedFrame spdy_frame( spdy::SpdySerializedFrame spdy_frame(
spdy_request_framer_.SerializeFrame(settings_frame)); spdy_request_framer_.SerializeFrame(settings_frame));
InitializeHeader(packet_number, /*should_include_version*/ true); InitializeHeader(packet_number, /*should_include_version*/ true);
...@@ -1347,8 +1343,7 @@ QuicTestPacketMaker::MakeInitialSettingsPacket(uint64_t packet_number) { ...@@ -1347,8 +1343,7 @@ QuicTestPacketMaker::MakeInitialSettingsPacket(uint64_t packet_number) {
// first. // first.
std::string type(1, 0x00); std::string type(1, 0x00);
quic::SettingsFrame settings; quic::SettingsFrame settings;
settings.values[quic::kSettingsMaxHeaderListSize] = settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
quic::kDefaultMaxUncompressedHeaderSize;
std::unique_ptr<char[]> buffer; std::unique_ptr<char[]> buffer;
quic::QuicByteCount frame_length = quic::QuicByteCount frame_length =
http_encoder_.SerializeSettingsFrame(settings, &buffer); http_encoder_.SerializeSettingsFrame(settings, &buffer);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment