Index: net/http/http_network_transaction_unittest.cc |
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc |
index 2de64295cac8e9e61c0629afa10f1f2888136d93..dbf3755b365f3b2dbf85b33227a78c7a0045674b 100644 |
--- a/net/http/http_network_transaction_unittest.cc |
+++ b/net/http/http_network_transaction_unittest.cc |
@@ -9461,6 +9461,63 @@ TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { |
EXPECT_EQ(443, alternative_service_vector[0].port); |
} |
+TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { |
+ session_deps_.next_protos = SpdyNextProtos(); |
+ session_deps_.use_alternative_services = true; |
+ |
+ // Set an alternative service for origin. |
+ scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
+ HttpServerProperties& http_server_properties = |
+ *session->http_server_properties(); |
+ HostPortPair http_host_port_pair("www.example.org", 80); |
+ AlternativeService alternative_service(QUIC, "", 80); |
+ base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
+ http_server_properties.SetAlternativeService( |
+ http_host_port_pair, alternative_service, 1.0, expiration); |
+ AlternativeServiceVector alternative_service_vector = |
+ http_server_properties.GetAlternativeServices(http_host_port_pair); |
+ EXPECT_EQ(1u, alternative_service_vector.size()); |
+ |
+ // Send a clear header. |
+ MockRead data_reads[] = { |
+ MockRead("HTTP/1.1 200 OK\r\n"), |
+ MockRead("Alt-Svc: clear\r\n"), |
+ MockRead("\r\n"), |
+ MockRead("hello world"), |
+ MockRead(SYNCHRONOUS, OK), |
+ }; |
+ StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); |
+ session_deps_.socket_factory->AddSocketDataProvider(&data); |
+ |
+ HttpRequestInfo request; |
+ request.method = "GET"; |
+ request.url = GURL("http://www.example.org/"); |
+ request.load_flags = 0; |
+ |
+ TestCompletionCallback callback; |
+ |
+ scoped_ptr<HttpTransaction> trans( |
+ new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
+ |
+ int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
+ EXPECT_EQ(OK, callback.GetResult(rv)); |
+ |
+ const HttpResponseInfo* response = trans->GetResponseInfo(); |
+ ASSERT_TRUE(response != nullptr); |
+ ASSERT_TRUE(response->headers.get() != nullptr); |
+ EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
+ EXPECT_FALSE(response->was_fetched_via_spdy); |
+ EXPECT_FALSE(response->was_npn_negotiated); |
+ |
+ std::string response_data; |
+ ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
+ EXPECT_EQ("hello world", response_data); |
+ |
+ alternative_service_vector = |
+ http_server_properties.GetAlternativeServices(http_host_port_pair); |
+ EXPECT_TRUE(alternative_service_vector.empty()); |
+} |
+ |
// Alternative Service headers must be ignored when |use_alternative_services| |
// is false. |
TEST_P(HttpNetworkTransactionTest, DoNotHonorAlternativeServiceHeader) { |