| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 server_network_stats_map_(ServerNetworkStatsMap::NO_AUTO_EVICT), | 31 server_network_stats_map_(ServerNetworkStatsMap::NO_AUTO_EVICT), |
| 32 quic_server_info_map_(QuicServerInfoMap::NO_AUTO_EVICT), | 32 quic_server_info_map_(QuicServerInfoMap::NO_AUTO_EVICT), |
| 33 max_server_configs_stored_in_properties_(kMaxQuicServersToPersist) { | 33 max_server_configs_stored_in_properties_(kMaxQuicServersToPersist) { |
| 34 canonical_suffixes_.push_back(".ggpht.com"); | 34 canonical_suffixes_.push_back(".ggpht.com"); |
| 35 canonical_suffixes_.push_back(".c.youtube.com"); | 35 canonical_suffixes_.push_back(".c.youtube.com"); |
| 36 canonical_suffixes_.push_back(".googlevideo.com"); | 36 canonical_suffixes_.push_back(".googlevideo.com"); |
| 37 canonical_suffixes_.push_back(".googleusercontent.com"); | 37 canonical_suffixes_.push_back(".googleusercontent.com"); |
| 38 } | 38 } |
| 39 | 39 |
| 40 HttpServerPropertiesImpl::~HttpServerPropertiesImpl() { | 40 HttpServerPropertiesImpl::~HttpServerPropertiesImpl() { |
| 41 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 41 } | 42 } |
| 42 | 43 |
| 43 void HttpServerPropertiesImpl::SetSpdyServers( | 44 void HttpServerPropertiesImpl::SetSpdyServers( |
| 44 std::vector<std::string>* spdy_servers, | 45 std::vector<std::string>* spdy_servers, |
| 45 bool support_spdy) { | 46 bool support_spdy) { |
| 46 DCHECK(CalledOnValidThread()); | 47 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 47 if (!spdy_servers) | 48 if (!spdy_servers) |
| 48 return; | 49 return; |
| 49 | 50 |
| 50 // Add the entries from persisted data. | 51 // Add the entries from persisted data. |
| 51 SpdyServersMap spdy_servers_map(SpdyServersMap::NO_AUTO_EVICT); | 52 SpdyServersMap spdy_servers_map(SpdyServersMap::NO_AUTO_EVICT); |
| 52 for (std::vector<std::string>::reverse_iterator it = spdy_servers->rbegin(); | 53 for (std::vector<std::string>::reverse_iterator it = spdy_servers->rbegin(); |
| 53 it != spdy_servers->rend(); ++it) { | 54 it != spdy_servers->rend(); ++it) { |
| 54 spdy_servers_map.Put(*it, support_spdy); | 55 spdy_servers_map.Put(*it, support_spdy); |
| 55 } | 56 } |
| 56 | 57 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 it != temp_map.rend(); ++it) { | 175 it != temp_map.rend(); ++it) { |
| 175 if (quic_server_info_map_.Get(it->first) == quic_server_info_map_.end()) { | 176 if (quic_server_info_map_.Get(it->first) == quic_server_info_map_.end()) { |
| 176 quic_server_info_map_.Put(it->first, it->second); | 177 quic_server_info_map_.Put(it->first, it->second); |
| 177 } | 178 } |
| 178 } | 179 } |
| 179 } | 180 } |
| 180 | 181 |
| 181 void HttpServerPropertiesImpl::GetSpdyServerList( | 182 void HttpServerPropertiesImpl::GetSpdyServerList( |
| 182 base::ListValue* spdy_server_list, | 183 base::ListValue* spdy_server_list, |
| 183 size_t max_size) const { | 184 size_t max_size) const { |
| 184 DCHECK(CalledOnValidThread()); | 185 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 185 DCHECK(spdy_server_list); | 186 DCHECK(spdy_server_list); |
| 186 spdy_server_list->Clear(); | 187 spdy_server_list->Clear(); |
| 187 size_t count = 0; | 188 size_t count = 0; |
| 188 // Get the list of servers (scheme/host/port) that support SPDY. | 189 // Get the list of servers (scheme/host/port) that support SPDY. |
| 189 for (SpdyServersMap::const_iterator it = spdy_servers_map_.begin(); | 190 for (SpdyServersMap::const_iterator it = spdy_servers_map_.begin(); |
| 190 it != spdy_servers_map_.end() && count < max_size; ++it) { | 191 it != spdy_servers_map_.end() && count < max_size; ++it) { |
| 191 const std::string spdy_server = it->first; | 192 const std::string spdy_server = it->first; |
| 192 if (it->second) { | 193 if (it->second) { |
| 193 spdy_server_list->AppendString(spdy_server); | 194 spdy_server_list->AppendString(spdy_server); |
| 194 ++count; | 195 ++count; |
| 195 } | 196 } |
| 196 } | 197 } |
| 197 } | 198 } |
| 198 | 199 |
| 199 void HttpServerPropertiesImpl::Clear() { | 200 void HttpServerPropertiesImpl::Clear() { |
| 200 DCHECK(CalledOnValidThread()); | 201 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 201 spdy_servers_map_.Clear(); | 202 spdy_servers_map_.Clear(); |
| 202 alternative_service_map_.Clear(); | 203 alternative_service_map_.Clear(); |
| 203 canonical_host_to_origin_map_.clear(); | 204 canonical_host_to_origin_map_.clear(); |
| 204 last_quic_address_ = IPAddress(); | 205 last_quic_address_ = IPAddress(); |
| 205 server_network_stats_map_.Clear(); | 206 server_network_stats_map_.Clear(); |
| 206 quic_server_info_map_.Clear(); | 207 quic_server_info_map_.Clear(); |
| 207 } | 208 } |
| 208 | 209 |
| 209 bool HttpServerPropertiesImpl::SupportsRequestPriority( | 210 bool HttpServerPropertiesImpl::SupportsRequestPriority( |
| 210 const url::SchemeHostPort& server) { | 211 const url::SchemeHostPort& server) { |
| 211 DCHECK(CalledOnValidThread()); | 212 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 212 if (server.host().empty()) | 213 if (server.host().empty()) |
| 213 return false; | 214 return false; |
| 214 | 215 |
| 215 if (GetSupportsSpdy(server)) | 216 if (GetSupportsSpdy(server)) |
| 216 return true; | 217 return true; |
| 217 const AlternativeServiceInfoVector alternative_service_info_vector = | 218 const AlternativeServiceInfoVector alternative_service_info_vector = |
| 218 GetAlternativeServiceInfos(server); | 219 GetAlternativeServiceInfos(server); |
| 219 for (const AlternativeServiceInfo& alternative_service_info : | 220 for (const AlternativeServiceInfo& alternative_service_info : |
| 220 alternative_service_info_vector) { | 221 alternative_service_info_vector) { |
| 221 if (alternative_service_info.alternative_service.protocol == kProtoQUIC) { | 222 if (alternative_service_info.alternative_service.protocol == kProtoQUIC) { |
| 222 return true; | 223 return true; |
| 223 } | 224 } |
| 224 } | 225 } |
| 225 return false; | 226 return false; |
| 226 } | 227 } |
| 227 | 228 |
| 228 bool HttpServerPropertiesImpl::GetSupportsSpdy( | 229 bool HttpServerPropertiesImpl::GetSupportsSpdy( |
| 229 const url::SchemeHostPort& server) { | 230 const url::SchemeHostPort& server) { |
| 230 DCHECK(CalledOnValidThread()); | 231 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 231 if (server.host().empty()) | 232 if (server.host().empty()) |
| 232 return false; | 233 return false; |
| 233 | 234 |
| 234 SpdyServersMap::iterator spdy_server = | 235 SpdyServersMap::iterator spdy_server = |
| 235 spdy_servers_map_.Get(server.Serialize()); | 236 spdy_servers_map_.Get(server.Serialize()); |
| 236 return spdy_server != spdy_servers_map_.end() && spdy_server->second; | 237 return spdy_server != spdy_servers_map_.end() && spdy_server->second; |
| 237 } | 238 } |
| 238 | 239 |
| 239 void HttpServerPropertiesImpl::SetSupportsSpdy( | 240 void HttpServerPropertiesImpl::SetSupportsSpdy( |
| 240 const url::SchemeHostPort& server, | 241 const url::SchemeHostPort& server, |
| 241 bool support_spdy) { | 242 bool support_spdy) { |
| 242 DCHECK(CalledOnValidThread()); | 243 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 243 if (server.host().empty()) | 244 if (server.host().empty()) |
| 244 return; | 245 return; |
| 245 | 246 |
| 246 SpdyServersMap::iterator spdy_server = | 247 SpdyServersMap::iterator spdy_server = |
| 247 spdy_servers_map_.Get(server.Serialize()); | 248 spdy_servers_map_.Get(server.Serialize()); |
| 248 if ((spdy_server != spdy_servers_map_.end()) && | 249 if ((spdy_server != spdy_servers_map_.end()) && |
| 249 (spdy_server->second == support_spdy)) { | 250 (spdy_server->second == support_spdy)) { |
| 250 return; | 251 return; |
| 251 } | 252 } |
| 252 // Cache the data. | 253 // Cache the data. |
| 253 spdy_servers_map_.Put(server.Serialize(), support_spdy); | 254 spdy_servers_map_.Put(server.Serialize(), support_spdy); |
| 254 } | 255 } |
| 255 | 256 |
| 256 bool HttpServerPropertiesImpl::RequiresHTTP11( | 257 bool HttpServerPropertiesImpl::RequiresHTTP11( |
| 257 const HostPortPair& host_port_pair) { | 258 const HostPortPair& host_port_pair) { |
| 258 DCHECK(CalledOnValidThread()); | 259 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 259 if (host_port_pair.host().empty()) | 260 if (host_port_pair.host().empty()) |
| 260 return false; | 261 return false; |
| 261 | 262 |
| 262 return (http11_servers_.find(host_port_pair) != http11_servers_.end()); | 263 return (http11_servers_.find(host_port_pair) != http11_servers_.end()); |
| 263 } | 264 } |
| 264 | 265 |
| 265 void HttpServerPropertiesImpl::SetHTTP11Required( | 266 void HttpServerPropertiesImpl::SetHTTP11Required( |
| 266 const HostPortPair& host_port_pair) { | 267 const HostPortPair& host_port_pair) { |
| 267 DCHECK(CalledOnValidThread()); | 268 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 268 if (host_port_pair.host().empty()) | 269 if (host_port_pair.host().empty()) |
| 269 return; | 270 return; |
| 270 | 271 |
| 271 http11_servers_.insert(host_port_pair); | 272 http11_servers_.insert(host_port_pair); |
| 272 } | 273 } |
| 273 | 274 |
| 274 void HttpServerPropertiesImpl::MaybeForceHTTP11(const HostPortPair& server, | 275 void HttpServerPropertiesImpl::MaybeForceHTTP11(const HostPortPair& server, |
| 275 SSLConfig* ssl_config) { | 276 SSLConfig* ssl_config) { |
| 276 if (RequiresHTTP11(server)) { | 277 if (RequiresHTTP11(server)) { |
| 277 ForceHTTP11(ssl_config); | 278 ForceHTTP11(ssl_config); |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 691 if (map_it->second.empty()) { | 692 if (map_it->second.empty()) { |
| 692 RemoveCanonicalHost(map_it->first); | 693 RemoveCanonicalHost(map_it->first); |
| 693 map_it = alternative_service_map_.Erase(map_it); | 694 map_it = alternative_service_map_.Erase(map_it); |
| 694 continue; | 695 continue; |
| 695 } | 696 } |
| 696 ++map_it; | 697 ++map_it; |
| 697 } | 698 } |
| 698 } | 699 } |
| 699 | 700 |
| 700 } // namespace net | 701 } // namespace net |
| OLD | NEW |