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" |
| 11 #include "net/base/network_quality_estimator.h" |
| 12 #include "net/base/socket_performance_watcher.h" |
11 #include "net/base/test_completion_callback.h" | 13 #include "net/base/test_completion_callback.h" |
12 #include "net/base/test_data_directory.h" | 14 #include "net/base/test_data_directory.h" |
13 #include "net/cert/mock_cert_verifier.h" | 15 #include "net/cert/mock_cert_verifier.h" |
14 #include "net/dns/mock_host_resolver.h" | 16 #include "net/dns/mock_host_resolver.h" |
15 #include "net/http/http_auth_handler_factory.h" | 17 #include "net/http/http_auth_handler_factory.h" |
16 #include "net/http/http_network_session.h" | 18 #include "net/http/http_network_session.h" |
17 #include "net/http/http_network_transaction.h" | 19 #include "net/http/http_network_transaction.h" |
18 #include "net/http/http_server_properties_impl.h" | 20 #include "net/http/http_server_properties_impl.h" |
19 #include "net/http/http_stream.h" | 21 #include "net/http/http_stream.h" |
20 #include "net/http/http_stream_factory.h" | 22 #include "net/http/http_stream_factory.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 | 134 |
133 void OnBeforeProxyHeadersSent(const ProxyInfo& proxy_info, | 135 void OnBeforeProxyHeadersSent(const ProxyInfo& proxy_info, |
134 HttpRequestHeaders* request_headers) { | 136 HttpRequestHeaders* request_headers) { |
135 was_called_ = true; | 137 was_called_ = true; |
136 } | 138 } |
137 | 139 |
138 private: | 140 private: |
139 bool was_called_; | 141 bool was_called_; |
140 }; | 142 }; |
141 | 143 |
| 144 class TestSocketPerformanceWatcher : public SocketPerformanceWatcher { |
| 145 public: |
| 146 TestSocketPerformanceWatcher() |
| 147 : received_updated_rtt_available_notification_(false) {} |
| 148 |
| 149 ~TestSocketPerformanceWatcher() override {} |
| 150 |
| 151 void OnUpdatedRTTAvailable(const base::TimeDelta& rtt) override { |
| 152 received_updated_rtt_available_notification_ = true; |
| 153 } |
| 154 |
| 155 bool received_updated_rtt_available_notification() const { |
| 156 return received_updated_rtt_available_notification_; |
| 157 } |
| 158 |
| 159 private: |
| 160 bool received_updated_rtt_available_notification_; |
| 161 DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcher); |
| 162 }; |
| 163 |
| 164 class TestNetworkQualityEstimator : public NetworkQualityEstimator { |
| 165 public: |
| 166 TestNetworkQualityEstimator() |
| 167 : NetworkQualityEstimator(scoped_ptr<net::ExternalEstimateProvider>(), |
| 168 std::map<std::string, std::string>()) {} |
| 169 |
| 170 ~TestNetworkQualityEstimator() override {} |
| 171 |
| 172 scoped_ptr<SocketPerformanceWatcher> CreateUDPSocketPerformanceWatcher() |
| 173 const override { |
| 174 TestSocketPerformanceWatcher* watcher = new TestSocketPerformanceWatcher(); |
| 175 watchers_.push_back(watcher); |
| 176 return scoped_ptr<TestSocketPerformanceWatcher>(watcher); |
| 177 } |
| 178 |
| 179 scoped_ptr<SocketPerformanceWatcher> CreateTCPSocketPerformanceWatcher() |
| 180 const override { |
| 181 NOTIMPLEMENTED(); |
| 182 return nullptr; |
| 183 } |
| 184 |
| 185 bool IsRTTAvailableNotificationReceived() const { |
| 186 for (const auto& watcher : watchers_) |
| 187 if (watcher->received_updated_rtt_available_notification()) |
| 188 return true; |
| 189 return false; |
| 190 } |
| 191 |
| 192 size_t GetWatchersCreated() const { return watchers_.size(); } |
| 193 |
| 194 private: |
| 195 mutable std::vector<TestSocketPerformanceWatcher*> watchers_; |
| 196 DISALLOW_COPY_AND_ASSIGN(TestNetworkQualityEstimator); |
| 197 }; |
| 198 |
142 class QuicNetworkTransactionTest | 199 class QuicNetworkTransactionTest |
143 : public PlatformTest, | 200 : public PlatformTest, |
144 public ::testing::WithParamInterface<QuicVersion> { | 201 public ::testing::WithParamInterface<QuicVersion> { |
145 protected: | 202 protected: |
146 QuicNetworkTransactionTest() | 203 QuicNetworkTransactionTest() |
147 : clock_(new MockClock), | 204 : clock_(new MockClock), |
148 maker_(GetParam(), 0, clock_, kDefaultServerHostName), | 205 maker_(GetParam(), 0, clock_, kDefaultServerHostName), |
| 206 test_network_quality_estimator_(new TestNetworkQualityEstimator()), |
149 ssl_config_service_(new SSLConfigServiceDefaults), | 207 ssl_config_service_(new SSLConfigServiceDefaults), |
150 proxy_service_(ProxyService::CreateDirect()), | 208 proxy_service_(ProxyService::CreateDirect()), |
151 auth_handler_factory_( | 209 auth_handler_factory_( |
152 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), | 210 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), |
153 random_generator_(0), | 211 random_generator_(0), |
154 hanging_data_(nullptr, 0, nullptr, 0) { | 212 hanging_data_(nullptr, 0, nullptr, 0) { |
155 request_.method = "GET"; | 213 request_.method = "GET"; |
156 std::string url("http://"); | 214 std::string url("http://"); |
157 url.append(kDefaultServerHostName); | 215 url.append(kDefaultServerHostName); |
158 request_.url = GURL(url); | 216 request_.url = GURL(url); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 void CreateSessionWithFactory(ClientSocketFactory* socket_factory, | 299 void CreateSessionWithFactory(ClientSocketFactory* socket_factory, |
242 bool use_next_protos) { | 300 bool use_next_protos) { |
243 params_.enable_quic = true; | 301 params_.enable_quic = true; |
244 params_.quic_clock = clock_; | 302 params_.quic_clock = clock_; |
245 params_.quic_random = &random_generator_; | 303 params_.quic_random = &random_generator_; |
246 params_.client_socket_factory = socket_factory; | 304 params_.client_socket_factory = socket_factory; |
247 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; | 305 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; |
248 params_.host_resolver = &host_resolver_; | 306 params_.host_resolver = &host_resolver_; |
249 params_.cert_verifier = &cert_verifier_; | 307 params_.cert_verifier = &cert_verifier_; |
250 params_.transport_security_state = &transport_security_state_; | 308 params_.transport_security_state = &transport_security_state_; |
| 309 params_.socket_performance_watcher_factory = |
| 310 test_network_quality_estimator_.get(); |
251 params_.proxy_service = proxy_service_.get(); | 311 params_.proxy_service = proxy_service_.get(); |
252 params_.ssl_config_service = ssl_config_service_.get(); | 312 params_.ssl_config_service = ssl_config_service_.get(); |
253 params_.http_auth_handler_factory = auth_handler_factory_.get(); | 313 params_.http_auth_handler_factory = auth_handler_factory_.get(); |
254 params_.http_server_properties = http_server_properties_.GetWeakPtr(); | 314 params_.http_server_properties = http_server_properties_.GetWeakPtr(); |
255 params_.quic_supported_versions = SupportedVersions(GetParam()); | 315 params_.quic_supported_versions = SupportedVersions(GetParam()); |
256 | 316 |
257 if (use_next_protos) { | 317 if (use_next_protos) { |
258 params_.use_alternative_services = true; | 318 params_.use_alternative_services = true; |
259 params_.next_protos = NextProtosWithSpdyAndQuic(true, true); | 319 params_.next_protos = NextProtosWithSpdyAndQuic(true, true); |
260 } | 320 } |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 } | 425 } |
366 | 426 |
367 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. | 427 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. |
368 QuicTestPacketMaker maker_; | 428 QuicTestPacketMaker maker_; |
369 scoped_refptr<HttpNetworkSession> session_; | 429 scoped_refptr<HttpNetworkSession> session_; |
370 MockClientSocketFactory socket_factory_; | 430 MockClientSocketFactory socket_factory_; |
371 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 431 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
372 MockHostResolver host_resolver_; | 432 MockHostResolver host_resolver_; |
373 MockCertVerifier cert_verifier_; | 433 MockCertVerifier cert_verifier_; |
374 TransportSecurityState transport_security_state_; | 434 TransportSecurityState transport_security_state_; |
| 435 scoped_ptr<TestNetworkQualityEstimator> test_network_quality_estimator_; |
375 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; | 436 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; |
376 scoped_ptr<ProxyService> proxy_service_; | 437 scoped_ptr<ProxyService> proxy_service_; |
377 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; | 438 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; |
378 MockRandom random_generator_; | 439 MockRandom random_generator_; |
379 HttpServerPropertiesImpl http_server_properties_; | 440 HttpServerPropertiesImpl http_server_properties_; |
380 HttpNetworkSession::Params params_; | 441 HttpNetworkSession::Params params_; |
381 HttpRequestInfo request_; | 442 HttpRequestInfo request_; |
382 BoundTestNetLog net_log_; | 443 BoundTestNetLog net_log_; |
383 StaticSocketDataProvider hanging_data_; | 444 StaticSocketDataProvider hanging_data_; |
384 | 445 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 484 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
424 | 485 |
425 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 486 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
426 | 487 |
427 // The non-alternate protocol job needs to hang in order to guarantee that | 488 // The non-alternate protocol job needs to hang in order to guarantee that |
428 // the alternate-protocol job will "win". | 489 // the alternate-protocol job will "win". |
429 AddHangingNonAlternateProtocolSocketData(); | 490 AddHangingNonAlternateProtocolSocketData(); |
430 | 491 |
431 CreateSession(); | 492 CreateSession(); |
432 | 493 |
| 494 EXPECT_FALSE( |
| 495 test_network_quality_estimator_->IsRTTAvailableNotificationReceived()); |
433 SendRequestAndExpectQuicResponse("hello!"); | 496 SendRequestAndExpectQuicResponse("hello!"); |
| 497 EXPECT_TRUE( |
| 498 test_network_quality_estimator_->IsRTTAvailableNotificationReceived()); |
434 | 499 |
435 // Check that the NetLog was filled reasonably. | 500 // Check that the NetLog was filled reasonably. |
436 TestNetLogEntry::List entries; | 501 TestNetLogEntry::List entries; |
437 net_log_.GetEntries(&entries); | 502 net_log_.GetEntries(&entries); |
438 EXPECT_LT(0u, entries.size()); | 503 EXPECT_LT(0u, entries.size()); |
439 | 504 |
440 // Check that we logged a QUIC_SESSION_PACKET_RECEIVED. | 505 // Check that we logged a QUIC_SESSION_PACKET_RECEIVED. |
441 int pos = ExpectLogContainsSomewhere( | 506 int pos = ExpectLogContainsSomewhere( |
442 entries, 0, NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED, | 507 entries, 0, NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED, |
443 NetLog::PHASE_NONE); | 508 NetLog::PHASE_NONE); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, | 549 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, |
485 GetResponseHeaders("200 OK"))); | 550 GetResponseHeaders("200 OK"))); |
486 mock_quic_data.AddRead( | 551 mock_quic_data.AddRead( |
487 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 552 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
488 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 553 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
489 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 554 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
490 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF | 555 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF |
491 | 556 |
492 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 557 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
493 | 558 |
| 559 EXPECT_FALSE( |
| 560 test_network_quality_estimator_->IsRTTAvailableNotificationReceived()); |
494 // There is no need to set up an alternate protocol job, because | 561 // There is no need to set up an alternate protocol job, because |
495 // no attempt will be made to speak to the proxy over TCP. | 562 // no attempt will be made to speak to the proxy over TCP. |
496 | 563 |
497 CreateSession(); | 564 CreateSession(); |
498 | 565 |
499 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 566 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
| 567 EXPECT_TRUE( |
| 568 test_network_quality_estimator_->IsRTTAvailableNotificationReceived()); |
500 } | 569 } |
501 | 570 |
502 // Regression test for https://crbug.com/492458. Test that for an HTTP | 571 // Regression test for https://crbug.com/492458. Test that for an HTTP |
503 // connection through a QUIC proxy, the certificate exhibited by the proxy is | 572 // connection through a QUIC proxy, the certificate exhibited by the proxy is |
504 // checked against the proxy hostname, not the origin hostname. | 573 // checked against the proxy hostname, not the origin hostname. |
505 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { | 574 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { |
506 const std::string origin_host = "news.example.com"; | 575 const std::string origin_host = "news.example.com"; |
507 const std::string proxy_host = "www.example.org"; | 576 const std::string proxy_host = "www.example.org"; |
508 | 577 |
509 params_.enable_insecure_quic = true; | 578 params_.enable_insecure_quic = true; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
541 CreateSessionWithNextProtos(); | 610 CreateSessionWithNextProtos(); |
542 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 611 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
543 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 612 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
544 } | 613 } |
545 | 614 |
546 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { | 615 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { |
547 params_.enable_insecure_quic = true; | 616 params_.enable_insecure_quic = true; |
548 params_.origin_to_force_quic_on = | 617 params_.origin_to_force_quic_on = |
549 HostPortPair::FromString("www.google.com:80"); | 618 HostPortPair::FromString("www.google.com:80"); |
550 | 619 |
551 MockQuicData mock_quic_data; | 620 MockQuicData mock_quic_data1; |
552 mock_quic_data.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 621 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
553 | 622 |
554 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 623 MockQuicData mock_quic_data2; |
| 624 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 625 |
| 626 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); |
| 627 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
555 | 628 |
556 CreateSession(); | 629 CreateSession(); |
557 | 630 |
558 scoped_ptr<HttpNetworkTransaction> trans( | 631 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); |
559 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 632 for (size_t i = 0; i < 2; ++i) { |
560 TestCompletionCallback callback; | 633 scoped_ptr<HttpNetworkTransaction> trans( |
561 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 634 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
562 EXPECT_EQ(ERR_IO_PENDING, rv); | 635 TestCompletionCallback callback; |
563 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 636 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 637 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 638 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); |
| 639 EXPECT_EQ(1 + i, test_network_quality_estimator_->GetWatchersCreated()); |
| 640 } |
564 } | 641 } |
565 | 642 |
566 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { | 643 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { |
567 // Attempt to "force" quic on 443, which will not be honored. | 644 // Attempt to "force" quic on 443, which will not be honored. |
568 params_.origin_to_force_quic_on = | 645 params_.origin_to_force_quic_on = |
569 HostPortPair::FromString("www.google.com:443"); | 646 HostPortPair::FromString("www.google.com:443"); |
570 | 647 |
571 MockRead http_reads[] = { | 648 MockRead http_reads[] = { |
572 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 649 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
573 MockRead("hello world"), | 650 MockRead("hello world"), |
574 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 651 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
575 MockRead(ASYNC, OK) | 652 MockRead(ASYNC, OK) |
576 }; | 653 }; |
577 | 654 |
578 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); | 655 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); |
579 socket_factory_.AddSocketDataProvider(&data); | 656 socket_factory_.AddSocketDataProvider(&data); |
580 SSLSocketDataProvider ssl(ASYNC, OK); | 657 SSLSocketDataProvider ssl(ASYNC, OK); |
581 socket_factory_.AddSSLSocketDataProvider(&ssl); | 658 socket_factory_.AddSSLSocketDataProvider(&ssl); |
582 | 659 |
583 CreateSession(); | 660 CreateSession(); |
584 | 661 |
585 SendRequestAndExpectHttpResponse("hello world"); | 662 SendRequestAndExpectHttpResponse("hello world"); |
| 663 EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated()); |
586 } | 664 } |
587 | 665 |
588 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { | 666 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { |
589 params_.enable_insecure_quic = true; | 667 params_.enable_insecure_quic = true; |
590 | 668 |
591 MockRead http_reads[] = { | 669 MockRead http_reads[] = { |
592 MockRead("HTTP/1.1 200 OK\r\n"), | 670 MockRead("HTTP/1.1 200 OK\r\n"), |
593 MockRead(kQuicAlternativeServiceHttpHeader), MockRead("hello world"), | 671 MockRead(kQuicAlternativeServiceHttpHeader), MockRead("hello world"), |
594 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 672 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
595 MockRead(ASYNC, OK)}; | 673 MockRead(ASYNC, OK)}; |
(...skipping 1118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1714 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1792 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
1715 TestCompletionCallback callback; | 1793 TestCompletionCallback callback; |
1716 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1794 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
1717 EXPECT_EQ(ERR_REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC, | 1795 EXPECT_EQ(ERR_REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC, |
1718 callback.GetResult(rv)); | 1796 callback.GetResult(rv)); |
1719 } | 1797 } |
1720 | 1798 |
1721 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { | 1799 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { |
1722 params_.enable_insecure_quic = true; | 1800 params_.enable_insecure_quic = true; |
1723 maker_.set_hostname("www.example.org"); | 1801 maker_.set_hostname("www.example.org"); |
| 1802 EXPECT_FALSE( |
| 1803 test_network_quality_estimator_->IsRTTAvailableNotificationReceived()); |
1724 MockQuicData mock_quic_data; | 1804 MockQuicData mock_quic_data; |
1725 mock_quic_data.AddWrite( | 1805 mock_quic_data.AddWrite( |
1726 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1806 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
1727 GetRequestHeaders("GET", "https", "/"))); | 1807 GetRequestHeaders("GET", "https", "/"))); |
1728 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1808 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
1729 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1809 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
1730 mock_quic_data.AddRead( | 1810 mock_quic_data.AddRead( |
1731 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1811 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1732 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1812 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1733 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 1813 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
1734 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1814 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1735 | 1815 |
1736 scoped_refptr<X509Certificate> cert( | 1816 scoped_refptr<X509Certificate> cert( |
1737 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); | 1817 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); |
1738 ASSERT_TRUE(cert.get()); | 1818 ASSERT_TRUE(cert.get()); |
1739 bool common_name_fallback_used; | 1819 bool common_name_fallback_used; |
1740 EXPECT_TRUE( | 1820 EXPECT_TRUE( |
1741 cert->VerifyNameMatch("www.example.org", &common_name_fallback_used)); | 1821 cert->VerifyNameMatch("www.example.org", &common_name_fallback_used)); |
1742 ProofVerifyDetailsChromium verify_details; | 1822 ProofVerifyDetailsChromium verify_details; |
1743 verify_details.cert_verify_result.verified_cert = cert; | 1823 verify_details.cert_verify_result.verified_cert = cert; |
1744 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1824 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
1745 | 1825 |
1746 request_.url = GURL("https://www.example.org:443"); | 1826 request_.url = GURL("https://www.example.org:443"); |
1747 AddHangingNonAlternateProtocolSocketData(); | 1827 AddHangingNonAlternateProtocolSocketData(); |
1748 CreateSessionWithNextProtos(); | 1828 CreateSessionWithNextProtos(); |
1749 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 1829 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
1750 SendRequestAndExpectQuicResponse("hello!"); | 1830 SendRequestAndExpectQuicResponse("hello!"); |
| 1831 EXPECT_TRUE( |
| 1832 test_network_quality_estimator_->IsRTTAvailableNotificationReceived()); |
1751 } | 1833 } |
1752 | 1834 |
1753 } // namespace test | 1835 } // namespace test |
1754 } // namespace net | 1836 } // namespace net |
OLD | NEW |