Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: net/spdy/spdy_session_unittest.cc

Issue 2801603003: Add SpdyString alias for std::string in net/spdy. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/spdy/spdy_session_test_util.cc ('k') | net/spdy/spdy_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_test_util.cc ('k') | net/spdy/spdy_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698