| 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 "net/http/http_server_properties_impl.h" | 5 #include "net/http/http_server_properties_impl.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/test/test_mock_time_task_runner.h" | 12 #include "base/test/test_mock_time_task_runner.h" |
| 13 #include "base/values.h" | 13 #include "base/values.h" |
| 14 #include "net/base/host_port_pair.h" | 14 #include "net/base/host_port_pair.h" |
| 15 #include "net/base/ip_address.h" | 15 #include "net/base/ip_address.h" |
| 16 #include "net/http/http_network_session.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "url/gurl.h" | 18 #include "url/gurl.h" |
| 18 | 19 |
| 19 namespace base { | 20 namespace base { |
| 20 class ListValue; | 21 class ListValue; |
| 21 } | 22 } |
| 22 | 23 |
| 23 namespace net { | 24 namespace net { |
| 24 | 25 |
| 25 const base::TimeDelta BROKEN_ALT_SVC_EXPIRE_DELAYS[10] = { | 26 const base::TimeDelta BROKEN_ALT_SVC_EXPIRE_DELAYS[10] = { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 bool HasAlternativeService(const url::SchemeHostPort& origin) { | 72 bool HasAlternativeService(const url::SchemeHostPort& origin) { |
| 72 const AlternativeServiceInfoVector alternative_service_info_vector = | 73 const AlternativeServiceInfoVector alternative_service_info_vector = |
| 73 impl_.GetAlternativeServiceInfos(origin); | 74 impl_.GetAlternativeServiceInfos(origin); |
| 74 return !alternative_service_info_vector.empty(); | 75 return !alternative_service_info_vector.empty(); |
| 75 } | 76 } |
| 76 | 77 |
| 77 bool SetAlternativeService(const url::SchemeHostPort& origin, | 78 bool SetAlternativeService(const url::SchemeHostPort& origin, |
| 78 const AlternativeService& alternative_service) { | 79 const AlternativeService& alternative_service) { |
| 79 const base::Time expiration = | 80 const base::Time expiration = |
| 80 base::Time::Now() + base::TimeDelta::FromDays(1); | 81 base::Time::Now() + base::TimeDelta::FromDays(1); |
| 81 return impl_.SetAlternativeService(origin, alternative_service, expiration); | 82 QuicVersionVector advertised_versions; |
| 83 if (alternative_service.protocol == kProtoQUIC) { |
| 84 advertised_versions = |
| 85 HttpNetworkSession::Params().quic_supported_versions; |
| 86 } |
| 87 return impl_.SetAlternativeService(origin, alternative_service, expiration, |
| 88 advertised_versions); |
| 82 } | 89 } |
| 83 | 90 |
| 84 void MarkBrokenAndLetExpireAlternativeServiceNTimes( | 91 void MarkBrokenAndLetExpireAlternativeServiceNTimes( |
| 85 const AlternativeService& alternative_service, | 92 const AlternativeService& alternative_service, |
| 86 int num_times) {} | 93 int num_times) {} |
| 87 | 94 |
| 88 scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_; | 95 scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_; |
| 89 | 96 |
| 90 std::unique_ptr<base::TickClock> broken_services_clock_; | 97 std::unique_ptr<base::TickClock> broken_services_clock_; |
| 91 HttpServerPropertiesImpl impl_; | 98 HttpServerPropertiesImpl impl_; |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 alternative_service_info_vector[0].alternative_service); | 389 alternative_service_info_vector[0].alternative_service); |
| 383 | 390 |
| 384 impl_.Clear(); | 391 impl_.Clear(); |
| 385 EXPECT_FALSE(HasAlternativeService(test_server)); | 392 EXPECT_FALSE(HasAlternativeService(test_server)); |
| 386 } | 393 } |
| 387 | 394 |
| 388 TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { | 395 TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { |
| 389 AlternativeServiceInfoVector alternative_service_info_vector; | 396 AlternativeServiceInfoVector alternative_service_info_vector; |
| 390 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 397 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 391 // Same hostname, same port, TCP: should be ignored. | 398 // Same hostname, same port, TCP: should be ignored. |
| 392 AlternativeServiceInfo alternative_service_info1(kProtoHTTP2, "foo", 443, | 399 AlternativeServiceInfo alternative_service_info1( |
| 393 expiration); | 400 AlternativeService(kProtoHTTP2, "foo", 443), expiration); |
| 394 alternative_service_info_vector.push_back(alternative_service_info1); | 401 alternative_service_info_vector.push_back(alternative_service_info1); |
| 395 // Different hostname: GetAlternativeServiceInfos should return this one. | 402 // Different hostname: GetAlternativeServiceInfos should return this one. |
| 396 AlternativeServiceInfo alternative_service_info2(kProtoHTTP2, "bar", 443, | 403 AlternativeServiceInfo alternative_service_info2( |
| 397 expiration); | 404 AlternativeService(kProtoHTTP2, "bar", 443), expiration); |
| 398 alternative_service_info_vector.push_back(alternative_service_info2); | 405 alternative_service_info_vector.push_back(alternative_service_info2); |
| 399 // Different port: GetAlternativeServiceInfos should return this one too. | 406 // Different port: GetAlternativeServiceInfos should return this one too. |
| 400 AlternativeServiceInfo alternative_service_info3(kProtoHTTP2, "foo", 80, | 407 AlternativeServiceInfo alternative_service_info3( |
| 401 expiration); | 408 AlternativeService(kProtoHTTP2, "foo", 80), expiration); |
| 402 alternative_service_info_vector.push_back(alternative_service_info3); | 409 alternative_service_info_vector.push_back(alternative_service_info3); |
| 403 // QUIC: GetAlternativeServices should return this one too. | 410 // QUIC: GetAlternativeServices should return this one too. |
| 404 AlternativeServiceInfo alternative_service_info4(kProtoQUIC, "foo", 443, | 411 AlternativeServiceInfo alternative_service_info4( |
| 405 expiration); | 412 AlternativeService(kProtoQUIC, "foo", 443), expiration); |
| 406 alternative_service_info_vector.push_back(alternative_service_info4); | 413 alternative_service_info_vector.push_back(alternative_service_info4); |
| 407 | 414 |
| 408 url::SchemeHostPort test_server("https", "foo", 443); | 415 url::SchemeHostPort test_server("https", "foo", 443); |
| 409 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 416 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 410 | 417 |
| 411 const AlternativeServiceInfoVector alternative_service_info_vector2 = | 418 const AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 412 impl_.GetAlternativeServiceInfos(test_server); | 419 impl_.GetAlternativeServiceInfos(test_server); |
| 413 ASSERT_EQ(3u, alternative_service_info_vector2.size()); | 420 ASSERT_EQ(3u, alternative_service_info_vector2.size()); |
| 414 EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]); | 421 EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]); |
| 415 EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]); | 422 EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]); |
| 416 EXPECT_EQ(alternative_service_info4, alternative_service_info_vector2[2]); | 423 EXPECT_EQ(alternative_service_info4, alternative_service_info_vector2[2]); |
| 417 } | 424 } |
| 418 | 425 |
| 419 TEST_F(AlternateProtocolServerPropertiesTest, Set) { | 426 TEST_F(AlternateProtocolServerPropertiesTest, Set) { |
| 420 // |test_server1| has an alternative service, which will not be | 427 // |test_server1| has an alternative service, which will not be |
| 421 // affected by SetAlternativeServiceServers(), because | 428 // affected by SetAlternativeServiceServers(), because |
| 422 // |alternative_service_map| does not have an entry for | 429 // |alternative_service_map| does not have an entry for |
| 423 // |test_server1|. | 430 // |test_server1|. |
| 424 url::SchemeHostPort test_server1("http", "foo1", 80); | 431 url::SchemeHostPort test_server1("http", "foo1", 80); |
| 425 const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443); | 432 const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443); |
| 426 const base::Time now = base::Time::Now(); | 433 const base::Time now = base::Time::Now(); |
| 427 base::Time expiration1 = now + base::TimeDelta::FromDays(1); | 434 base::Time expiration1 = now + base::TimeDelta::FromDays(1); |
| 428 // 1st entry in the memory. | 435 // 1st entry in the memory. |
| 429 impl_.SetAlternativeService(test_server1, alternative_service1, expiration1); | 436 impl_.SetAlternativeService(test_server1, alternative_service1, expiration1, |
| 437 QuicVersionVector()); |
| 430 | 438 |
| 431 // |test_server2| has an alternative service, which will be | 439 // |test_server2| has an alternative service, which will be |
| 432 // overwritten by SetAlternativeServiceServers(), because | 440 // overwritten by SetAlternativeServiceServers(), because |
| 433 // |alternative_service_map| has an entry for | 441 // |alternative_service_map| has an entry for |
| 434 // |test_server2|. | 442 // |test_server2|. |
| 435 AlternativeServiceInfoVector alternative_service_info_vector; | 443 AlternativeServiceInfoVector alternative_service_info_vector; |
| 436 const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443); | 444 const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443); |
| 437 base::Time expiration2 = now + base::TimeDelta::FromDays(2); | 445 base::Time expiration2 = now + base::TimeDelta::FromDays(2); |
| 438 alternative_service_info_vector.push_back( | 446 alternative_service_info_vector.push_back( |
| 439 AlternativeServiceInfo(alternative_service2, expiration2)); | 447 AlternativeServiceInfo(alternative_service2, expiration2)); |
| (...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1328 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); | 1336 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); |
| 1329 | 1337 |
| 1330 impl_.Clear(); | 1338 impl_.Clear(); |
| 1331 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); | 1339 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); |
| 1332 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); | 1340 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); |
| 1333 } | 1341 } |
| 1334 | 1342 |
| 1335 } // namespace | 1343 } // namespace |
| 1336 | 1344 |
| 1337 } // namespace net | 1345 } // namespace net |
| OLD | NEW |