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 "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "base/stl_util.h" | 11 #include "base/stl_util.h" |
12 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
14 #include "net/http/http_pipelined_host_capability.h" | |
15 | 14 |
16 namespace net { | 15 namespace net { |
17 | 16 |
18 namespace { | 17 namespace { |
19 | 18 |
20 // TODO(simonjam): Run experiments with different values of this to see what | |
21 // value is good at avoiding evictions without eating too much memory. Until | |
22 // then, this is just a bad guess. | |
23 const int kDefaultNumHostsToRemember = 200; | |
24 | |
25 const uint64 kBrokenAlternateProtocolDelaySecs = 300; | 19 const uint64 kBrokenAlternateProtocolDelaySecs = 300; |
26 | 20 |
27 } // namespace | 21 } // namespace |
28 | 22 |
29 HttpServerPropertiesImpl::HttpServerPropertiesImpl() | 23 HttpServerPropertiesImpl::HttpServerPropertiesImpl() |
30 : spdy_servers_map_(SpdyServerHostPortMap::NO_AUTO_EVICT), | 24 : spdy_servers_map_(SpdyServerHostPortMap::NO_AUTO_EVICT), |
31 alternate_protocol_map_(AlternateProtocolMap::NO_AUTO_EVICT), | 25 alternate_protocol_map_(AlternateProtocolMap::NO_AUTO_EVICT), |
32 spdy_settings_map_(SpdySettingsMap::NO_AUTO_EVICT), | 26 spdy_settings_map_(SpdySettingsMap::NO_AUTO_EVICT), |
33 pipeline_capability_map_( | |
34 new CachedPipelineCapabilityMap(kDefaultNumHostsToRemember)), | |
35 weak_ptr_factory_(this) { | 27 weak_ptr_factory_(this) { |
36 canoncial_suffixes_.push_back(".c.youtube.com"); | 28 canoncial_suffixes_.push_back(".c.youtube.com"); |
37 canoncial_suffixes_.push_back(".googlevideo.com"); | 29 canoncial_suffixes_.push_back(".googlevideo.com"); |
38 } | 30 } |
39 | 31 |
40 HttpServerPropertiesImpl::~HttpServerPropertiesImpl() { | 32 HttpServerPropertiesImpl::~HttpServerPropertiesImpl() { |
41 } | 33 } |
42 | 34 |
43 void HttpServerPropertiesImpl::InitializeSpdyServers( | 35 void HttpServerPropertiesImpl::InitializeSpdyServers( |
44 std::vector<std::string>* spdy_servers, | 36 std::vector<std::string>* spdy_servers, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 } | 92 } |
101 | 93 |
102 void HttpServerPropertiesImpl::InitializeSpdySettingsServers( | 94 void HttpServerPropertiesImpl::InitializeSpdySettingsServers( |
103 SpdySettingsMap* spdy_settings_map) { | 95 SpdySettingsMap* spdy_settings_map) { |
104 for (SpdySettingsMap::reverse_iterator it = spdy_settings_map->rbegin(); | 96 for (SpdySettingsMap::reverse_iterator it = spdy_settings_map->rbegin(); |
105 it != spdy_settings_map->rend(); ++it) { | 97 it != spdy_settings_map->rend(); ++it) { |
106 spdy_settings_map_.Put(it->first, it->second); | 98 spdy_settings_map_.Put(it->first, it->second); |
107 } | 99 } |
108 } | 100 } |
109 | 101 |
110 void HttpServerPropertiesImpl::InitializePipelineCapabilities( | |
111 const PipelineCapabilityMap* pipeline_capability_map) { | |
112 PipelineCapabilityMap::const_iterator it; | |
113 pipeline_capability_map_->Clear(); | |
114 for (it = pipeline_capability_map->begin(); | |
115 it != pipeline_capability_map->end(); ++it) { | |
116 pipeline_capability_map_->Put(it->first, it->second); | |
117 } | |
118 } | |
119 | |
120 void HttpServerPropertiesImpl::SetNumPipelinedHostsToRemember(int max_size) { | |
121 DCHECK(pipeline_capability_map_->empty()); | |
122 pipeline_capability_map_.reset(new CachedPipelineCapabilityMap(max_size)); | |
123 } | |
124 | |
125 void HttpServerPropertiesImpl::GetSpdyServerList( | 102 void HttpServerPropertiesImpl::GetSpdyServerList( |
126 base::ListValue* spdy_server_list, | 103 base::ListValue* spdy_server_list, |
127 size_t max_size) const { | 104 size_t max_size) const { |
128 DCHECK(CalledOnValidThread()); | 105 DCHECK(CalledOnValidThread()); |
129 DCHECK(spdy_server_list); | 106 DCHECK(spdy_server_list); |
130 spdy_server_list->Clear(); | 107 spdy_server_list->Clear(); |
131 size_t count = 0; | 108 size_t count = 0; |
132 // Get the list of servers (host/port) that support SPDY. | 109 // Get the list of servers (host/port) that support SPDY. |
133 for (SpdyServerHostPortMap::const_iterator it = spdy_servers_map_.begin(); | 110 for (SpdyServerHostPortMap::const_iterator it = spdy_servers_map_.begin(); |
134 it != spdy_servers_map_.end() && count < max_size; ++it) { | 111 it != spdy_servers_map_.end() && count < max_size; ++it) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 | 146 |
170 base::WeakPtr<HttpServerProperties> HttpServerPropertiesImpl::GetWeakPtr() { | 147 base::WeakPtr<HttpServerProperties> HttpServerPropertiesImpl::GetWeakPtr() { |
171 return weak_ptr_factory_.GetWeakPtr(); | 148 return weak_ptr_factory_.GetWeakPtr(); |
172 } | 149 } |
173 | 150 |
174 void HttpServerPropertiesImpl::Clear() { | 151 void HttpServerPropertiesImpl::Clear() { |
175 DCHECK(CalledOnValidThread()); | 152 DCHECK(CalledOnValidThread()); |
176 spdy_servers_map_.Clear(); | 153 spdy_servers_map_.Clear(); |
177 alternate_protocol_map_.Clear(); | 154 alternate_protocol_map_.Clear(); |
178 spdy_settings_map_.Clear(); | 155 spdy_settings_map_.Clear(); |
179 pipeline_capability_map_->Clear(); | |
180 } | 156 } |
181 | 157 |
182 bool HttpServerPropertiesImpl::SupportsSpdy( | 158 bool HttpServerPropertiesImpl::SupportsSpdy( |
183 const net::HostPortPair& host_port_pair) { | 159 const net::HostPortPair& host_port_pair) { |
184 DCHECK(CalledOnValidThread()); | 160 DCHECK(CalledOnValidThread()); |
185 if (host_port_pair.host().empty()) | 161 if (host_port_pair.host().empty()) |
186 return false; | 162 return false; |
187 std::string spdy_server = GetFlattenedSpdyServer(host_port_pair); | 163 std::string spdy_server = GetFlattenedSpdyServer(host_port_pair); |
188 | 164 |
189 SpdyServerHostPortMap::iterator spdy_host_port = | 165 SpdyServerHostPortMap::iterator spdy_host_port = |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 HttpServerPropertiesImpl::GetServerNetworkStats( | 373 HttpServerPropertiesImpl::GetServerNetworkStats( |
398 const HostPortPair& host_port_pair) const { | 374 const HostPortPair& host_port_pair) const { |
399 ServerNetworkStatsMap::const_iterator it = | 375 ServerNetworkStatsMap::const_iterator it = |
400 server_network_stats_map_.find(host_port_pair); | 376 server_network_stats_map_.find(host_port_pair); |
401 if (it == server_network_stats_map_.end()) { | 377 if (it == server_network_stats_map_.end()) { |
402 return NULL; | 378 return NULL; |
403 } | 379 } |
404 return &it->second; | 380 return &it->second; |
405 } | 381 } |
406 | 382 |
407 HttpPipelinedHostCapability HttpServerPropertiesImpl::GetPipelineCapability( | |
408 const HostPortPair& origin) { | |
409 HttpPipelinedHostCapability capability = PIPELINE_UNKNOWN; | |
410 CachedPipelineCapabilityMap::const_iterator it = | |
411 pipeline_capability_map_->Get(origin); | |
412 if (it != pipeline_capability_map_->end()) { | |
413 capability = it->second; | |
414 } | |
415 return capability; | |
416 } | |
417 | |
418 void HttpServerPropertiesImpl::SetPipelineCapability( | |
419 const HostPortPair& origin, | |
420 HttpPipelinedHostCapability capability) { | |
421 CachedPipelineCapabilityMap::iterator it = | |
422 pipeline_capability_map_->Peek(origin); | |
423 if (it == pipeline_capability_map_->end() || | |
424 it->second != PIPELINE_INCAPABLE) { | |
425 pipeline_capability_map_->Put(origin, capability); | |
426 } | |
427 } | |
428 | |
429 void HttpServerPropertiesImpl::ClearPipelineCapabilities() { | |
430 pipeline_capability_map_->Clear(); | |
431 } | |
432 | |
433 PipelineCapabilityMap | |
434 HttpServerPropertiesImpl::GetPipelineCapabilityMap() const { | |
435 PipelineCapabilityMap result; | |
436 CachedPipelineCapabilityMap::const_iterator it; | |
437 for (it = pipeline_capability_map_->begin(); | |
438 it != pipeline_capability_map_->end(); ++it) { | |
439 result[it->first] = it->second; | |
440 } | |
441 return result; | |
442 } | |
443 | |
444 HttpServerPropertiesImpl::CanonicalHostMap::const_iterator | 383 HttpServerPropertiesImpl::CanonicalHostMap::const_iterator |
445 HttpServerPropertiesImpl::GetCanonicalHost(HostPortPair server) const { | 384 HttpServerPropertiesImpl::GetCanonicalHost(HostPortPair server) const { |
446 for (size_t i = 0; i < canoncial_suffixes_.size(); ++i) { | 385 for (size_t i = 0; i < canoncial_suffixes_.size(); ++i) { |
447 std::string canonical_suffix = canoncial_suffixes_[i]; | 386 std::string canonical_suffix = canoncial_suffixes_[i]; |
448 if (EndsWith(server.host(), canoncial_suffixes_[i], false)) { | 387 if (EndsWith(server.host(), canoncial_suffixes_[i], false)) { |
449 HostPortPair canonical_host(canonical_suffix, server.port()); | 388 HostPortPair canonical_host(canonical_suffix, server.port()); |
450 return canonical_host_to_origin_map_.find(canonical_host); | 389 return canonical_host_to_origin_map_.find(canonical_host); |
451 } | 390 } |
452 } | 391 } |
453 | 392 |
(...skipping 25 matching lines...) Expand all Loading... |
479 base::TimeDelta delay = when > now ? when - now : base::TimeDelta(); | 418 base::TimeDelta delay = when > now ? when - now : base::TimeDelta(); |
480 base::MessageLoop::current()->PostDelayedTask( | 419 base::MessageLoop::current()->PostDelayedTask( |
481 FROM_HERE, | 420 FROM_HERE, |
482 base::Bind( | 421 base::Bind( |
483 &HttpServerPropertiesImpl::ExpireBrokenAlternateProtocolMappings, | 422 &HttpServerPropertiesImpl::ExpireBrokenAlternateProtocolMappings, |
484 weak_ptr_factory_.GetWeakPtr()), | 423 weak_ptr_factory_.GetWeakPtr()), |
485 delay); | 424 delay); |
486 } | 425 } |
487 | 426 |
488 } // namespace net | 427 } // namespace net |
OLD | NEW |