| 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/quic/chromium/quic_stream_factory.h" | 5 #include "net/quic/chromium/quic_stream_factory.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <ostream> | 8 #include <ostream> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 base::ThreadTaskRunnerHandle::Get())), | 236 base::ThreadTaskRunnerHandle::Get())), |
| 237 cert_transparency_verifier_(new MultiLogCTVerifier()), | 237 cert_transparency_verifier_(new MultiLogCTVerifier()), |
| 238 scoped_mock_network_change_notifier_(nullptr), | 238 scoped_mock_network_change_notifier_(nullptr), |
| 239 factory_(nullptr), | 239 factory_(nullptr), |
| 240 host_port_pair_(kDefaultServerHostName, kDefaultServerPort), | 240 host_port_pair_(kDefaultServerHostName, kDefaultServerPort), |
| 241 url_(kDefaultUrl), | 241 url_(kDefaultUrl), |
| 242 url2_(kServer2Url), | 242 url2_(kServer2Url), |
| 243 url3_(kServer3Url), | 243 url3_(kServer3Url), |
| 244 url4_(kServer4Url), | 244 url4_(kServer4Url), |
| 245 privacy_mode_(PRIVACY_MODE_DISABLED), | 245 privacy_mode_(PRIVACY_MODE_DISABLED), |
| 246 enable_port_selection_(true), | |
| 247 always_require_handshake_confirmation_(false), | 246 always_require_handshake_confirmation_(false), |
| 248 disable_connection_pooling_(false), | 247 disable_connection_pooling_(false), |
| 249 load_server_info_timeout_srtt_multiplier_(0.0f), | 248 load_server_info_timeout_srtt_multiplier_(0.0f), |
| 250 enable_connection_racing_(enable_connection_racing), | 249 enable_connection_racing_(enable_connection_racing), |
| 251 enable_non_blocking_io_(true), | 250 enable_non_blocking_io_(true), |
| 252 disable_disk_cache_(false), | 251 disable_disk_cache_(false), |
| 253 prefer_aes_(false), | 252 prefer_aes_(false), |
| 254 receive_buffer_size_(0), | 253 receive_buffer_size_(0), |
| 255 delay_tcp_race_(true), | 254 delay_tcp_race_(true), |
| 256 close_sessions_on_ip_change_(false), | 255 close_sessions_on_ip_change_(false), |
| (...skipping 20 matching lines...) Expand all Loading... |
| 277 void Initialize() { | 276 void Initialize() { |
| 278 DCHECK(!factory_); | 277 DCHECK(!factory_); |
| 279 factory_.reset(new QuicStreamFactory( | 278 factory_.reset(new QuicStreamFactory( |
| 280 net_log_.net_log(), &host_resolver_, ssl_config_service_.get(), | 279 net_log_.net_log(), &host_resolver_, ssl_config_service_.get(), |
| 281 &socket_factory_, &http_server_properties_, &test_proxy_delegate_, | 280 &socket_factory_, &http_server_properties_, &test_proxy_delegate_, |
| 282 cert_verifier_.get(), &ct_policy_enforcer_, channel_id_service_.get(), | 281 cert_verifier_.get(), &ct_policy_enforcer_, channel_id_service_.get(), |
| 283 &transport_security_state_, cert_transparency_verifier_.get(), | 282 &transport_security_state_, cert_transparency_verifier_.get(), |
| 284 /*SocketPerformanceWatcherFactory*/ nullptr, | 283 /*SocketPerformanceWatcherFactory*/ nullptr, |
| 285 &crypto_client_stream_factory_, &random_generator_, clock_, | 284 &crypto_client_stream_factory_, &random_generator_, clock_, |
| 286 kDefaultMaxPacketSize, string(), SupportedVersions(version_), | 285 kDefaultMaxPacketSize, string(), SupportedVersions(version_), |
| 287 enable_port_selection_, always_require_handshake_confirmation_, | 286 always_require_handshake_confirmation_, disable_connection_pooling_, |
| 288 disable_connection_pooling_, load_server_info_timeout_srtt_multiplier_, | 287 load_server_info_timeout_srtt_multiplier_, enable_connection_racing_, |
| 289 enable_connection_racing_, enable_non_blocking_io_, disable_disk_cache_, | 288 enable_non_blocking_io_, disable_disk_cache_, prefer_aes_, |
| 290 prefer_aes_, receive_buffer_size_, delay_tcp_race_, | 289 receive_buffer_size_, delay_tcp_race_, |
| 291 /*max_server_configs_stored_in_properties*/ 0, | 290 /*max_server_configs_stored_in_properties*/ 0, |
| 292 close_sessions_on_ip_change_, | 291 close_sessions_on_ip_change_, |
| 293 disable_quic_on_timeout_with_open_streams_, | 292 disable_quic_on_timeout_with_open_streams_, |
| 294 idle_connection_timeout_seconds_, reduced_ping_timeout_seconds_, | 293 idle_connection_timeout_seconds_, reduced_ping_timeout_seconds_, |
| 295 packet_reader_yield_after_duration_milliseconds_, | 294 packet_reader_yield_after_duration_milliseconds_, |
| 296 migrate_sessions_on_network_change_, migrate_sessions_early_, | 295 migrate_sessions_on_network_change_, migrate_sessions_early_, |
| 297 allow_server_migration_, force_hol_blocking_, race_cert_verification_, | 296 allow_server_migration_, force_hol_blocking_, race_cert_verification_, |
| 298 /*do_not_fragment*/ true, QuicTagVector(), | 297 /*do_not_fragment*/ true, QuicTagVector(), |
| 299 /*enable_token_binding*/ false)); | 298 /*enable_token_binding*/ false)); |
| 300 factory_->set_require_confirmation(false); | 299 factory_->set_require_confirmation(false); |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 GURL url_; | 727 GURL url_; |
| 729 GURL url2_; | 728 GURL url2_; |
| 730 GURL url3_; | 729 GURL url3_; |
| 731 GURL url4_; | 730 GURL url4_; |
| 732 | 731 |
| 733 PrivacyMode privacy_mode_; | 732 PrivacyMode privacy_mode_; |
| 734 NetLogWithSource net_log_; | 733 NetLogWithSource net_log_; |
| 735 TestCompletionCallback callback_; | 734 TestCompletionCallback callback_; |
| 736 | 735 |
| 737 // Variables to configure QuicStreamFactory. | 736 // Variables to configure QuicStreamFactory. |
| 738 bool enable_port_selection_; | |
| 739 bool always_require_handshake_confirmation_; | 737 bool always_require_handshake_confirmation_; |
| 740 bool disable_connection_pooling_; | 738 bool disable_connection_pooling_; |
| 741 double load_server_info_timeout_srtt_multiplier_; | 739 double load_server_info_timeout_srtt_multiplier_; |
| 742 bool enable_connection_racing_; | 740 bool enable_connection_racing_; |
| 743 bool enable_non_blocking_io_; | 741 bool enable_non_blocking_io_; |
| 744 bool disable_disk_cache_; | 742 bool disable_disk_cache_; |
| 745 bool prefer_aes_; | 743 bool prefer_aes_; |
| 746 int receive_buffer_size_; | 744 int receive_buffer_size_; |
| 747 bool delay_tcp_race_; | 745 bool delay_tcp_race_; |
| 748 bool close_sessions_on_ip_change_; | 746 bool close_sessions_on_ip_change_; |
| (...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1506 base::RunLoop().RunUntilIdle(); | 1504 base::RunLoop().RunUntilIdle(); |
| 1507 | 1505 |
| 1508 std::unique_ptr<QuicHttpStream> stream(CreateFromSession(host_port_pair_)); | 1506 std::unique_ptr<QuicHttpStream> stream(CreateFromSession(host_port_pair_)); |
| 1509 EXPECT_TRUE(stream.get()); | 1507 EXPECT_TRUE(stream.get()); |
| 1510 stream.reset(); | 1508 stream.reset(); |
| 1511 | 1509 |
| 1512 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1510 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 1513 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1511 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 1514 } | 1512 } |
| 1515 | 1513 |
| 1516 TEST_P(QuicStreamFactoryTest, CreateConsistentEphemeralPort) { | |
| 1517 Initialize(); | |
| 1518 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | |
| 1519 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 1520 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 1521 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 1522 | |
| 1523 // Sequentially connect to the default host, then another host, and then the | |
| 1524 // default host. Verify that the default host gets a consistent ephemeral | |
| 1525 // port, that is different from the other host's connection. | |
| 1526 | |
| 1527 string other_server_name = kServer2HostName; | |
| 1528 EXPECT_NE(kDefaultServerHostName, other_server_name); | |
| 1529 HostPortPair host_port_pair2(other_server_name, kDefaultServerPort); | |
| 1530 | |
| 1531 int original_port = GetSourcePortForNewSession(host_port_pair_); | |
| 1532 EXPECT_NE(original_port, GetSourcePortForNewSession(host_port_pair2)); | |
| 1533 EXPECT_EQ(original_port, GetSourcePortForNewSession(host_port_pair_)); | |
| 1534 } | |
| 1535 | |
| 1536 TEST_P(QuicStreamFactoryTest, GoAwayDisablesConsistentEphemeralPort) { | |
| 1537 Initialize(); | |
| 1538 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | |
| 1539 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 1540 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 1541 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 1542 | |
| 1543 // Get a session to the host using the port suggester. | |
| 1544 int original_port = GetSourcePortForNewSessionAndGoAway(host_port_pair_); | |
| 1545 // Verify that the port is different after the goaway. | |
| 1546 EXPECT_NE(original_port, GetSourcePortForNewSession(host_port_pair_)); | |
| 1547 // Since the previous session did not goaway we should see the original port. | |
| 1548 EXPECT_EQ(original_port, GetSourcePortForNewSession(host_port_pair_)); | |
| 1549 } | |
| 1550 | |
| 1551 TEST_P(QuicStreamFactoryTest, CloseAllSessions) { | 1514 TEST_P(QuicStreamFactoryTest, CloseAllSessions) { |
| 1552 Initialize(); | 1515 Initialize(); |
| 1553 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 1516 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 1554 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1517 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 1555 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1518 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 1556 | 1519 |
| 1557 MockQuicData socket_data; | 1520 MockQuicData socket_data; |
| 1558 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | 1521 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
| 1559 socket_data.AddWrite(ConstructClientRstPacket()); | 1522 socket_data.AddWrite(ConstructClientRstPacket()); |
| 1560 socket_data.AddSocketDataToFactory(&socket_factory_); | 1523 socket_data.AddSocketDataToFactory(&socket_factory_); |
| (...skipping 3699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5260 // Clear all cached states. | 5223 // Clear all cached states. |
| 5261 factory_->ClearCachedStatesInCryptoConfig( | 5224 factory_->ClearCachedStatesInCryptoConfig( |
| 5262 base::Callback<bool(const GURL&)>()); | 5225 base::Callback<bool(const GURL&)>()); |
| 5263 EXPECT_TRUE(test_cases[0].state->certs().empty()); | 5226 EXPECT_TRUE(test_cases[0].state->certs().empty()); |
| 5264 EXPECT_TRUE(test_cases[1].state->certs().empty()); | 5227 EXPECT_TRUE(test_cases[1].state->certs().empty()); |
| 5265 EXPECT_TRUE(test_cases[2].state->certs().empty()); | 5228 EXPECT_TRUE(test_cases[2].state->certs().empty()); |
| 5266 } | 5229 } |
| 5267 | 5230 |
| 5268 } // namespace test | 5231 } // namespace test |
| 5269 } // namespace net | 5232 } // namespace net |
| OLD | NEW |