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 #ifndef NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ | 5 #ifndef NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ |
6 #define NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ | 6 #define NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ |
7 | 7 |
| 8 #include <deque> |
8 #include <map> | 9 #include <map> |
9 #include <set> | 10 #include <set> |
10 #include <string> | 11 #include <string> |
11 #include <vector> | 12 #include <vector> |
12 | 13 |
13 #include "base/basictypes.h" | 14 #include "base/basictypes.h" |
14 #include "base/containers/hash_tables.h" | 15 #include "base/containers/hash_tables.h" |
15 #include "base/gtest_prod_util.h" | 16 #include "base/gtest_prod_util.h" |
16 #include "base/threading/non_thread_safe.h" | 17 #include "base/threading/non_thread_safe.h" |
17 #include "base/values.h" | 18 #include "base/values.h" |
(...skipping 18 matching lines...) Expand all Loading... |
36 // Initializes |spdy_servers_map_| with the servers (host/port) from | 37 // Initializes |spdy_servers_map_| with the servers (host/port) from |
37 // |spdy_servers| that either support SPDY or not. | 38 // |spdy_servers| that either support SPDY or not. |
38 void InitializeSpdyServers(std::vector<std::string>* spdy_servers, | 39 void InitializeSpdyServers(std::vector<std::string>* spdy_servers, |
39 bool support_spdy); | 40 bool support_spdy); |
40 | 41 |
41 void InitializeAlternateProtocolServers( | 42 void InitializeAlternateProtocolServers( |
42 AlternateProtocolMap* alternate_protocol_servers); | 43 AlternateProtocolMap* alternate_protocol_servers); |
43 | 44 |
44 void InitializeSpdySettingsServers(SpdySettingsMap* spdy_settings_map); | 45 void InitializeSpdySettingsServers(SpdySettingsMap* spdy_settings_map); |
45 | 46 |
46 void InitializeSupportsQuic(SupportsQuicMap* supports_quic_map); | 47 void InitializeSupportsQuic(IPAddressNumber* last_address); |
47 | 48 |
48 void InitializeServerNetworkStats( | 49 void InitializeServerNetworkStats( |
49 ServerNetworkStatsMap* server_network_stats_map); | 50 ServerNetworkStatsMap* server_network_stats_map); |
50 | 51 |
51 // Get the list of servers (host/port) that support SPDY. The max_size is the | 52 // Get the list of servers (host/port) that support SPDY. The max_size is the |
52 // number of MRU servers that support SPDY that are to be returned. | 53 // number of MRU servers that support SPDY that are to be returned. |
53 void GetSpdyServerList(base::ListValue* spdy_server_list, | 54 void GetSpdyServerList(base::ListValue* spdy_server_list, |
54 size_t max_size) const; | 55 size_t max_size) const; |
55 | 56 |
56 // Returns flattened string representation of the |host_port_pair|. Used by | 57 // Returns flattened string representation of the |host_port_pair|. Used by |
(...skipping 15 matching lines...) Expand all Loading... |
72 // ----------------------------- | 73 // ----------------------------- |
73 | 74 |
74 base::WeakPtr<HttpServerProperties> GetWeakPtr() override; | 75 base::WeakPtr<HttpServerProperties> GetWeakPtr() override; |
75 void Clear() override; | 76 void Clear() override; |
76 bool SupportsRequestPriority(const HostPortPair& server) override; | 77 bool SupportsRequestPriority(const HostPortPair& server) override; |
77 void SetSupportsSpdy(const HostPortPair& server, bool support_spdy) override; | 78 void SetSupportsSpdy(const HostPortPair& server, bool support_spdy) override; |
78 bool RequiresHTTP11(const HostPortPair& server) override; | 79 bool RequiresHTTP11(const HostPortPair& server) override; |
79 void SetHTTP11Required(const HostPortPair& server) override; | 80 void SetHTTP11Required(const HostPortPair& server) override; |
80 void MaybeForceHTTP11(const HostPortPair& server, | 81 void MaybeForceHTTP11(const HostPortPair& server, |
81 SSLConfig* ssl_config) override; | 82 SSLConfig* ssl_config) override; |
82 bool HasAlternateProtocol(const HostPortPair& server) override; | |
83 AlternateProtocolInfo GetAlternateProtocol( | 83 AlternateProtocolInfo GetAlternateProtocol( |
84 const HostPortPair& server) override; | 84 const HostPortPair& server) override; |
85 void SetAlternateProtocol(const HostPortPair& server, | 85 void SetAlternateProtocol(const HostPortPair& server, |
86 uint16 alternate_port, | 86 uint16 alternate_port, |
87 AlternateProtocol alternate_protocol, | 87 AlternateProtocol alternate_protocol, |
88 double probability) override; | 88 double probability) override; |
89 void SetBrokenAlternateProtocol(const HostPortPair& server) override; | 89 void SetBrokenAlternateProtocol(const HostPortPair& server) override; |
90 bool WasAlternateProtocolRecentlyBroken(const HostPortPair& server) override; | 90 bool WasAlternateProtocolRecentlyBroken(const HostPortPair& server) override; |
91 void ConfirmAlternateProtocol(const HostPortPair& server) override; | 91 void ConfirmAlternateProtocol(const HostPortPair& server) override; |
92 void ClearAlternateProtocol(const HostPortPair& server) override; | 92 void ClearAlternateProtocol(const HostPortPair& server) override; |
93 const AlternateProtocolMap& alternate_protocol_map() const override; | 93 const AlternateProtocolMap& alternate_protocol_map() const override; |
94 void SetAlternateProtocolProbabilityThreshold(double threshold) override; | 94 void SetAlternateProtocolProbabilityThreshold(double threshold) override; |
95 const SettingsMap& GetSpdySettings( | 95 const SettingsMap& GetSpdySettings( |
96 const HostPortPair& host_port_pair) override; | 96 const HostPortPair& host_port_pair) override; |
97 bool SetSpdySetting(const HostPortPair& host_port_pair, | 97 bool SetSpdySetting(const HostPortPair& host_port_pair, |
98 SpdySettingsIds id, | 98 SpdySettingsIds id, |
99 SpdySettingsFlags flags, | 99 SpdySettingsFlags flags, |
100 uint32 value) override; | 100 uint32 value) override; |
101 void ClearSpdySettings(const HostPortPair& host_port_pair) override; | 101 void ClearSpdySettings(const HostPortPair& host_port_pair) override; |
102 void ClearAllSpdySettings() override; | 102 void ClearAllSpdySettings() override; |
103 const SpdySettingsMap& spdy_settings_map() const override; | 103 const SpdySettingsMap& spdy_settings_map() const override; |
104 SupportsQuic GetSupportsQuic( | 104 bool GetSupportsQuic(IPAddressNumber* last_address) const override; |
105 const HostPortPair& host_port_pair) const override; | 105 void SetSupportsQuic(bool used_quic, const IPAddressNumber& address) override; |
106 void SetSupportsQuic(const HostPortPair& host_port_pair, | |
107 bool used_quic, | |
108 const std::string& address) override; | |
109 const SupportsQuicMap& supports_quic_map() const override; | |
110 void SetServerNetworkStats(const HostPortPair& host_port_pair, | 106 void SetServerNetworkStats(const HostPortPair& host_port_pair, |
111 ServerNetworkStats stats) override; | 107 ServerNetworkStats stats) override; |
112 const ServerNetworkStats* GetServerNetworkStats( | 108 const ServerNetworkStats* GetServerNetworkStats( |
113 const HostPortPair& host_port_pair) override; | 109 const HostPortPair& host_port_pair) override; |
114 const ServerNetworkStatsMap& server_network_stats_map() const override; | 110 const ServerNetworkStatsMap& server_network_stats_map() const override; |
115 | 111 |
116 private: | 112 private: |
117 // |spdy_servers_map_| has flattened representation of servers (host, port) | 113 // |spdy_servers_map_| has flattened representation of servers (host, port) |
118 // that either support or not support SPDY protocol. | 114 // that either support or not support SPDY protocol. |
119 typedef base::MRUCache<std::string, bool> SpdyServerHostPortMap; | 115 typedef base::MRUCache<std::string, bool> SpdyServerHostPortMap; |
120 typedef std::map<HostPortPair, HostPortPair> CanonicalHostMap; | 116 typedef std::map<HostPortPair, HostPortPair> CanonicalHostMap; |
121 typedef std::vector<std::string> CanonicalSufficList; | 117 typedef std::vector<std::string> CanonicalSufficList; |
122 typedef std::set<HostPortPair> Http11ServerHostPortSet; | 118 typedef std::set<HostPortPair> Http11ServerHostPortSet; |
123 // List of broken host:ports and the times when they can be expired. | 119 |
| 120 // Server, port, and AlternateProtocol: an entity that can be broken. (Once |
| 121 // we use AlternativeService, the same AltSvc can be broken for one server but |
| 122 // not for another depending on what certificate it can offer.) |
124 struct BrokenAlternateProtocolEntry { | 123 struct BrokenAlternateProtocolEntry { |
| 124 BrokenAlternateProtocolEntry(const BrokenAlternateProtocolEntry&) = default; |
| 125 BrokenAlternateProtocolEntry(const HostPortPair& server, |
| 126 uint16 port, |
| 127 AlternateProtocol protocol) |
| 128 : server(server), port(port), protocol(protocol) {} |
| 129 |
| 130 bool operator<(const BrokenAlternateProtocolEntry& other) const { |
| 131 if (!server.Equals(other.server)) |
| 132 return server < other.server; |
| 133 if (port != other.port) |
| 134 return port < other.port; |
| 135 return protocol < other.protocol; |
| 136 } |
| 137 |
125 HostPortPair server; | 138 HostPortPair server; |
| 139 uint16 port; |
| 140 AlternateProtocol protocol; |
| 141 }; |
| 142 // BrokenAlternateProtocolEntry with expiration time. |
| 143 struct BrokenAlternateProtocolEntryWithTime { |
| 144 BrokenAlternateProtocolEntryWithTime( |
| 145 const BrokenAlternateProtocolEntry& broken_alternate_protocol_entry, |
| 146 base::TimeTicks when) |
| 147 : broken_alternate_protocol_entry(broken_alternate_protocol_entry), |
| 148 when(when) {} |
| 149 |
| 150 BrokenAlternateProtocolEntry broken_alternate_protocol_entry; |
126 base::TimeTicks when; | 151 base::TimeTicks when; |
127 }; | 152 }; |
128 typedef std::list<BrokenAlternateProtocolEntry> | 153 // Deque of BrokenAlternateProtocolEntryWithTime items, ordered by expiration |
| 154 // time. |
| 155 typedef std::deque<BrokenAlternateProtocolEntryWithTime> |
129 BrokenAlternateProtocolList; | 156 BrokenAlternateProtocolList; |
130 // Map from host:port to the number of times alternate protocol has | 157 // Map from (server, alternate protocol and port) to the number of |
131 // been marked broken. | 158 // times that alternate protocol has been marked broken for that server. |
132 typedef std::map<HostPortPair, int> BrokenAlternateProtocolMap; | 159 typedef std::map<BrokenAlternateProtocolEntry, int> |
| 160 BrokenAlternateProtocolMap; |
133 | 161 |
134 // Return the iterator for |server|, or for its canonical host, or end. | 162 // Return the iterator for |server|, or for its canonical host, or end. |
135 AlternateProtocolMap::const_iterator GetAlternateProtocolIterator( | 163 AlternateProtocolMap::const_iterator GetAlternateProtocolIterator( |
136 const HostPortPair& server); | 164 const HostPortPair& server); |
137 | 165 |
138 // Return the canonical host for |server|, or end if none exists. | 166 // Return the canonical host for |server|, or end if none exists. |
139 CanonicalHostMap::const_iterator GetCanonicalHost(HostPortPair server) const; | 167 CanonicalHostMap::const_iterator GetCanonicalHost(HostPortPair server) const; |
140 | 168 |
141 void RemoveCanonicalHost(const HostPortPair& server); | 169 void RemoveCanonicalHost(const HostPortPair& server); |
142 void ExpireBrokenAlternateProtocolMappings(); | 170 void ExpireBrokenAlternateProtocolMappings(); |
143 void ScheduleBrokenAlternateProtocolMappingsExpiration(); | 171 void ScheduleBrokenAlternateProtocolMappingsExpiration(); |
144 | 172 |
145 SpdyServerHostPortMap spdy_servers_map_; | 173 SpdyServerHostPortMap spdy_servers_map_; |
146 Http11ServerHostPortSet http11_servers_; | 174 Http11ServerHostPortSet http11_servers_; |
147 | 175 |
148 AlternateProtocolMap alternate_protocol_map_; | 176 AlternateProtocolMap alternate_protocol_map_; |
149 BrokenAlternateProtocolList broken_alternate_protocol_list_; | 177 BrokenAlternateProtocolList broken_alternate_protocol_list_; |
150 BrokenAlternateProtocolMap broken_alternate_protocol_map_; | 178 BrokenAlternateProtocolMap broken_alternate_protocol_map_; |
151 | 179 |
| 180 IPAddressNumber last_quic_address_; |
152 SpdySettingsMap spdy_settings_map_; | 181 SpdySettingsMap spdy_settings_map_; |
153 SupportsQuicMap supports_quic_map_; | |
154 ServerNetworkStatsMap server_network_stats_map_; | 182 ServerNetworkStatsMap server_network_stats_map_; |
155 // Contains a map of servers which could share the same alternate protocol. | 183 // Contains a map of servers which could share the same alternate protocol. |
156 // Map from a Canonical host/port (host is some postfix of host names) to an | 184 // Map from a Canonical host/port (host is some postfix of host names) to an |
157 // actual origin, which has a plausible alternate protocol mapping. | 185 // actual origin, which has a plausible alternate protocol mapping. |
158 CanonicalHostMap canonical_host_to_origin_map_; | 186 CanonicalHostMap canonical_host_to_origin_map_; |
159 // Contains list of suffixes (for exmaple ".c.youtube.com", | 187 // Contains list of suffixes (for exmaple ".c.youtube.com", |
160 // ".googlevideo.com", ".googleusercontent.com") of canonical hostnames. | 188 // ".googlevideo.com", ".googleusercontent.com") of canonical hostnames. |
161 CanonicalSufficList canonical_suffixes_; | 189 CanonicalSufficList canonical_suffixes_; |
162 | 190 |
163 double alternate_protocol_probability_threshold_; | 191 double alternate_protocol_probability_threshold_; |
164 | 192 |
165 base::WeakPtrFactory<HttpServerPropertiesImpl> weak_ptr_factory_; | 193 base::WeakPtrFactory<HttpServerPropertiesImpl> weak_ptr_factory_; |
166 | 194 |
167 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesImpl); | 195 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesImpl); |
168 }; | 196 }; |
169 | 197 |
170 } // namespace net | 198 } // namespace net |
171 | 199 |
172 #endif // NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ | 200 #endif // NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ |
OLD | NEW |