OLD | NEW |
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 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/http/http_stream_factory_impl_job_controller.h" | 5 #include "net/http/http_stream_factory_impl_job_controller.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 return job->spdy_session_key_; | 145 return job->spdy_session_key_; |
146 } | 146 } |
147 }; | 147 }; |
148 | 148 |
149 class JobControllerPeer { | 149 class JobControllerPeer { |
150 public: | 150 public: |
151 static bool main_job_is_blocked( | 151 static bool main_job_is_blocked( |
152 HttpStreamFactoryImpl::JobController* job_controller) { | 152 HttpStreamFactoryImpl::JobController* job_controller) { |
153 return job_controller->main_job_is_blocked_; | 153 return job_controller->main_job_is_blocked_; |
154 } | 154 } |
| 155 |
155 static bool main_job_is_resumed( | 156 static bool main_job_is_resumed( |
156 HttpStreamFactoryImpl::JobController* job_controller) { | 157 HttpStreamFactoryImpl::JobController* job_controller) { |
157 return job_controller->main_job_is_resumed_; | 158 return job_controller->main_job_is_resumed_; |
158 } | 159 } |
| 160 |
| 161 static AlternativeServiceInfo GetAlternativeServiceInfoFor( |
| 162 HttpStreamFactoryImpl::JobController* job_controller, |
| 163 const HttpRequestInfo& request_info, |
| 164 HttpStreamRequest::Delegate* delegate, |
| 165 HttpStreamRequest::StreamType stream_type) { |
| 166 return job_controller->GetAlternativeServiceInfoFor(request_info, delegate, |
| 167 stream_type); |
| 168 } |
159 }; | 169 }; |
160 | 170 |
161 class HttpStreamFactoryImplJobControllerTest : public ::testing::Test { | 171 class HttpStreamFactoryImplJobControllerTest : public ::testing::Test { |
162 public: | 172 public: |
163 HttpStreamFactoryImplJobControllerTest() | 173 HttpStreamFactoryImplJobControllerTest() |
164 : session_deps_(ProxyService::CreateDirect()), | 174 : session_deps_(ProxyService::CreateDirect()), |
165 random_generator_(0), | 175 random_generator_(0), |
166 client_maker_(HttpNetworkSession::Params().quic_supported_versions[0], | 176 client_maker_(HttpNetworkSession::Params().quic_supported_versions[0], |
167 0, | 177 0, |
168 &clock_, | 178 &clock_, |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 EXPECT_TRUE(tcp_data_->AllReadDataConsumed()); | 257 EXPECT_TRUE(tcp_data_->AllReadDataConsumed()); |
248 EXPECT_TRUE(tcp_data_->AllWriteDataConsumed()); | 258 EXPECT_TRUE(tcp_data_->AllWriteDataConsumed()); |
249 } | 259 } |
250 } | 260 } |
251 | 261 |
252 void SetAlternativeService(const HttpRequestInfo& request_info, | 262 void SetAlternativeService(const HttpRequestInfo& request_info, |
253 AlternativeService alternative_service) { | 263 AlternativeService alternative_service) { |
254 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url); | 264 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url); |
255 url::SchemeHostPort server(request_info.url); | 265 url::SchemeHostPort server(request_info.url); |
256 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 266 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 267 QuicVersionVector advertised_versions; |
| 268 if (alternative_service.protocol == kProtoQUIC) |
| 269 advertised_versions = session_->params().quic_supported_versions; |
| 270 |
257 session_->http_server_properties()->SetAlternativeService( | 271 session_->http_server_properties()->SetAlternativeService( |
258 server, alternative_service, expiration); | 272 server, alternative_service, expiration, advertised_versions); |
259 } | 273 } |
260 | 274 |
261 void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info, | 275 void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info, |
262 bool should_mark_broken) { | 276 bool should_mark_broken) { |
263 const url::SchemeHostPort server(request_info.url); | 277 const url::SchemeHostPort server(request_info.url); |
264 const AlternativeServiceInfoVector alternative_service_info_vector = | 278 const AlternativeServiceInfoVector alternative_service_info_vector = |
265 session_->http_server_properties()->GetAlternativeServiceInfos(server); | 279 session_->http_server_properties()->GetAlternativeServiceInfos(server); |
266 EXPECT_EQ(1u, alternative_service_info_vector.size()); | 280 EXPECT_EQ(1u, alternative_service_info_vector.size()); |
267 EXPECT_EQ(should_mark_broken, | 281 EXPECT_EQ(should_mark_broken, |
268 session_->http_server_properties()->IsAlternativeServiceBroken( | 282 session_->http_server_properties()->IsAlternativeServiceBroken( |
(...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1701 Initialize(); | 1715 Initialize(); |
1702 Preconnect(kNumPreconects); | 1716 Preconnect(kNumPreconects); |
1703 // If experiment is enabled, only 1 stream is requested. | 1717 // If experiment is enabled, only 1 stream is requested. |
1704 EXPECT_EQ( | 1718 EXPECT_EQ( |
1705 (int)actual_num_connects, | 1719 (int)actual_num_connects, |
1706 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job())); | 1720 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job())); |
1707 base::RunLoop().RunUntilIdle(); | 1721 base::RunLoop().RunUntilIdle(); |
1708 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); | 1722 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); |
1709 } | 1723 } |
1710 | 1724 |
| 1725 // Test that GetAlternativeServiceInfoFor will include a list of advertised |
| 1726 // versions. Returns an empty list if advertised versions are missing in |
| 1727 // HttpServerProperties. |
| 1728 TEST_F(HttpStreamFactoryImplJobControllerTest, GetAlternativeServiceInfoFor) { |
| 1729 HttpRequestInfo request_info; |
| 1730 request_info.method = "GET"; |
| 1731 request_info.url = GURL("https://www.google.com"); |
| 1732 |
| 1733 Initialize(request_info); |
| 1734 url::SchemeHostPort server(request_info.url); |
| 1735 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); |
| 1736 HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url); |
| 1737 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 1738 |
| 1739 // Set alternative service with no advertised version. |
| 1740 session_->http_server_properties()->SetAlternativeService( |
| 1741 server, alternative_service, expiration, QuicVersionVector()); |
| 1742 |
| 1743 AlternativeServiceInfo alt_svc_info = |
| 1744 JobControllerPeer::GetAlternativeServiceInfoFor( |
| 1745 job_controller_, request_info, &request_delegate_, |
| 1746 HttpStreamRequest::HTTP_STREAM); |
| 1747 // Verify that JobController get an empty list of supported QUIC versions. |
| 1748 EXPECT_TRUE(alt_svc_info.advertised_versions().empty()); |
| 1749 |
| 1750 // Set alternative service for the same server with QUIC_VERSION_39 specified. |
| 1751 ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService( |
| 1752 server, alternative_service, expiration, {QUIC_VERSION_39})); |
| 1753 |
| 1754 alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( |
| 1755 job_controller_, request_info, &request_delegate_, |
| 1756 HttpStreamRequest::HTTP_STREAM); |
| 1757 EXPECT_EQ(1u, alt_svc_info.advertised_versions().size()); |
| 1758 // Verify that JobController returns the single version specified in set. |
| 1759 EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[0]); |
| 1760 |
| 1761 // Set alternative service for the same server with two QUIC versions: |
| 1762 // QUIC_VERSION_35, QUIC_VERSION_39. |
| 1763 ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService( |
| 1764 server, alternative_service, expiration, |
| 1765 {QUIC_VERSION_35, QUIC_VERSION_39})); |
| 1766 |
| 1767 alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( |
| 1768 job_controller_, request_info, &request_delegate_, |
| 1769 HttpStreamRequest::HTTP_STREAM); |
| 1770 EXPECT_EQ(2u, alt_svc_info.advertised_versions().size()); |
| 1771 // Verify that JobController returns the list of versions specified in set. |
| 1772 EXPECT_EQ(QUIC_VERSION_35, alt_svc_info.advertised_versions()[0]); |
| 1773 EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[1]); |
| 1774 } |
| 1775 |
1711 } // namespace net | 1776 } // namespace net |
OLD | NEW |