| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 params_.quic_clock = clock_; | 235 params_.quic_clock = clock_; |
| 236 params_.quic_random = &random_generator_; | 236 params_.quic_random = &random_generator_; |
| 237 params_.client_socket_factory = socket_factory; | 237 params_.client_socket_factory = socket_factory; |
| 238 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; | 238 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; |
| 239 params_.host_resolver = &host_resolver_; | 239 params_.host_resolver = &host_resolver_; |
| 240 params_.cert_verifier = &cert_verifier_; | 240 params_.cert_verifier = &cert_verifier_; |
| 241 params_.transport_security_state = &transport_security_state_; | 241 params_.transport_security_state = &transport_security_state_; |
| 242 params_.proxy_service = proxy_service_.get(); | 242 params_.proxy_service = proxy_service_.get(); |
| 243 params_.ssl_config_service = ssl_config_service_.get(); | 243 params_.ssl_config_service = ssl_config_service_.get(); |
| 244 params_.http_auth_handler_factory = auth_handler_factory_.get(); | 244 params_.http_auth_handler_factory = auth_handler_factory_.get(); |
| 245 params_.http_server_properties = http_server_properties.GetWeakPtr(); | 245 params_.http_server_properties = http_server_properties_.GetWeakPtr(); |
| 246 params_.quic_supported_versions = SupportedVersions(GetParam()); | 246 params_.quic_supported_versions = SupportedVersions(GetParam()); |
| 247 | 247 |
| 248 if (use_next_protos) { | 248 if (use_next_protos) { |
| 249 params_.use_alternate_protocols = true; | 249 params_.use_alternate_protocols = true; |
| 250 params_.next_protos = NextProtosWithSpdyAndQuic(true, true); | 250 params_.next_protos = NextProtosWithSpdyAndQuic(true, true); |
| 251 } | 251 } |
| 252 | 252 |
| 253 session_ = new HttpNetworkSession(params_); | 253 session_ = new HttpNetworkSession(params_); |
| 254 session_->quic_stream_factory()->set_require_confirmation(false); | 254 session_->quic_stream_factory()->set_require_confirmation(false); |
| 255 } | 255 } |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 const std::string& expected, | 318 const std::string& expected, |
| 319 uint16 port) { | 319 uint16 port) { |
| 320 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, true, port); | 320 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, true, port); |
| 321 } | 321 } |
| 322 | 322 |
| 323 void AddQuicAlternateProtocolMapping( | 323 void AddQuicAlternateProtocolMapping( |
| 324 MockCryptoClientStream::HandshakeMode handshake_mode) { | 324 MockCryptoClientStream::HandshakeMode handshake_mode) { |
| 325 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); | 325 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); |
| 326 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); | 326 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); |
| 327 AlternativeService alternative_service(QUIC, host_port_pair.host(), 80); | 327 AlternativeService alternative_service(QUIC, host_port_pair.host(), 80); |
| 328 session_->http_server_properties()->SetAlternativeService( | 328 http_server_properties_.SetAlternativeService(host_port_pair, |
| 329 host_port_pair, alternative_service, 1.0); | 329 alternative_service, 1.0); |
| 330 } | 330 } |
| 331 | 331 |
| 332 void ExpectBrokenAlternateProtocolMapping() { | 332 void ExpectBrokenAlternateProtocolMapping() { |
| 333 const HostPortPair origin = HostPortPair::FromURL(request_.url); | 333 const HostPortPair origin = HostPortPair::FromURL(request_.url); |
| 334 const AlternativeService alternative_service = | 334 const AlternativeService alternative_service = |
| 335 session_->http_server_properties()->GetAlternativeService(origin); | 335 http_server_properties_.GetAlternativeService(origin); |
| 336 EXPECT_NE(UNINITIALIZED_ALTERNATE_PROTOCOL, alternative_service.protocol); | 336 EXPECT_NE(UNINITIALIZED_ALTERNATE_PROTOCOL, alternative_service.protocol); |
| 337 EXPECT_TRUE(session_->http_server_properties()->IsAlternativeServiceBroken( | 337 EXPECT_TRUE(http_server_properties_.IsAlternativeServiceBroken( |
| 338 alternative_service)); | 338 alternative_service)); |
| 339 } | 339 } |
| 340 | 340 |
| 341 void ExpectQuicAlternateProtocolMapping() { | 341 void ExpectQuicAlternateProtocolMapping() { |
| 342 const AlternativeService alternative_service = | 342 const AlternativeService alternative_service = |
| 343 session_->http_server_properties()->GetAlternativeService( | 343 http_server_properties_.GetAlternativeService( |
| 344 HostPortPair::FromURL(request_.url)); | 344 HostPortPair::FromURL(request_.url)); |
| 345 EXPECT_EQ(QUIC, alternative_service.protocol); | 345 EXPECT_EQ(QUIC, alternative_service.protocol); |
| 346 } | 346 } |
| 347 | 347 |
| 348 void AddHangingNonAlternateProtocolSocketData() { | 348 void AddHangingNonAlternateProtocolSocketData() { |
| 349 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING); | 349 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| 350 hanging_data_.set_connect_data(hanging_connect); | 350 hanging_data_.set_connect_data(hanging_connect); |
| 351 socket_factory_.AddSocketDataProvider(&hanging_data_); | 351 socket_factory_.AddSocketDataProvider(&hanging_data_); |
| 352 } | 352 } |
| 353 | 353 |
| 354 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. | 354 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. |
| 355 QuicTestPacketMaker maker_; | 355 QuicTestPacketMaker maker_; |
| 356 scoped_refptr<HttpNetworkSession> session_; | 356 scoped_refptr<HttpNetworkSession> session_; |
| 357 MockClientSocketFactory socket_factory_; | 357 MockClientSocketFactory socket_factory_; |
| 358 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 358 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
| 359 MockHostResolver host_resolver_; | 359 MockHostResolver host_resolver_; |
| 360 MockCertVerifier cert_verifier_; | 360 MockCertVerifier cert_verifier_; |
| 361 TransportSecurityState transport_security_state_; | 361 TransportSecurityState transport_security_state_; |
| 362 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; | 362 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; |
| 363 scoped_ptr<ProxyService> proxy_service_; | 363 scoped_ptr<ProxyService> proxy_service_; |
| 364 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; | 364 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; |
| 365 MockRandom random_generator_; | 365 MockRandom random_generator_; |
| 366 HttpServerPropertiesImpl http_server_properties; | 366 HttpServerPropertiesImpl http_server_properties_; |
| 367 HttpNetworkSession::Params params_; | 367 HttpNetworkSession::Params params_; |
| 368 HttpRequestInfo request_; | 368 HttpRequestInfo request_; |
| 369 BoundTestNetLog net_log_; | 369 BoundTestNetLog net_log_; |
| 370 StaticSocketDataProvider hanging_data_; | 370 StaticSocketDataProvider hanging_data_; |
| 371 | 371 |
| 372 private: | 372 private: |
| 373 void SendRequestAndExpectQuicResponseMaybeFromProxy( | 373 void SendRequestAndExpectQuicResponseMaybeFromProxy( |
| 374 const std::string& expected, | 374 const std::string& expected, |
| 375 bool used_proxy, | 375 bool used_proxy, |
| 376 uint16 port) { | 376 uint16 port) { |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 616 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 617 | 617 |
| 618 // The non-alternate protocol job needs to hang in order to guarantee that | 618 // The non-alternate protocol job needs to hang in order to guarantee that |
| 619 // the alternate-protocol job will "win". | 619 // the alternate-protocol job will "win". |
| 620 AddHangingNonAlternateProtocolSocketData(); | 620 AddHangingNonAlternateProtocolSocketData(); |
| 621 | 621 |
| 622 CreateSessionWithNextProtos(); | 622 CreateSessionWithNextProtos(); |
| 623 | 623 |
| 624 AlternativeService alternative_service(QUIC, | 624 AlternativeService alternative_service(QUIC, |
| 625 HostPortPair::FromURL(request_.url)); | 625 HostPortPair::FromURL(request_.url)); |
| 626 session_->http_server_properties()->MarkAlternativeServiceRecentlyBroken( | 626 http_server_properties_.MarkAlternativeServiceRecentlyBroken( |
| 627 alternative_service); | 627 alternative_service); |
| 628 EXPECT_TRUE( | 628 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( |
| 629 session_->http_server_properties()->WasAlternativeServiceRecentlyBroken( | 629 alternative_service)); |
| 630 alternative_service)); | |
| 631 | 630 |
| 632 SendRequestAndExpectHttpResponse("hello world"); | 631 SendRequestAndExpectHttpResponse("hello world"); |
| 633 SendRequestAndExpectQuicResponse("hello!"); | 632 SendRequestAndExpectQuicResponse("hello!"); |
| 634 | 633 |
| 635 EXPECT_FALSE( | 634 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken( |
| 636 session_->http_server_properties()->WasAlternativeServiceRecentlyBroken( | 635 alternative_service)); |
| 637 alternative_service)); | |
| 638 } | 636 } |
| 639 | 637 |
| 640 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) { | 638 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) { |
| 641 MockRead http_reads[] = { | 639 MockRead http_reads[] = { |
| 642 MockRead("HTTP/1.1 200 OK\r\n"), | 640 MockRead("HTTP/1.1 200 OK\r\n"), |
| 643 MockRead(kQuicAlternateProtocol50pctHttpHeader), | 641 MockRead(kQuicAlternateProtocol50pctHttpHeader), |
| 644 MockRead("hello world"), | 642 MockRead("hello world"), |
| 645 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 643 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 646 MockRead(ASYNC, OK) | 644 MockRead(ASYNC, OK) |
| 647 }; | 645 }; |
| (...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1260 | 1258 |
| 1261 request_.url = GURL("https://www.example.org:443"); | 1259 request_.url = GURL("https://www.example.org:443"); |
| 1262 AddHangingNonAlternateProtocolSocketData(); | 1260 AddHangingNonAlternateProtocolSocketData(); |
| 1263 CreateSessionWithNextProtos(); | 1261 CreateSessionWithNextProtos(); |
| 1264 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 1262 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 1265 SendRequestAndExpectQuicResponse("hello!"); | 1263 SendRequestAndExpectQuicResponse("hello!"); |
| 1266 } | 1264 } |
| 1267 | 1265 |
| 1268 } // namespace test | 1266 } // namespace test |
| 1269 } // namespace net | 1267 } // namespace net |
| OLD | NEW |