Index: net/http/http_stream_factory_impl_job_controller_unittest.cc |
diff --git a/net/http/http_stream_factory_impl_job_controller_unittest.cc b/net/http/http_stream_factory_impl_job_controller_unittest.cc |
index ffc80c42a8986104b720227fd5e3ca52c0059214..e3df6fa33340560898daccf992d8abe1a687f487 100644 |
--- a/net/http/http_stream_factory_impl_job_controller_unittest.cc |
+++ b/net/http/http_stream_factory_impl_job_controller_unittest.cc |
@@ -158,10 +158,20 @@ class JobControllerPeer { |
HttpStreamFactoryImpl::JobController* job_controller) { |
return job_controller->main_job_is_blocked_; |
} |
+ |
static bool main_job_is_resumed( |
HttpStreamFactoryImpl::JobController* job_controller) { |
return job_controller->main_job_is_resumed_; |
} |
+ |
+ static AlternativeServiceInfo GetAlternativeServiceInfoFor( |
+ HttpStreamFactoryImpl::JobController* job_controller, |
+ const HttpRequestInfo& request_info, |
+ HttpStreamRequest::Delegate* delegate, |
+ HttpStreamRequest::StreamType stream_type) { |
+ return job_controller->GetAlternativeServiceInfoFor(request_info, delegate, |
+ stream_type); |
+ } |
}; |
class HttpStreamFactoryImplJobControllerTest : public ::testing::Test { |
@@ -261,7 +271,8 @@ class HttpStreamFactoryImplJobControllerTest : public ::testing::Test { |
url::SchemeHostPort server(request_info.url); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
session_->http_server_properties()->SetAlternativeService( |
- server, alternative_service, expiration); |
+ server, alternative_service, expiration, |
+ HttpNetworkSession::Params().quic_supported_versions); |
} |
void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info, |
@@ -338,18 +349,18 @@ TEST_F(HttpStreamFactoryImplJobControllerTest, ProxyResolutionFailsAsync) { |
ProxyConfig proxy_config; |
proxy_config.set_pac_url(GURL("http://fooproxyurl")); |
proxy_config.set_pac_mandatory(true); |
- MockAsyncProxyResolverFactory* proxy_resolver_factory = |
- new MockAsyncProxyResolverFactory(false); |
- MockAsyncProxyResolver resolver; |
- session_deps_.proxy_service.reset( |
- new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), |
- base::WrapUnique(proxy_resolver_factory), nullptr)); |
+ session_deps_.proxy_service.reset(new ProxyService( |
Bence
2017/06/08 17:44:51
session_deps_.proxy_service = base::MakeUnique<Pro
Zhongyi Shi
2017/06/08 23:11:16
This is a change not related to this CL. Not sure
|
+ base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), |
+ base::WrapUnique(new FailingProxyResolverFactory), nullptr)); |
Bence
2017/06/08 17:44:52
base::MakeUnique<FailingProxyResolverFactory>()
Zhongyi Shi
2017/06/08 23:11:16
ditto.
|
HttpRequestInfo request_info; |
request_info.method = "GET"; |
request_info.url = GURL("http://www.google.com"); |
Initialize(request_info); |
+ EXPECT_CALL(request_delegate_, |
+ OnStreamFailed(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, _)) |
+ .Times(1); |
request_ = |
job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), |
HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY); |
@@ -357,14 +368,11 @@ TEST_F(HttpStreamFactoryImplJobControllerTest, ProxyResolutionFailsAsync) { |
EXPECT_FALSE(job_controller_->main_job()); |
EXPECT_FALSE(job_controller_->alternative_job()); |
- EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, |
- job_controller_->GetLoadState()); |
+ // Make sure calling GetLoadState() when before job |
+ // creation does not crash. |
+ // Regression test for crbug.com/723920. |
+ EXPECT_EQ(LOAD_STATE_IDLE, job_controller_->GetLoadState()); |
- EXPECT_CALL(request_delegate_, |
- OnStreamFailed(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, _)) |
- .Times(1); |
- proxy_resolver_factory->pending_requests()[0]->CompleteNowWithForwarder( |
- ERR_FAILED, &resolver); |
base::RunLoop().RunUntilIdle(); |
request_.reset(); |
EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); |
@@ -1728,4 +1736,61 @@ TEST_P(HttpStreamFactoryImplJobControllerPreconnectTest, |
EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); |
} |
+// Test that GetAlternativeServiceInfoFor will include a list of advertised |
+// versions. |
+TEST_F(HttpStreamFactoryImplJobControllerTest, GetAlternativeServiceInfoFor) { |
+ HttpRequestInfo request_info; |
+ request_info.method = "GET"; |
+ request_info.url = GURL("https://www.google.com"); |
+ |
+ Initialize(request_info); |
+ url::SchemeHostPort server(request_info.url); |
+ AlternativeService alternative_service(kProtoQUIC, server.host(), 443); |
+ HostPortPair host_port_pair = HostPortPair::FromURL(request_info.url); |
+ base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
+ |
+ // Set alternative service with no advertised version, JobController will |
+ // append default supported quic versions when get alternative service info. |
+ session_->http_server_properties()->SetAlternativeService( |
+ server, alternative_service, expiration, QuicVersionVector()); |
+ |
+ AlternativeServiceInfo alt_svc_info = |
+ JobControllerPeer::GetAlternativeServiceInfoFor( |
+ job_controller_, request_info, &request_delegate_, |
+ HttpStreamRequest::HTTP_STREAM); |
+ const QuicVersionVector supported_versions = |
+ session_->params().quic_supported_versions; |
+ // Verify that JobController appends list of supported QUIC versions. |
+ EXPECT_EQ(supported_versions.size(), |
+ alt_svc_info.advertised_versions().size()); |
+ for (unsigned int i = 0; i < supported_versions.size(); i++) { |
+ EXPECT_EQ(supported_versions[i], alt_svc_info.advertised_versions()[i]); |
+ } |
+ |
+ // Set alternative service for the same server with QUIC_VERSION_39 specified. |
+ ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService( |
+ server, alternative_service, expiration, {QUIC_VERSION_39})); |
+ |
+ alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( |
+ job_controller_, request_info, &request_delegate_, |
+ HttpStreamRequest::HTTP_STREAM); |
+ EXPECT_EQ(1u, alt_svc_info.advertised_versions().size()); |
+ // Verify that JobController returns the single version specified in set. |
+ EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[0]); |
+ |
+ // Set alternative service for the same server with two QUIC versions: |
+ // QUIC_VERSION_35, QUIC_VERSION_39. |
+ ASSERT_TRUE(session_->http_server_properties()->SetAlternativeService( |
+ server, alternative_service, expiration, |
+ {QUIC_VERSION_35, QUIC_VERSION_39})); |
+ |
+ alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( |
+ job_controller_, request_info, &request_delegate_, |
+ HttpStreamRequest::HTTP_STREAM); |
+ EXPECT_EQ(2u, alt_svc_info.advertised_versions().size()); |
+ // Verify that JobController returns the list of versions specified in set. |
+ EXPECT_EQ(QUIC_VERSION_35, alt_svc_info.advertised_versions()[0]); |
+ EXPECT_EQ(QUIC_VERSION_39, alt_svc_info.advertised_versions()[1]); |
+} |
+ |
} // namespace net |