Index: net/spdy/spdy_session_unittest.cc |
diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc |
index 12b8c01ccf5c41032386f3ba0958193cf30272c5..4d10961ff1df05bc1209589112a97b0b86be80f3 100644 |
--- a/net/spdy/spdy_session_unittest.cc |
+++ b/net/spdy/spdy_session_unittest.cc |
@@ -1881,39 +1881,6 @@ TEST_F(SpdySessionTest, CancelPendingCreateStream) { |
base::RunLoop().RunUntilIdle(); |
} |
-TEST_F(SpdySessionTest, SendInitialDataOnNewSession) { |
- session_deps_.host_resolver->set_synchronous_mode(true); |
- |
- MockRead reads[] = { |
- MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. |
- }; |
- |
- SettingsMap settings; |
- settings[SETTINGS_HEADER_TABLE_SIZE] = kMaxHeaderTableSize; |
- settings[SETTINGS_MAX_CONCURRENT_STREAMS] = kMaxConcurrentPushedStreams; |
- SpdySerializedFrame settings_frame( |
- spdy_util_.ConstructSpdySettings(settings)); |
- MockWrite writes[] = {MockWrite(ASYNC, kHttp2ConnectionHeaderPrefix, |
- kHttp2ConnectionHeaderPrefixSize), |
- CreateMockWrite(settings_frame)}; |
- |
- StaticSocketDataProvider data(reads, arraysize(reads), writes, |
- arraysize(writes)); |
- session_deps_.socket_factory->AddSocketDataProvider(&data); |
- |
- AddSSLSocketData(); |
- |
- CreateNetworkSession(); |
- |
- SpdySessionPoolPeer pool_peer(spdy_session_pool_); |
- pool_peer.SetEnableSendingInitialData(true); |
- |
- CreateSecureSpdySession(); |
- |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_TRUE(data.AllWriteDataConsumed()); |
-} |
- |
TEST_F(SpdySessionTest, Initialize) { |
session_deps_.host_resolver->set_synchronous_mode(true); |
@@ -3887,7 +3854,8 @@ TEST_F(SpdySessionTest, StreamFlowControlTooMuchData) { |
AddSSLSocketData(); |
- session_deps_.stream_max_recv_window_size = stream_max_recv_window_size; |
+ session_deps_.http2_settings[SETTINGS_INITIAL_WINDOW_SIZE] = |
+ stream_max_recv_window_size; |
CreateNetworkSession(); |
CreateSecureSpdySession(); |
@@ -4024,7 +3992,8 @@ TEST_F(SpdySessionTest, StreamFlowControlTooMuchDataTwoDataFrames) { |
AddSSLSocketData(); |
- session_deps_.stream_max_recv_window_size = stream_max_recv_window_size; |
+ session_deps_.http2_settings[SETTINGS_INITIAL_WINDOW_SIZE] = |
+ stream_max_recv_window_size; |
CreateNetworkSession(); |
CreateSecureSpdySession(); |
@@ -5391,6 +5360,92 @@ TEST_F(SpdySessionTest, RejectInvalidUnknownFrames) { |
EXPECT_FALSE(session_->OnUnknownFrame(8, 0)); |
} |
+class SendInitialSettingsOnNewSpdySessionTest : public SpdySessionTest { |
+ protected: |
+ void RunInitialSettingsTest(const SettingsMap expected_settings) { |
+ session_deps_.host_resolver->set_synchronous_mode(true); |
+ |
+ MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING)}; |
+ |
+ SpdySerializedFrame settings_frame( |
+ spdy_util_.ConstructSpdySettings(expected_settings)); |
+ MockWrite writes[] = {MockWrite(ASYNC, kHttp2ConnectionHeaderPrefix, |
+ kHttp2ConnectionHeaderPrefixSize), |
+ CreateMockWrite(settings_frame)}; |
+ |
+ StaticSocketDataProvider data(reads, arraysize(reads), writes, |
+ arraysize(writes)); |
+ session_deps_.socket_factory->AddSocketDataProvider(&data); |
+ AddSSLSocketData(); |
+ |
+ CreateNetworkSession(); |
+ |
+ SpdySessionPoolPeer pool_peer(spdy_session_pool_); |
+ pool_peer.SetEnableSendingInitialData(true); |
+ |
+ CreateSecureSpdySession(); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_TRUE(data.AllWriteDataConsumed()); |
+ } |
+}; |
+ |
+// Setting values when Params::http2_settings is empty. Note that |
+// SETTINGS_INITIAL_WINDOW_SIZE is sent in production, because it is set to a |
+// non-default value, but it is not sent in tests, because the protocol default |
+// value is used in tests. |
+TEST_F(SendInitialSettingsOnNewSpdySessionTest, Empty) { |
+ SettingsMap expected_settings; |
+ expected_settings[SETTINGS_HEADER_TABLE_SIZE] = kSpdyMaxHeaderTableSize; |
+ expected_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = |
+ kSpdyMaxConcurrentPushedStreams; |
+ RunInitialSettingsTest(expected_settings); |
+} |
+ |
+// When a setting is set to the protocol default value, |
+// no corresponding value is sent on the wire. |
+TEST_F(SendInitialSettingsOnNewSpdySessionTest, ProtocolDefault) { |
+ // Explicitly set protocol default values for the following settings. |
+ session_deps_.http2_settings[SETTINGS_HEADER_TABLE_SIZE] = 4096; |
+ session_deps_.http2_settings[SETTINGS_ENABLE_PUSH] = 1; |
+ session_deps_.http2_settings[SETTINGS_INITIAL_WINDOW_SIZE] = 64 * 1024 - 1; |
+ |
+ SettingsMap expected_settings; |
+ expected_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = |
+ kSpdyMaxConcurrentPushedStreams; |
+ RunInitialSettingsTest(expected_settings); |
+} |
+ |
+// Values set in Params::http2_settings overwrite Chromium's default values. |
+TEST_F(SendInitialSettingsOnNewSpdySessionTest, OverwriteValues) { |
+ session_deps_.http2_settings[SETTINGS_HEADER_TABLE_SIZE] = 16 * 1024; |
+ session_deps_.http2_settings[SETTINGS_ENABLE_PUSH] = 0; |
+ session_deps_.http2_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 42; |
+ session_deps_.http2_settings[SETTINGS_INITIAL_WINDOW_SIZE] = 32 * 1024; |
+ |
+ SettingsMap expected_settings; |
+ expected_settings[SETTINGS_HEADER_TABLE_SIZE] = 16 * 1024; |
+ expected_settings[SETTINGS_ENABLE_PUSH] = 0; |
+ expected_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 42; |
+ expected_settings[SETTINGS_INITIAL_WINDOW_SIZE] = 32 * 1024; |
+ RunInitialSettingsTest(expected_settings); |
+} |
+ |
+// Unknown parameters should still be sent to the server. |
+TEST_F(SendInitialSettingsOnNewSpdySessionTest, UnknownSettings) { |
+ // The following parameters are not defined in the HTTP/2 specification. |
+ session_deps_.http2_settings[static_cast<SpdySettingsIds>(7)] = 1234; |
+ session_deps_.http2_settings[static_cast<SpdySettingsIds>(25)] = 5678; |
+ |
+ SettingsMap expected_settings; |
+ expected_settings[SETTINGS_HEADER_TABLE_SIZE] = kSpdyMaxHeaderTableSize; |
+ expected_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = |
+ kSpdyMaxConcurrentPushedStreams; |
+ expected_settings[static_cast<SpdySettingsIds>(7)] = 1234; |
+ expected_settings[static_cast<SpdySettingsIds>(25)] = 5678; |
+ RunInitialSettingsTest(expected_settings); |
+} |
+ |
class AltSvcFrameTest : public SpdySessionTest { |
public: |
AltSvcFrameTest() |