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 <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 16 matching lines...) Expand all Loading... |
27 namespace net { | 27 namespace net { |
28 | 28 |
29 // The implementation for setting/retrieving the HTTP server properties. | 29 // The implementation for setting/retrieving the HTTP server properties. |
30 class NET_EXPORT HttpServerPropertiesImpl | 30 class NET_EXPORT HttpServerPropertiesImpl |
31 : public HttpServerProperties, | 31 : public HttpServerProperties, |
32 NON_EXPORTED_BASE(public base::NonThreadSafe) { | 32 NON_EXPORTED_BASE(public base::NonThreadSafe) { |
33 public: | 33 public: |
34 HttpServerPropertiesImpl(); | 34 HttpServerPropertiesImpl(); |
35 virtual ~HttpServerPropertiesImpl(); | 35 virtual ~HttpServerPropertiesImpl(); |
36 | 36 |
37 // Initializes |spdy_servers_table_| with the servers (host/port) from | 37 // Initializes |spdy_servers_map_| with the servers (host/port) from |
38 // |spdy_servers| that either support SPDY or not. | 38 // |spdy_servers| that either support SPDY or not. |
39 void InitializeSpdyServers(std::vector<std::string>* spdy_servers, | 39 void InitializeSpdyServers(std::vector<std::string>* spdy_servers, |
40 bool support_spdy); | 40 bool support_spdy); |
41 | 41 |
42 void InitializeAlternateProtocolServers( | 42 void InitializeAlternateProtocolServers( |
43 AlternateProtocolMap* alternate_protocol_servers); | 43 AlternateProtocolMap* alternate_protocol_servers); |
44 | 44 |
45 void InitializeSpdySettingsServers(SpdySettingsMap* spdy_settings_map); | 45 void InitializeSpdySettingsServers(SpdySettingsMap* spdy_settings_map); |
46 | 46 |
47 // Initializes |pipeline_capability_map_| with the servers (host/port) from | 47 // Initializes |pipeline_capability_map_| with the servers (host/port) from |
48 // |pipeline_capability_map| that either support HTTP pipelining or not. | 48 // |pipeline_capability_map| that either support HTTP pipelining or not. |
49 void InitializePipelineCapabilities( | 49 void InitializePipelineCapabilities( |
50 const PipelineCapabilityMap* pipeline_capability_map); | 50 const PipelineCapabilityMap* pipeline_capability_map); |
51 | 51 |
52 // Get the list of servers (host/port) that support SPDY. | 52 // Get the list of servers (host/port) that support SPDY. The max_size is the |
53 void GetSpdyServerList(base::ListValue* spdy_server_list) const; | 53 // number of MRU servers that support SPDY that are to be returned. |
| 54 void GetSpdyServerList(base::ListValue* spdy_server_list, |
| 55 size_t max_size) const; |
54 | 56 |
55 // Returns flattened string representation of the |host_port_pair|. Used by | 57 // Returns flattened string representation of the |host_port_pair|. Used by |
56 // unittests. | 58 // unittests. |
57 static std::string GetFlattenedSpdyServer( | 59 static std::string GetFlattenedSpdyServer( |
58 const net::HostPortPair& host_port_pair); | 60 const net::HostPortPair& host_port_pair); |
59 | 61 |
60 // Debugging to simulate presence of an AlternateProtocol. | 62 // Debugging to simulate presence of an AlternateProtocol. |
61 // If we don't have an alternate protocol in the map for any given host/port | 63 // If we don't have an alternate protocol in the map for any given host/port |
62 // pair, force this ProtocolPortPair. | 64 // pair, force this ProtocolPortPair. |
63 static void ForceAlternateProtocol(const PortAlternateProtocolPair& pair); | 65 static void ForceAlternateProtocol(const PortAlternateProtocolPair& pair); |
64 static void DisableForcedAlternateProtocol(); | 66 static void DisableForcedAlternateProtocol(); |
65 | 67 |
66 // Changes the number of host/port pairs we remember pipelining capability | 68 // Changes the number of host/port pairs we remember pipelining capability |
67 // for. A larger number means we're more likely to be able to pipeline | 69 // for. A larger number means we're more likely to be able to pipeline |
68 // immediately if a host is known good, but uses more memory. This function | 70 // immediately if a host is known good, but uses more memory. This function |
69 // can only be called if |pipeline_capability_map_| is empty. | 71 // can only be called if |pipeline_capability_map_| is empty. |
70 void SetNumPipelinedHostsToRemember(int max_size); | 72 void SetNumPipelinedHostsToRemember(int max_size); |
71 | 73 |
72 // ----------------------------- | 74 // ----------------------------- |
73 // HttpServerProperties methods: | 75 // HttpServerProperties methods: |
74 // ----------------------------- | 76 // ----------------------------- |
75 | 77 |
76 // Gets a weak pointer for this object. | 78 // Gets a weak pointer for this object. |
77 virtual base::WeakPtr<HttpServerProperties> GetWeakPtr() OVERRIDE; | 79 virtual base::WeakPtr<HttpServerProperties> GetWeakPtr() OVERRIDE; |
78 | 80 |
79 // Deletes all data. | 81 // Deletes all data. |
80 virtual void Clear() OVERRIDE; | 82 virtual void Clear() OVERRIDE; |
81 | 83 |
82 // Returns true if |server| supports SPDY. | 84 // Returns true if |server| supports SPDY. |
83 virtual bool SupportsSpdy(const HostPortPair& server) const OVERRIDE; | 85 virtual bool SupportsSpdy(const HostPortPair& server) OVERRIDE; |
84 | 86 |
85 // Add |server| into the persistent store. | 87 // Add |server| into the persistent store. |
86 virtual void SetSupportsSpdy(const HostPortPair& server, | 88 virtual void SetSupportsSpdy(const HostPortPair& server, |
87 bool support_spdy) OVERRIDE; | 89 bool support_spdy) OVERRIDE; |
88 | 90 |
89 // Returns true if |server| has an Alternate-Protocol header. | 91 // Returns true if |server| has an Alternate-Protocol header. |
90 virtual bool HasAlternateProtocol(const HostPortPair& server) OVERRIDE; | 92 virtual bool HasAlternateProtocol(const HostPortPair& server) OVERRIDE; |
91 | 93 |
92 // Returns the Alternate-Protocol and port for |server|. | 94 // Returns the Alternate-Protocol and port for |server|. |
93 // HasAlternateProtocol(server) must be true. | 95 // HasAlternateProtocol(server) must be true. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 const HostPortPair& origin, | 152 const HostPortPair& origin, |
151 HttpPipelinedHostCapability capability) OVERRIDE; | 153 HttpPipelinedHostCapability capability) OVERRIDE; |
152 | 154 |
153 virtual void ClearPipelineCapabilities() OVERRIDE; | 155 virtual void ClearPipelineCapabilities() OVERRIDE; |
154 | 156 |
155 virtual PipelineCapabilityMap GetPipelineCapabilityMap() const OVERRIDE; | 157 virtual PipelineCapabilityMap GetPipelineCapabilityMap() const OVERRIDE; |
156 | 158 |
157 private: | 159 private: |
158 typedef base::MRUCache< | 160 typedef base::MRUCache< |
159 HostPortPair, HttpPipelinedHostCapability> CachedPipelineCapabilityMap; | 161 HostPortPair, HttpPipelinedHostCapability> CachedPipelineCapabilityMap; |
160 // |spdy_servers_table_| has flattened representation of servers (host/port | 162 // |spdy_servers_map_| has flattened representation of servers (host, port) |
161 // pair) that either support or not support SPDY protocol. | 163 // that either support or not support SPDY protocol. |
162 typedef base::hash_map<std::string, bool> SpdyServerHostPortTable; | 164 typedef base::MRUCache<std::string, bool> SpdyServerHostPortMap; |
163 typedef std::map<HostPortPair, NetworkStats> ServerNetworkStatsMap; | 165 typedef std::map<HostPortPair, NetworkStats> ServerNetworkStatsMap; |
164 typedef std::map<HostPortPair, HostPortPair> CanonicalHostMap; | 166 typedef std::map<HostPortPair, HostPortPair> CanonicalHostMap; |
165 typedef std::vector<std::string> CanonicalSufficList; | 167 typedef std::vector<std::string> CanonicalSufficList; |
166 // List of broken host:ports and the times when they can be expired. | 168 // List of broken host:ports and the times when they can be expired. |
167 struct BrokenAlternateProtocolEntry { | 169 struct BrokenAlternateProtocolEntry { |
168 HostPortPair server; | 170 HostPortPair server; |
169 base::TimeTicks when; | 171 base::TimeTicks when; |
170 }; | 172 }; |
171 typedef std::list<BrokenAlternateProtocolEntry> | 173 typedef std::list<BrokenAlternateProtocolEntry> |
172 BrokenAlternateProtocolList; | 174 BrokenAlternateProtocolList; |
173 // Map from host:port to the number of times alternate protocol has | 175 // Map from host:port to the number of times alternate protocol has |
174 // been marked broken. | 176 // been marked broken. |
175 typedef std::map<HostPortPair, int> BrokenAlternateProtocolMap; | 177 typedef std::map<HostPortPair, int> BrokenAlternateProtocolMap; |
176 | 178 |
177 // Return the canonical host for |server|, or end if none exists. | 179 // Return the canonical host for |server|, or end if none exists. |
178 CanonicalHostMap::const_iterator GetCanonicalHost(HostPortPair server) const; | 180 CanonicalHostMap::const_iterator GetCanonicalHost(HostPortPair server) const; |
179 | 181 |
180 void ExpireBrokenAlternateProtocolMappings(); | 182 void ExpireBrokenAlternateProtocolMappings(); |
181 void ScheduleBrokenAlternateProtocolMappingsExpiration(); | 183 void ScheduleBrokenAlternateProtocolMappingsExpiration(); |
182 | 184 |
183 SpdyServerHostPortTable spdy_servers_table_; | 185 SpdyServerHostPortMap spdy_servers_map_; |
184 | 186 |
185 AlternateProtocolMap alternate_protocol_map_; | 187 AlternateProtocolMap alternate_protocol_map_; |
186 BrokenAlternateProtocolList broken_alternate_protocol_list_; | 188 BrokenAlternateProtocolList broken_alternate_protocol_list_; |
187 BrokenAlternateProtocolMap broken_alternate_protocol_map_; | 189 BrokenAlternateProtocolMap broken_alternate_protocol_map_; |
188 | 190 |
189 SpdySettingsMap spdy_settings_map_; | 191 SpdySettingsMap spdy_settings_map_; |
190 ServerNetworkStatsMap server_network_stats_map_; | 192 ServerNetworkStatsMap server_network_stats_map_; |
191 scoped_ptr<CachedPipelineCapabilityMap> pipeline_capability_map_; | 193 scoped_ptr<CachedPipelineCapabilityMap> pipeline_capability_map_; |
192 // Contains a map of servers which could share the same alternate protocol. | 194 // Contains a map of servers which could share the same alternate protocol. |
193 // Map from a Canonical host/port (host is some postfix of host names) to an | 195 // Map from a Canonical host/port (host is some postfix of host names) to an |
194 // actual origin, which has a plausible alternate protocol mapping. | 196 // actual origin, which has a plausible alternate protocol mapping. |
195 CanonicalHostMap canonical_host_to_origin_map_; | 197 CanonicalHostMap canonical_host_to_origin_map_; |
196 // Contains list of suffixes (for exmaple ".c.youtube.com", | 198 // Contains list of suffixes (for exmaple ".c.youtube.com", |
197 // ".googlevideo.com") of canoncial hostnames. | 199 // ".googlevideo.com") of canoncial hostnames. |
198 CanonicalSufficList canoncial_suffixes_; | 200 CanonicalSufficList canoncial_suffixes_; |
199 | 201 |
200 base::WeakPtrFactory<HttpServerPropertiesImpl> weak_ptr_factory_; | 202 base::WeakPtrFactory<HttpServerPropertiesImpl> weak_ptr_factory_; |
201 | 203 |
202 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesImpl); | 204 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesImpl); |
203 }; | 205 }; |
204 | 206 |
205 } // namespace net | 207 } // namespace net |
206 | 208 |
207 #endif // NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ | 209 #endif // NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ |
OLD | NEW |