| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 base::TimeDelta::FromMilliseconds(2 * kYieldAfterDurationMilliseconds); | 70 base::TimeDelta::FromMilliseconds(2 * kYieldAfterDurationMilliseconds); |
| 71 return base::TimeTicks::Now() + g_time_delta; | 71 return base::TimeTicks::Now() + g_time_delta; |
| 72 } | 72 } |
| 73 | 73 |
| 74 base::TimeTicks InstantaneousReads() { | 74 base::TimeTicks InstantaneousReads() { |
| 75 return g_time_now; | 75 return g_time_now; |
| 76 } | 76 } |
| 77 | 77 |
| 78 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate { | 78 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate { |
| 79 public: | 79 public: |
| 80 MOCK_METHOD1(IsCTRequiredForHost, | 80 MOCK_METHOD1(IsCTRequiredForHost, CTRequirementLevel(const SpdyString& host)); |
| 81 CTRequirementLevel(const std::string& host)); | |
| 82 }; | 81 }; |
| 83 | 82 |
| 84 } // namespace | 83 } // namespace |
| 85 | 84 |
| 86 class SpdySessionTest : public PlatformTest { | 85 class SpdySessionTest : public PlatformTest { |
| 87 public: | 86 public: |
| 88 // Functions used with RunResumeAfterUnstallTest(). | 87 // Functions used with RunResumeAfterUnstallTest(). |
| 89 | 88 |
| 90 void StallSessionOnly(SpdyStream* stream) { StallSessionSend(); } | 89 void StallSessionOnly(SpdyStream* stream) { StallSessionSend(); } |
| 91 | 90 |
| (...skipping 1906 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1998 int last_accepted_stream_id; | 1997 int last_accepted_stream_id; |
| 1999 ASSERT_TRUE(entry.GetIntegerValue("last_accepted_stream_id", | 1998 ASSERT_TRUE(entry.GetIntegerValue("last_accepted_stream_id", |
| 2000 &last_accepted_stream_id)); | 1999 &last_accepted_stream_id)); |
| 2001 EXPECT_EQ(42, last_accepted_stream_id); | 2000 EXPECT_EQ(42, last_accepted_stream_id); |
| 2002 int active_streams; | 2001 int active_streams; |
| 2003 ASSERT_TRUE(entry.GetIntegerValue("active_streams", &active_streams)); | 2002 ASSERT_TRUE(entry.GetIntegerValue("active_streams", &active_streams)); |
| 2004 EXPECT_EQ(0, active_streams); | 2003 EXPECT_EQ(0, active_streams); |
| 2005 int unclaimed_streams; | 2004 int unclaimed_streams; |
| 2006 ASSERT_TRUE(entry.GetIntegerValue("unclaimed_streams", &unclaimed_streams)); | 2005 ASSERT_TRUE(entry.GetIntegerValue("unclaimed_streams", &unclaimed_streams)); |
| 2007 EXPECT_EQ(0, unclaimed_streams); | 2006 EXPECT_EQ(0, unclaimed_streams); |
| 2008 std::string error_code; | 2007 SpdyString error_code; |
| 2009 ASSERT_TRUE(entry.GetStringValue("error_code", &error_code)); | 2008 ASSERT_TRUE(entry.GetStringValue("error_code", &error_code)); |
| 2010 EXPECT_EQ("11 (ENHANCE_YOUR_CALM)", error_code); | 2009 EXPECT_EQ("11 (ENHANCE_YOUR_CALM)", error_code); |
| 2011 std::string debug_data; | 2010 SpdyString debug_data; |
| 2012 ASSERT_TRUE(entry.GetStringValue("debug_data", &debug_data)); | 2011 ASSERT_TRUE(entry.GetStringValue("debug_data", &debug_data)); |
| 2013 EXPECT_EQ("foo", debug_data); | 2012 EXPECT_EQ("foo", debug_data); |
| 2014 | 2013 |
| 2015 // Check that we logged SPDY_SESSION_CLOSE correctly. | 2014 // Check that we logged SPDY_SESSION_CLOSE correctly. |
| 2016 pos = ExpectLogContainsSomewhere( | 2015 pos = ExpectLogContainsSomewhere( |
| 2017 entries, 0, NetLogEventType::HTTP2_SESSION_CLOSE, NetLogEventPhase::NONE); | 2016 entries, 0, NetLogEventType::HTTP2_SESSION_CLOSE, NetLogEventPhase::NONE); |
| 2018 entry = entries[pos]; | 2017 entry = entries[pos]; |
| 2019 int net_error_code = 0; | 2018 int net_error_code = 0; |
| 2020 ASSERT_TRUE(entry.GetNetErrorCode(&net_error_code)); | 2019 ASSERT_TRUE(entry.GetNetErrorCode(&net_error_code)); |
| 2021 EXPECT_THAT(net_error_code, IsOk()); | 2020 EXPECT_THAT(net_error_code, IsOk()); |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2283 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2282 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 2284 | 2283 |
| 2285 SpdyHeaderBlock headers2(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 2284 SpdyHeaderBlock headers2(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| 2286 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2285 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 2287 | 2286 |
| 2288 // Ensure that the streams have not yet been activated and assigned an id. | 2287 // Ensure that the streams have not yet been activated and assigned an id. |
| 2289 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2288 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2290 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2289 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2291 | 2290 |
| 2292 // Ensure we don't crash while closing the session. | 2291 // Ensure we don't crash while closing the session. |
| 2293 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2292 session_->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
| 2294 | 2293 |
| 2295 EXPECT_FALSE(spdy_stream1); | 2294 EXPECT_FALSE(spdy_stream1); |
| 2296 EXPECT_FALSE(spdy_stream2); | 2295 EXPECT_FALSE(spdy_stream2); |
| 2297 | 2296 |
| 2298 EXPECT_TRUE(delegate1.StreamIsClosed()); | 2297 EXPECT_TRUE(delegate1.StreamIsClosed()); |
| 2299 EXPECT_TRUE(delegate2.StreamIsClosed()); | 2298 EXPECT_TRUE(delegate2.StreamIsClosed()); |
| 2300 | 2299 |
| 2301 base::RunLoop().RunUntilIdle(); | 2300 base::RunLoop().RunUntilIdle(); |
| 2302 EXPECT_FALSE(session_); | 2301 EXPECT_FALSE(session_); |
| 2303 } | 2302 } |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2339 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2338 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 2340 | 2339 |
| 2341 SpdyHeaderBlock headers2(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 2340 SpdyHeaderBlock headers2(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| 2342 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2341 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 2343 | 2342 |
| 2344 // Ensure that the streams have not yet been activated and assigned an id. | 2343 // Ensure that the streams have not yet been activated and assigned an id. |
| 2345 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2344 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2346 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2345 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2347 | 2346 |
| 2348 // Ensure we don't crash while closing the session. | 2347 // Ensure we don't crash while closing the session. |
| 2349 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2348 session_->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
| 2350 | 2349 |
| 2351 EXPECT_FALSE(spdy_stream1); | 2350 EXPECT_FALSE(spdy_stream1); |
| 2352 EXPECT_FALSE(spdy_stream2); | 2351 EXPECT_FALSE(spdy_stream2); |
| 2353 | 2352 |
| 2354 EXPECT_TRUE(delegate1.StreamIsClosed()); | 2353 EXPECT_TRUE(delegate1.StreamIsClosed()); |
| 2355 EXPECT_TRUE(delegate2.StreamIsClosed()); | 2354 EXPECT_TRUE(delegate2.StreamIsClosed()); |
| 2356 | 2355 |
| 2357 base::RunLoop().RunUntilIdle(); | 2356 base::RunLoop().RunUntilIdle(); |
| 2358 EXPECT_FALSE(session_); | 2357 EXPECT_FALSE(session_); |
| 2359 } | 2358 } |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2410 // Ensure that the streams have not yet been activated and assigned an id. | 2409 // Ensure that the streams have not yet been activated and assigned an id. |
| 2411 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2410 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2412 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2411 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2413 | 2412 |
| 2414 base::RunLoop().RunUntilIdle(); | 2413 base::RunLoop().RunUntilIdle(); |
| 2415 | 2414 |
| 2416 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 2415 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
| 2417 EXPECT_EQ(3u, spdy_stream2->stream_id()); | 2416 EXPECT_EQ(3u, spdy_stream2->stream_id()); |
| 2418 | 2417 |
| 2419 // Ensure we don't crash while closing the session. | 2418 // Ensure we don't crash while closing the session. |
| 2420 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2419 session_->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
| 2421 | 2420 |
| 2422 EXPECT_FALSE(spdy_stream1); | 2421 EXPECT_FALSE(spdy_stream1); |
| 2423 EXPECT_FALSE(spdy_stream2); | 2422 EXPECT_FALSE(spdy_stream2); |
| 2424 | 2423 |
| 2425 EXPECT_TRUE(delegate1.StreamIsClosed()); | 2424 EXPECT_TRUE(delegate1.StreamIsClosed()); |
| 2426 EXPECT_TRUE(delegate2.StreamIsClosed()); | 2425 EXPECT_TRUE(delegate2.StreamIsClosed()); |
| 2427 | 2426 |
| 2428 EXPECT_TRUE(session_); | 2427 EXPECT_TRUE(session_); |
| 2429 data.Resume(); | 2428 data.Resume(); |
| 2430 base::RunLoop().RunUntilIdle(); | 2429 base::RunLoop().RunUntilIdle(); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2485 // Ensure that the streams have not yet been activated and assigned an id. | 2484 // Ensure that the streams have not yet been activated and assigned an id. |
| 2486 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2485 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2487 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2486 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2488 | 2487 |
| 2489 base::RunLoop().RunUntilIdle(); | 2488 base::RunLoop().RunUntilIdle(); |
| 2490 | 2489 |
| 2491 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 2490 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
| 2492 EXPECT_EQ(3u, spdy_stream2->stream_id()); | 2491 EXPECT_EQ(3u, spdy_stream2->stream_id()); |
| 2493 | 2492 |
| 2494 // Ensure we don't crash while closing the session. | 2493 // Ensure we don't crash while closing the session. |
| 2495 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2494 session_->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
| 2496 | 2495 |
| 2497 EXPECT_FALSE(spdy_stream1); | 2496 EXPECT_FALSE(spdy_stream1); |
| 2498 EXPECT_FALSE(spdy_stream2); | 2497 EXPECT_FALSE(spdy_stream2); |
| 2499 | 2498 |
| 2500 EXPECT_TRUE(delegate1.StreamIsClosed()); | 2499 EXPECT_TRUE(delegate1.StreamIsClosed()); |
| 2501 EXPECT_TRUE(delegate2.StreamIsClosed()); | 2500 EXPECT_TRUE(delegate2.StreamIsClosed()); |
| 2502 | 2501 |
| 2503 EXPECT_TRUE(session_); | 2502 EXPECT_TRUE(session_); |
| 2504 data.Resume(); | 2503 data.Resume(); |
| 2505 base::RunLoop().RunUntilIdle(); | 2504 base::RunLoop().RunUntilIdle(); |
| (...skipping 882 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3388 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. | 3387 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. |
| 3389 }; | 3388 }; |
| 3390 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); | 3389 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); |
| 3391 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3390 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 3392 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3391 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 3393 | 3392 |
| 3394 AddSSLSocketData(); | 3393 AddSSLSocketData(); |
| 3395 | 3394 |
| 3396 session_deps_.host_resolver->set_synchronous_mode(true); | 3395 session_deps_.host_resolver->set_synchronous_mode(true); |
| 3397 session_deps_.host_resolver->rules()->AddIPLiteralRule( | 3396 session_deps_.host_resolver->rules()->AddIPLiteralRule( |
| 3398 "www.example.org", "192.168.0.2", std::string()); | 3397 "www.example.org", "192.168.0.2", SpdyString()); |
| 3399 session_deps_.host_resolver->rules()->AddIPLiteralRule( | 3398 session_deps_.host_resolver->rules()->AddIPLiteralRule( |
| 3400 "mail.example.org", "192.168.0.2", std::string()); | 3399 "mail.example.org", "192.168.0.2", SpdyString()); |
| 3401 // Not strictly needed. | 3400 // Not strictly needed. |
| 3402 session_deps_.host_resolver->rules()->AddIPLiteralRule( | 3401 session_deps_.host_resolver->rules()->AddIPLiteralRule("3.com", "192.168.0.3", |
| 3403 "3.com", "192.168.0.3", std::string()); | 3402 SpdyString()); |
| 3404 | 3403 |
| 3405 CreateNetworkSession(); | 3404 CreateNetworkSession(); |
| 3406 | 3405 |
| 3407 TransportClientSocketPool* pool = | 3406 TransportClientSocketPool* pool = |
| 3408 http_session_->GetTransportSocketPool( | 3407 http_session_->GetTransportSocketPool( |
| 3409 HttpNetworkSession::NORMAL_SOCKET_POOL); | 3408 HttpNetworkSession::NORMAL_SOCKET_POOL); |
| 3410 | 3409 |
| 3411 // Create an idle SPDY session. | 3410 // Create an idle SPDY session. |
| 3412 SpdySessionKey key1(HostPortPair("www.example.org", 80), | 3411 SpdySessionKey key1(HostPortPair("www.example.org", 80), |
| 3413 ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 3412 ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3564 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 3563 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
| 3565 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 3564 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
| 3566 | 3565 |
| 3567 // Add SpdySession with PrivacyMode Disabled to the pool. | 3566 // Add SpdySession with PrivacyMode Disabled to the pool. |
| 3568 base::WeakPtr<SpdySession> session_privacy_disabled = | 3567 base::WeakPtr<SpdySession> session_privacy_disabled = |
| 3569 CreateFakeSpdySession(spdy_session_pool_, key_privacy_disabled); | 3568 CreateFakeSpdySession(spdy_session_pool_, key_privacy_disabled); |
| 3570 | 3569 |
| 3571 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 3570 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
| 3572 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 3571 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
| 3573 | 3572 |
| 3574 session_privacy_enabled->CloseSessionOnError(ERR_ABORTED, std::string()); | 3573 session_privacy_enabled->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
| 3575 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 3574 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
| 3576 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 3575 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
| 3577 | 3576 |
| 3578 session_privacy_disabled->CloseSessionOnError(ERR_ABORTED, std::string()); | 3577 session_privacy_disabled->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
| 3579 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 3578 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
| 3580 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 3579 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
| 3581 } | 3580 } |
| 3582 | 3581 |
| 3583 // Delegate that creates another stream when its stream is closed. | 3582 // Delegate that creates another stream when its stream is closed. |
| 3584 class StreamCreatingDelegate : public test::StreamDelegateDoNothing { | 3583 class StreamCreatingDelegate : public test::StreamDelegateDoNothing { |
| 3585 public: | 3584 public: |
| 3586 StreamCreatingDelegate(const base::WeakPtr<SpdyStream>& stream, | 3585 StreamCreatingDelegate(const base::WeakPtr<SpdyStream>& stream, |
| 3587 const base::WeakPtr<SpdySession>& session) | 3586 const base::WeakPtr<SpdySession>& session) |
| 3588 : StreamDelegateDoNothing(stream), | 3587 : StreamDelegateDoNothing(stream), |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3878 | 3877 |
| 3879 SpdySerializedFrame req( | 3878 SpdySerializedFrame req( |
| 3880 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3879 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3881 SpdySerializedFrame rst( | 3880 SpdySerializedFrame rst( |
| 3882 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_FLOW_CONTROL_ERROR)); | 3881 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_FLOW_CONTROL_ERROR)); |
| 3883 MockWrite writes[] = { | 3882 MockWrite writes[] = { |
| 3884 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), | 3883 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), |
| 3885 }; | 3884 }; |
| 3886 | 3885 |
| 3887 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 3886 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 3888 const std::string payload(data_frame_size, 'a'); | 3887 const SpdyString payload(data_frame_size, 'a'); |
| 3889 SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame( | 3888 SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame( |
| 3890 1, payload.data(), data_frame_size, false)); | 3889 1, payload.data(), data_frame_size, false)); |
| 3891 MockRead reads[] = { | 3890 MockRead reads[] = { |
| 3892 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), | 3891 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), |
| 3893 CreateMockRead(data_frame, 3), MockRead(ASYNC, ERR_IO_PENDING, 5), | 3892 CreateMockRead(data_frame, 3), MockRead(ASYNC, ERR_IO_PENDING, 5), |
| 3894 MockRead(ASYNC, 0, 6), | 3893 MockRead(ASYNC, 0, 6), |
| 3895 }; | 3894 }; |
| 3896 | 3895 |
| 3897 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3896 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 3898 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3897 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3952 session_deps_.host_resolver->set_synchronous_mode(true); | 3951 session_deps_.host_resolver->set_synchronous_mode(true); |
| 3953 | 3952 |
| 3954 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 3953 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 3955 0, ERROR_CODE_FLOW_CONTROL_ERROR, | 3954 0, ERROR_CODE_FLOW_CONTROL_ERROR, |
| 3956 "delta_window_size is 400 in DecreaseRecvWindowSize, which is larger " | 3955 "delta_window_size is 400 in DecreaseRecvWindowSize, which is larger " |
| 3957 "than the receive window size of 500")); | 3956 "than the receive window size of 500")); |
| 3958 MockWrite writes[] = { | 3957 MockWrite writes[] = { |
| 3959 CreateMockWrite(goaway, 4), | 3958 CreateMockWrite(goaway, 4), |
| 3960 }; | 3959 }; |
| 3961 | 3960 |
| 3962 const std::string first_data_frame(first_data_frame_size, 'a'); | 3961 const SpdyString first_data_frame(first_data_frame_size, 'a'); |
| 3963 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame( | 3962 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame( |
| 3964 1, first_data_frame.data(), first_data_frame_size, false)); | 3963 1, first_data_frame.data(), first_data_frame_size, false)); |
| 3965 const std::string second_data_frame(second_data_frame_size, 'b'); | 3964 const SpdyString second_data_frame(second_data_frame_size, 'b'); |
| 3966 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame( | 3965 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame( |
| 3967 1, second_data_frame.data(), second_data_frame_size, false)); | 3966 1, second_data_frame.data(), second_data_frame_size, false)); |
| 3968 MockRead reads[] = { | 3967 MockRead reads[] = { |
| 3969 CreateMockRead(first, 0), MockRead(ASYNC, ERR_IO_PENDING, 1), | 3968 CreateMockRead(first, 0), MockRead(ASYNC, ERR_IO_PENDING, 1), |
| 3970 CreateMockRead(second, 2), MockRead(ASYNC, 0, 3), | 3969 CreateMockRead(second, 2), MockRead(ASYNC, 0, 3), |
| 3971 }; | 3970 }; |
| 3972 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3971 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 3973 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3972 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 3974 | 3973 |
| 3975 AddSSLSocketData(); | 3974 AddSSLSocketData(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4012 | 4011 |
| 4013 SpdySerializedFrame req( | 4012 SpdySerializedFrame req( |
| 4014 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4013 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 4015 SpdySerializedFrame rst( | 4014 SpdySerializedFrame rst( |
| 4016 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_FLOW_CONTROL_ERROR)); | 4015 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_FLOW_CONTROL_ERROR)); |
| 4017 MockWrite writes[] = { | 4016 MockWrite writes[] = { |
| 4018 CreateMockWrite(req, 0), CreateMockWrite(rst, 6), | 4017 CreateMockWrite(req, 0), CreateMockWrite(rst, 6), |
| 4019 }; | 4018 }; |
| 4020 | 4019 |
| 4021 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4020 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 4022 const std::string first_data_frame(first_data_frame_size, 'a'); | 4021 const SpdyString first_data_frame(first_data_frame_size, 'a'); |
| 4023 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame( | 4022 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame( |
| 4024 1, first_data_frame.data(), first_data_frame_size, false)); | 4023 1, first_data_frame.data(), first_data_frame_size, false)); |
| 4025 const std::string second_data_frame(second_data_frame_size, 'b'); | 4024 const SpdyString second_data_frame(second_data_frame_size, 'b'); |
| 4026 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame( | 4025 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame( |
| 4027 1, second_data_frame.data(), second_data_frame_size, false)); | 4026 1, second_data_frame.data(), second_data_frame_size, false)); |
| 4028 MockRead reads[] = { | 4027 MockRead reads[] = { |
| 4029 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), | 4028 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), |
| 4030 CreateMockRead(first, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), | 4029 CreateMockRead(first, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), |
| 4031 CreateMockRead(second, 5), MockRead(ASYNC, ERR_IO_PENDING, 7), | 4030 CreateMockRead(second, 5), MockRead(ASYNC, ERR_IO_PENDING, 7), |
| 4032 MockRead(ASYNC, 0, 8), | 4031 MockRead(ASYNC, 0, 8), |
| 4033 }; | 4032 }; |
| 4034 | 4033 |
| 4035 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 4034 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 4059 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); | 4058 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); |
| 4060 | 4059 |
| 4061 // First data frame. | 4060 // First data frame. |
| 4062 data.Resume(); | 4061 data.Resume(); |
| 4063 base::RunLoop().RunUntilIdle(); | 4062 base::RunLoop().RunUntilIdle(); |
| 4064 EXPECT_TRUE(spdy_stream->IsLocallyClosed()); | 4063 EXPECT_TRUE(spdy_stream->IsLocallyClosed()); |
| 4065 EXPECT_EQ(stream_max_recv_window_size - first_data_frame_size, | 4064 EXPECT_EQ(stream_max_recv_window_size - first_data_frame_size, |
| 4066 spdy_stream->recv_window_size()); | 4065 spdy_stream->recv_window_size()); |
| 4067 | 4066 |
| 4068 // Consume first data frame. This does not trigger a WINDOW_UPDATE. | 4067 // Consume first data frame. This does not trigger a WINDOW_UPDATE. |
| 4069 std::string received_data = delegate.TakeReceivedData(); | 4068 SpdyString received_data = delegate.TakeReceivedData(); |
| 4070 EXPECT_EQ(static_cast<size_t>(first_data_frame_size), received_data.size()); | 4069 EXPECT_EQ(static_cast<size_t>(first_data_frame_size), received_data.size()); |
| 4071 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); | 4070 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); |
| 4072 | 4071 |
| 4073 // Second data frame overflows receiving window, causes the stream to close. | 4072 // Second data frame overflows receiving window, causes the stream to close. |
| 4074 data.Resume(); | 4073 data.Resume(); |
| 4075 base::RunLoop().RunUntilIdle(); | 4074 base::RunLoop().RunUntilIdle(); |
| 4076 EXPECT_FALSE(spdy_stream.get()); | 4075 EXPECT_FALSE(spdy_stream.get()); |
| 4077 | 4076 |
| 4078 // RST_STREAM | 4077 // RST_STREAM |
| 4079 EXPECT_TRUE(session_); | 4078 EXPECT_TRUE(session_); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 4093 | 4092 |
| 4094 // Drop any received data. | 4093 // Drop any received data. |
| 4095 void OnDataReceived(std::unique_ptr<SpdyBuffer> buffer) override {} | 4094 void OnDataReceived(std::unique_ptr<SpdyBuffer> buffer) override {} |
| 4096 }; | 4095 }; |
| 4097 | 4096 |
| 4098 // Send data back and forth but use a delegate that drops its received | 4097 // Send data back and forth but use a delegate that drops its received |
| 4099 // data. The receive window should still increase to its original | 4098 // data. The receive window should still increase to its original |
| 4100 // value, i.e. we shouldn't "leak" receive window bytes. | 4099 // value, i.e. we shouldn't "leak" receive window bytes. |
| 4101 TEST_F(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { | 4100 TEST_F(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { |
| 4102 const int32_t kMsgDataSize = 100; | 4101 const int32_t kMsgDataSize = 100; |
| 4103 const std::string msg_data(kMsgDataSize, 'a'); | 4102 const SpdyString msg_data(kMsgDataSize, 'a'); |
| 4104 | 4103 |
| 4105 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 4104 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
| 4106 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 4105 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
| 4107 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame( | 4106 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame( |
| 4108 1, msg_data.data(), kMsgDataSize, false)); | 4107 1, msg_data.data(), kMsgDataSize, false)); |
| 4109 MockWrite writes[] = { | 4108 MockWrite writes[] = { |
| 4110 CreateMockWrite(req, 0), CreateMockWrite(msg, 2), | 4109 CreateMockWrite(req, 0), CreateMockWrite(msg, 2), |
| 4111 }; | 4110 }; |
| 4112 | 4111 |
| 4113 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4112 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4164 data.Resume(); | 4163 data.Resume(); |
| 4165 base::RunLoop().RunUntilIdle(); | 4164 base::RunLoop().RunUntilIdle(); |
| 4166 EXPECT_FALSE(session_); | 4165 EXPECT_FALSE(session_); |
| 4167 } | 4166 } |
| 4168 | 4167 |
| 4169 // Send data back and forth but close the stream before its data frame | 4168 // Send data back and forth but close the stream before its data frame |
| 4170 // can be written to the socket. The send window should then increase | 4169 // can be written to the socket. The send window should then increase |
| 4171 // to its original value, i.e. we shouldn't "leak" send window bytes. | 4170 // to its original value, i.e. we shouldn't "leak" send window bytes. |
| 4172 TEST_F(SpdySessionTest, SessionFlowControlNoSendLeaks) { | 4171 TEST_F(SpdySessionTest, SessionFlowControlNoSendLeaks) { |
| 4173 const int32_t kMsgDataSize = 100; | 4172 const int32_t kMsgDataSize = 100; |
| 4174 const std::string msg_data(kMsgDataSize, 'a'); | 4173 const SpdyString msg_data(kMsgDataSize, 'a'); |
| 4175 | 4174 |
| 4176 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 4175 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
| 4177 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 4176 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
| 4178 MockWrite writes[] = { | 4177 MockWrite writes[] = { |
| 4179 CreateMockWrite(req, 0), | 4178 CreateMockWrite(req, 0), |
| 4180 }; | 4179 }; |
| 4181 | 4180 |
| 4182 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4181 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 4183 MockRead reads[] = { | 4182 MockRead reads[] = { |
| 4184 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(resp, 2), | 4183 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(resp, 2), |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4236 EXPECT_FALSE(session_); | 4235 EXPECT_FALSE(session_); |
| 4237 | 4236 |
| 4238 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4237 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 4239 EXPECT_TRUE(data.AllReadDataConsumed()); | 4238 EXPECT_TRUE(data.AllReadDataConsumed()); |
| 4240 } | 4239 } |
| 4241 | 4240 |
| 4242 // Send data back and forth; the send and receive windows should | 4241 // Send data back and forth; the send and receive windows should |
| 4243 // change appropriately. | 4242 // change appropriately. |
| 4244 TEST_F(SpdySessionTest, SessionFlowControlEndToEnd) { | 4243 TEST_F(SpdySessionTest, SessionFlowControlEndToEnd) { |
| 4245 const int32_t kMsgDataSize = 100; | 4244 const int32_t kMsgDataSize = 100; |
| 4246 const std::string msg_data(kMsgDataSize, 'a'); | 4245 const SpdyString msg_data(kMsgDataSize, 'a'); |
| 4247 | 4246 |
| 4248 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 4247 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
| 4249 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 4248 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
| 4250 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame( | 4249 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame( |
| 4251 1, msg_data.data(), kMsgDataSize, false)); | 4250 1, msg_data.data(), kMsgDataSize, false)); |
| 4252 MockWrite writes[] = { | 4251 MockWrite writes[] = { |
| 4253 CreateMockWrite(req, 0), CreateMockWrite(msg, 2), | 4252 CreateMockWrite(req, 0), CreateMockWrite(msg, 2), |
| 4254 }; | 4253 }; |
| 4255 | 4254 |
| 4256 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4255 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4399 EXPECT_TRUE(stream->send_stalled_by_flow_control()); | 4398 EXPECT_TRUE(stream->send_stalled_by_flow_control()); |
| 4400 | 4399 |
| 4401 unstall_function.Run(stream.get(), kBodyDataSize); | 4400 unstall_function.Run(stream.get(), kBodyDataSize); |
| 4402 | 4401 |
| 4403 EXPECT_FALSE(stream->send_stalled_by_flow_control()); | 4402 EXPECT_FALSE(stream->send_stalled_by_flow_control()); |
| 4404 | 4403 |
| 4405 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4404 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
| 4406 | 4405 |
| 4407 EXPECT_TRUE(delegate.send_headers_completed()); | 4406 EXPECT_TRUE(delegate.send_headers_completed()); |
| 4408 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); | 4407 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); |
| 4409 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); | 4408 EXPECT_EQ(SpdyString(), delegate.TakeReceivedData()); |
| 4410 | 4409 |
| 4411 // Run SpdySession::PumpWriteLoop which destroys |session_|. | 4410 // Run SpdySession::PumpWriteLoop which destroys |session_|. |
| 4412 base::RunLoop().RunUntilIdle(); | 4411 base::RunLoop().RunUntilIdle(); |
| 4413 | 4412 |
| 4414 EXPECT_FALSE(session_); | 4413 EXPECT_FALSE(session_); |
| 4415 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4414 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 4416 } | 4415 } |
| 4417 | 4416 |
| 4418 // Run the resume-after-unstall test with all possible stall and | 4417 // Run the resume-after-unstall test with all possible stall and |
| 4419 // unstall sequences. | 4418 // unstall sequences. |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4560 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); | 4559 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); |
| 4561 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); | 4560 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); |
| 4562 | 4561 |
| 4563 base::RunLoop().RunUntilIdle(); | 4562 base::RunLoop().RunUntilIdle(); |
| 4564 | 4563 |
| 4565 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4564 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
| 4566 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4565 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
| 4567 | 4566 |
| 4568 EXPECT_TRUE(delegate1.send_headers_completed()); | 4567 EXPECT_TRUE(delegate1.send_headers_completed()); |
| 4569 EXPECT_EQ("200", delegate1.GetResponseHeaderValue(":status")); | 4568 EXPECT_EQ("200", delegate1.GetResponseHeaderValue(":status")); |
| 4570 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); | 4569 EXPECT_EQ(SpdyString(), delegate1.TakeReceivedData()); |
| 4571 | 4570 |
| 4572 EXPECT_TRUE(delegate2.send_headers_completed()); | 4571 EXPECT_TRUE(delegate2.send_headers_completed()); |
| 4573 EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status")); | 4572 EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status")); |
| 4574 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); | 4573 EXPECT_EQ(SpdyString(), delegate2.TakeReceivedData()); |
| 4575 | 4574 |
| 4576 EXPECT_FALSE(session_); | 4575 EXPECT_FALSE(session_); |
| 4577 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4576 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 4578 EXPECT_TRUE(data.AllReadDataConsumed()); | 4577 EXPECT_TRUE(data.AllReadDataConsumed()); |
| 4579 } | 4578 } |
| 4580 | 4579 |
| 4581 // Delegate that closes a given stream after sending its body. | 4580 // Delegate that closes a given stream after sending its body. |
| 4582 class StreamClosingDelegate : public test::StreamDelegateWithBody { | 4581 class StreamClosingDelegate : public test::StreamDelegateWithBody { |
| 4583 public: | 4582 public: |
| 4584 StreamClosingDelegate(const base::WeakPtr<SpdyStream>& stream, | 4583 StreamClosingDelegate(const base::WeakPtr<SpdyStream>& stream, |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4722 data.Resume(); | 4721 data.Resume(); |
| 4723 base::RunLoop().RunUntilIdle(); | 4722 base::RunLoop().RunUntilIdle(); |
| 4724 EXPECT_FALSE(stream2); | 4723 EXPECT_FALSE(stream2); |
| 4725 EXPECT_FALSE(session_); | 4724 EXPECT_FALSE(session_); |
| 4726 | 4725 |
| 4727 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4726 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
| 4728 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4727 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
| 4729 EXPECT_THAT(delegate3.WaitForClose(), IsOk()); | 4728 EXPECT_THAT(delegate3.WaitForClose(), IsOk()); |
| 4730 | 4729 |
| 4731 EXPECT_TRUE(delegate1.send_headers_completed()); | 4730 EXPECT_TRUE(delegate1.send_headers_completed()); |
| 4732 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); | 4731 EXPECT_EQ(SpdyString(), delegate1.TakeReceivedData()); |
| 4733 | 4732 |
| 4734 EXPECT_TRUE(delegate2.send_headers_completed()); | 4733 EXPECT_TRUE(delegate2.send_headers_completed()); |
| 4735 EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status")); | 4734 EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status")); |
| 4736 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); | 4735 EXPECT_EQ(SpdyString(), delegate2.TakeReceivedData()); |
| 4737 | 4736 |
| 4738 EXPECT_TRUE(delegate3.send_headers_completed()); | 4737 EXPECT_TRUE(delegate3.send_headers_completed()); |
| 4739 EXPECT_EQ(std::string(), delegate3.TakeReceivedData()); | 4738 EXPECT_EQ(SpdyString(), delegate3.TakeReceivedData()); |
| 4740 | 4739 |
| 4741 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4740 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 4742 } | 4741 } |
| 4743 | 4742 |
| 4744 // Cause a stall by reducing the flow control send window to | 4743 // Cause a stall by reducing the flow control send window to |
| 4745 // 0. Unstalling the session should properly handle the session itself | 4744 // 0. Unstalling the session should properly handle the session itself |
| 4746 // being closed. | 4745 // being closed. |
| 4747 TEST_F(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) { | 4746 TEST_F(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) { |
| 4748 session_deps_.host_resolver->set_synchronous_mode(true); | 4747 session_deps_.host_resolver->set_synchronous_mode(true); |
| 4749 | 4748 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4821 data.Resume(); | 4820 data.Resume(); |
| 4822 base::RunLoop().RunUntilIdle(); | 4821 base::RunLoop().RunUntilIdle(); |
| 4823 EXPECT_FALSE(session_); | 4822 EXPECT_FALSE(session_); |
| 4824 | 4823 |
| 4825 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | 4824 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); |
| 4826 | 4825 |
| 4827 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4826 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
| 4828 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4827 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
| 4829 | 4828 |
| 4830 EXPECT_TRUE(delegate1.send_headers_completed()); | 4829 EXPECT_TRUE(delegate1.send_headers_completed()); |
| 4831 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); | 4830 EXPECT_EQ(SpdyString(), delegate1.TakeReceivedData()); |
| 4832 | 4831 |
| 4833 EXPECT_TRUE(delegate2.send_headers_completed()); | 4832 EXPECT_TRUE(delegate2.send_headers_completed()); |
| 4834 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); | 4833 EXPECT_EQ(SpdyString(), delegate2.TakeReceivedData()); |
| 4835 | 4834 |
| 4836 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4835 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 4837 } | 4836 } |
| 4838 | 4837 |
| 4839 TEST_F(SpdySessionTest, GoAwayOnSessionFlowControlError) { | 4838 TEST_F(SpdySessionTest, GoAwayOnSessionFlowControlError) { |
| 4840 SpdySerializedFrame req( | 4839 SpdySerializedFrame req( |
| 4841 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4840 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 4842 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 4841 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 4843 0, ERROR_CODE_FLOW_CONTROL_ERROR, | 4842 0, ERROR_CODE_FLOW_CONTROL_ERROR, |
| 4844 "delta_window_size is 6 in DecreaseRecvWindowSize, which is larger than " | 4843 "delta_window_size is 6 in DecreaseRecvWindowSize, which is larger than " |
| (...skipping 1255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6100 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), | 6099 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), |
| 6101 "spdy_pooling.pem"); | 6100 "spdy_pooling.pem"); |
| 6102 ssl_info.is_issued_by_known_root = true; | 6101 ssl_info.is_issued_by_known_root = true; |
| 6103 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); | 6102 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); |
| 6104 | 6103 |
| 6105 EXPECT_TRUE(SpdySession::CanPool( | 6104 EXPECT_TRUE(SpdySession::CanPool( |
| 6106 &tss, ssl_info, "www.example.org", "mail.example.org")); | 6105 &tss, ssl_info, "www.example.org", "mail.example.org")); |
| 6107 } | 6106 } |
| 6108 | 6107 |
| 6109 } // namespace net | 6108 } // namespace net |
| OLD | NEW |