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

Process incoming SETTINGS_HEADER_TABLE_SIZE.

Bug: 1115492
Change-Id: Ia6c923cfb55ea4e53054c603b6aa82eb58bde364
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2354457Reviewed-by: default avatarRenjie Tang <renjietang@chromium.org>
Commit-Queue: Bence Béky <bnc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800973}
parent 2dcc6f8f
......@@ -317,6 +317,14 @@ std::unique_ptr<spdy::SpdySerializedFrame> BufferedSpdyFramer::CreatePriority(
spdy_framer_.SerializePriority(priority_ir));
}
void BufferedSpdyFramer::UpdateHeaderEncoderTableSize(uint32_t value) {
spdy_framer_.UpdateHeaderEncoderTableSize(value);
}
uint32_t BufferedSpdyFramer::header_encoder_table_size() const {
return spdy_framer_.header_encoder_table_size();
}
size_t BufferedSpdyFramer::EstimateMemoryUsage() const {
return base::trace_event::EstimateMemoryUsage(spdy_framer_) +
base::trace_event::EstimateMemoryUsage(deframer_) +
......
......@@ -232,6 +232,11 @@ class NET_EXPORT_PRIVATE BufferedSpdyFramer
int frames_received() const { return frames_received_; }
// Updates the maximum size of the header encoder compression table.
void UpdateHeaderEncoderTableSize(uint32_t value);
// Returns the maximum size of the header encoder compression table.
uint32_t header_encoder_table_size() const;
// Returns the estimate of dynamically allocated memory in bytes.
size_t EstimateMemoryUsage() const;
......
......@@ -2621,6 +2621,9 @@ void SpdySession::SendInitialData() {
void SpdySession::HandleSetting(uint32_t id, uint32_t value) {
switch (id) {
case spdy::SETTINGS_HEADER_TABLE_SIZE:
buffered_spdy_framer_->UpdateHeaderEncoderTableSize(value);
break;
case spdy::SETTINGS_MAX_CONCURRENT_STREAMS:
max_concurrent_streams_ =
std::min(static_cast<size_t>(value), kMaxConcurrentStreamLimit);
......
......@@ -364,6 +364,10 @@ class SpdySessionTest : public PlatformTest, public WithTaskEnvironment {
url, session_.get()) != kNoPushedStreamFound;
}
uint32_t header_encoder_table_size() const {
return session_->buffered_spdy_framer_->header_encoder_table_size();
}
RecordingBoundTestNetLog log_;
// Original socket limits. Some tests set these. Safest to always restore
......@@ -7210,4 +7214,35 @@ TEST(RecordPushedStreamHistogramTest, VaryResponseHeader) {
}
}
// Regression test for https://crbug.com/1115492.
TEST_F(SpdySessionTest, UpdateHeaderTableSize) {
spdy::SettingsMap settings;
settings[spdy::SETTINGS_HEADER_TABLE_SIZE] = 12345;
spdy::SpdySerializedFrame settings_frame(
spdy_util_.ConstructSpdySettings(settings));
MockRead reads[] = {CreateMockRead(settings_frame, 0),
MockRead(ASYNC, ERR_IO_PENDING, 2),
MockRead(ASYNC, 0, 3)};
spdy::SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck());
MockWrite writes[] = {CreateMockWrite(settings_ack, 1)};
SequencedSocketData data(reads, writes);
session_deps_.socket_factory->AddSocketDataProvider(&data);
AddSSLSocketData();
CreateNetworkSession();
CreateSpdySession();
EXPECT_EQ(spdy::kDefaultHeaderTableSizeSetting, header_encoder_table_size());
base::RunLoop().RunUntilIdle();
EXPECT_EQ(12345u, header_encoder_table_size());
data.Resume();
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(data.AllWriteDataConsumed());
EXPECT_TRUE(data.AllReadDataConsumed());
}
} // namespace net
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