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/values.h" | 12 #include "base/values.h" |
13 #include "net/base/host_port_pair.h" | 13 #include "net/base/host_port_pair.h" |
14 #include "net/base/ip_address.h" | 14 #include "net/base/ip_address.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 #include "url/gurl.h" | 16 #include "url/gurl.h" |
17 | 17 |
18 namespace base { | 18 namespace base { |
19 class ListValue; | 19 class ListValue; |
20 } | 20 } |
21 | 21 |
22 namespace net { | 22 namespace net { |
23 | 23 |
24 class HttpServerPropertiesImplPeer { | 24 class HttpServerPropertiesImplPeer { |
25 public: | 25 public: |
26 static void AddBrokenAlternativeServiceWithExpirationTime( | 26 static void AddBrokenAlternativeServiceWithExpirationTime( |
27 HttpServerPropertiesImpl& impl, | 27 HttpServerPropertiesImpl* impl, |
28 AlternativeService alternative_service, | 28 AlternativeService alternative_service, |
29 base::TimeTicks when) { | 29 base::TimeTicks when) { |
30 impl.broken_alternative_services_.insert( | 30 impl->broken_alternative_services_.insert( |
31 std::make_pair(alternative_service, when)); | 31 std::make_pair(alternative_service, when)); |
32 auto it = | 32 auto it = |
33 impl.recently_broken_alternative_services_.Get(alternative_service); | 33 impl->recently_broken_alternative_services_.Get(alternative_service); |
34 if (it == impl.recently_broken_alternative_services_.end()) { | 34 if (it == impl->recently_broken_alternative_services_.end()) { |
35 impl.recently_broken_alternative_services_.Put(alternative_service, 1); | 35 impl->recently_broken_alternative_services_.Put(alternative_service, 1); |
36 } else { | 36 } else { |
37 it->second++; | 37 it->second++; |
38 } | 38 } |
39 } | 39 } |
40 | 40 |
41 static void ExpireBrokenAlternateProtocolMappings( | 41 static void ExpireBrokenAlternateProtocolMappings( |
42 HttpServerPropertiesImpl& impl) { | 42 HttpServerPropertiesImpl* impl) { |
43 impl.ExpireBrokenAlternateProtocolMappings(); | 43 impl->ExpireBrokenAlternateProtocolMappings(); |
44 } | 44 } |
45 }; | 45 }; |
46 | 46 |
47 namespace { | 47 namespace { |
48 | 48 |
49 const int kMaxSupportsSpdyServerHosts = 500; | 49 const int kMaxSupportsSpdyServerHosts = 500; |
50 | 50 |
51 class HttpServerPropertiesImplTest : public testing::Test { | 51 class HttpServerPropertiesImplTest : public testing::Test { |
52 protected: | 52 protected: |
53 bool HasAlternativeService(const url::SchemeHostPort& origin) { | 53 bool HasAlternativeService(const url::SchemeHostPort& origin) { |
(...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 url::SchemeHostPort server("https", "foo", 443); | 943 url::SchemeHostPort server("https", "foo", 443); |
944 AlternativeService alternative_service(kProtoQUIC, "foo", 443); | 944 AlternativeService alternative_service(kProtoQUIC, "foo", 443); |
945 SetAlternativeService(server, alternative_service); | 945 SetAlternativeService(server, alternative_service); |
946 EXPECT_TRUE(HasAlternativeService(server)); | 946 EXPECT_TRUE(HasAlternativeService(server)); |
947 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service)); | 947 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service)); |
948 EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); | 948 EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); |
949 | 949 |
950 base::TimeTicks past = | 950 base::TimeTicks past = |
951 base::TimeTicks::Now() - base::TimeDelta::FromSeconds(42); | 951 base::TimeTicks::Now() - base::TimeDelta::FromSeconds(42); |
952 HttpServerPropertiesImplPeer::AddBrokenAlternativeServiceWithExpirationTime( | 952 HttpServerPropertiesImplPeer::AddBrokenAlternativeServiceWithExpirationTime( |
953 impl_, alternative_service, past); | 953 &impl_, alternative_service, past); |
954 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service)); | 954 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service)); |
955 EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); | 955 EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); |
956 | 956 |
957 HttpServerPropertiesImplPeer::ExpireBrokenAlternateProtocolMappings(impl_); | 957 HttpServerPropertiesImplPeer::ExpireBrokenAlternateProtocolMappings(&impl_); |
958 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service)); | 958 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service)); |
959 EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); | 959 EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); |
960 } | 960 } |
961 | 961 |
962 // Regression test for https://crbug.com/505413. | 962 // Regression test for https://crbug.com/505413. |
963 TEST_F(AlternateProtocolServerPropertiesTest, RemoveExpiredBrokenAltSvc) { | 963 TEST_F(AlternateProtocolServerPropertiesTest, RemoveExpiredBrokenAltSvc) { |
964 url::SchemeHostPort foo_server("https", "foo", 443); | 964 url::SchemeHostPort foo_server("https", "foo", 443); |
965 AlternativeService bar_alternative_service(kProtoQUIC, "bar", 443); | 965 AlternativeService bar_alternative_service(kProtoQUIC, "bar", 443); |
966 SetAlternativeService(foo_server, bar_alternative_service); | 966 SetAlternativeService(foo_server, bar_alternative_service); |
967 EXPECT_TRUE(HasAlternativeService(foo_server)); | 967 EXPECT_TRUE(HasAlternativeService(foo_server)); |
968 | 968 |
969 url::SchemeHostPort bar_server1("http", "bar", 80); | 969 url::SchemeHostPort bar_server1("http", "bar", 80); |
970 AlternativeService nohost_alternative_service(kProtoQUIC, "", 443); | 970 AlternativeService nohost_alternative_service(kProtoQUIC, "", 443); |
971 SetAlternativeService(bar_server1, nohost_alternative_service); | 971 SetAlternativeService(bar_server1, nohost_alternative_service); |
972 EXPECT_TRUE(HasAlternativeService(bar_server1)); | 972 EXPECT_TRUE(HasAlternativeService(bar_server1)); |
973 | 973 |
974 url::SchemeHostPort bar_server2("https", "bar", 443); | 974 url::SchemeHostPort bar_server2("https", "bar", 443); |
975 AlternativeService baz_alternative_service(kProtoQUIC, "baz", 1234); | 975 AlternativeService baz_alternative_service(kProtoQUIC, "baz", 1234); |
976 SetAlternativeService(bar_server2, baz_alternative_service); | 976 SetAlternativeService(bar_server2, baz_alternative_service); |
977 EXPECT_TRUE(HasAlternativeService(bar_server2)); | 977 EXPECT_TRUE(HasAlternativeService(bar_server2)); |
978 | 978 |
979 // Mark "bar:443" as broken. | 979 // Mark "bar:443" as broken. |
980 base::TimeTicks past = | 980 base::TimeTicks past = |
981 base::TimeTicks::Now() - base::TimeDelta::FromSeconds(42); | 981 base::TimeTicks::Now() - base::TimeDelta::FromSeconds(42); |
982 HttpServerPropertiesImplPeer::AddBrokenAlternativeServiceWithExpirationTime( | 982 HttpServerPropertiesImplPeer::AddBrokenAlternativeServiceWithExpirationTime( |
983 impl_, bar_alternative_service, past); | 983 &impl_, bar_alternative_service, past); |
984 | 984 |
985 // Expire brokenness of "bar:443". | 985 // Expire brokenness of "bar:443". |
986 HttpServerPropertiesImplPeer::ExpireBrokenAlternateProtocolMappings(impl_); | 986 HttpServerPropertiesImplPeer::ExpireBrokenAlternateProtocolMappings(&impl_); |
987 | 987 |
988 // "foo:443" should have no alternative service now. | 988 // "foo:443" should have no alternative service now. |
989 EXPECT_FALSE(HasAlternativeService(foo_server)); | 989 EXPECT_FALSE(HasAlternativeService(foo_server)); |
990 // "bar:80" should have no alternative service now. | 990 // "bar:80" should have no alternative service now. |
991 EXPECT_FALSE(HasAlternativeService(bar_server1)); | 991 EXPECT_FALSE(HasAlternativeService(bar_server1)); |
992 // The alternative service of "bar:443" should be unaffected. | 992 // The alternative service of "bar:443" should be unaffected. |
993 EXPECT_TRUE(HasAlternativeService(bar_server2)); | 993 EXPECT_TRUE(HasAlternativeService(bar_server2)); |
994 | 994 |
995 EXPECT_TRUE( | 995 EXPECT_TRUE( |
996 impl_.WasAlternativeServiceRecentlyBroken(bar_alternative_service)); | 996 impl_.WasAlternativeServiceRecentlyBroken(bar_alternative_service)); |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1239 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); | 1239 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); |
1240 | 1240 |
1241 impl_.Clear(); | 1241 impl_.Clear(); |
1242 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); | 1242 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); |
1243 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); | 1243 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); |
1244 } | 1244 } |
1245 | 1245 |
1246 } // namespace | 1246 } // namespace |
1247 | 1247 |
1248 } // namespace net | 1248 } // namespace net |
OLD | NEW |