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 |