Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Side by Side Diff: net/http/http_server_properties_impl.cc

Issue 858433004: Modify SetAlternateProtocol and HasAlternateProtocol behavior. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactor. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/http/http_server_properties_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 SSLConfig* ssl_config) { 220 SSLConfig* ssl_config) {
221 if (RequiresHTTP11(server)) { 221 if (RequiresHTTP11(server)) {
222 ForceHTTP11(ssl_config); 222 ForceHTTP11(ssl_config);
223 } 223 }
224 } 224 }
225 225
226 bool HttpServerPropertiesImpl::HasAlternateProtocol( 226 bool HttpServerPropertiesImpl::HasAlternateProtocol(
227 const HostPortPair& server) { 227 const HostPortPair& server) {
228 if (g_forced_alternate_protocol) 228 if (g_forced_alternate_protocol)
229 return true; 229 return true;
230 AlternateProtocolMap::const_iterator it = alternate_protocol_map_.Get(server); 230 AlternateProtocolMap::const_iterator it =
231 if (it != alternate_protocol_map_.end()) 231 GetAlternateProtocolIterator(server);
232 return it->second.probability >= alternate_protocol_probability_threshold_; 232 return it != alternate_protocol_map_.end() &&
233 233 it->second.probability >= alternate_protocol_probability_threshold_;
Bence 2015/01/23 16:45:58 Note functional change: in case there is an altern
Ryan Hamilton 2015/01/26 20:39:51 I might be misunderstanding, but it doesn't look l
Bence 2015/01/26 21:53:57 You are right, my bad.
234 auto canonical = GetCanonicalHost(server);
235 if (canonical == canonical_host_to_origin_map_.end() ||
236 canonical->second.Equals(server)) {
237 return false;
238 }
239
240 return HasAlternateProtocol(canonical->second);
241 } 234 }
242 235
243 std::string HttpServerPropertiesImpl::GetCanonicalSuffix( 236 std::string HttpServerPropertiesImpl::GetCanonicalSuffix(
244 const HostPortPair& server) { 237 const HostPortPair& server) {
245 // If this host ends with a canonical suffix, then return the canonical 238 // If this host ends with a canonical suffix, then return the canonical
246 // suffix. 239 // suffix.
247 for (size_t i = 0; i < canonical_suffixes_.size(); ++i) { 240 for (size_t i = 0; i < canonical_suffixes_.size(); ++i) {
248 std::string canonical_suffix = canonical_suffixes_[i]; 241 std::string canonical_suffix = canonical_suffixes_[i];
249 if (EndsWith(server.host(), canonical_suffixes_[i], false)) { 242 if (EndsWith(server.host(), canonical_suffixes_[i], false)) {
250 return canonical_suffix; 243 return canonical_suffix;
251 } 244 }
252 } 245 }
253 return std::string(); 246 return std::string();
254 } 247 }
255 248
256 AlternateProtocolInfo 249 AlternateProtocolInfo
257 HttpServerPropertiesImpl::GetAlternateProtocol( 250 HttpServerPropertiesImpl::GetAlternateProtocol(
258 const HostPortPair& server) { 251 const HostPortPair& server) {
259 DCHECK(HasAlternateProtocol(server)); 252 DCHECK(HasAlternateProtocol(server));
260 253
261 // First check the map. 254 AlternateProtocolMap::const_iterator it =
262 AlternateProtocolMap::iterator it = alternate_protocol_map_.Get(server); 255 GetAlternateProtocolIterator(server);
Ryan Hamilton 2015/01/26 20:39:51 This looks much cleaner. Nice! Makes me wonder if
263 if (it != alternate_protocol_map_.end()) 256 if (it != alternate_protocol_map_.end())
264 return it->second; 257 return it->second;
265 258
266 // Next check the canonical host.
267 CanonicalHostMap::const_iterator canonical_host = GetCanonicalHost(server);
268 if (canonical_host != canonical_host_to_origin_map_.end())
269 return alternate_protocol_map_.Get(canonical_host->second)->second;
270
271 // We must be forcing an alternate. 259 // We must be forcing an alternate.
272 DCHECK(g_forced_alternate_protocol); 260 DCHECK(g_forced_alternate_protocol);
273 return *g_forced_alternate_protocol; 261 return *g_forced_alternate_protocol;
274 } 262 }
275 263
276 void HttpServerPropertiesImpl::SetAlternateProtocol( 264 void HttpServerPropertiesImpl::SetAlternateProtocol(
277 const HostPortPair& server, 265 const HostPortPair& server,
278 uint16 alternate_port, 266 uint16 alternate_port,
279 AlternateProtocol alternate_protocol, 267 AlternateProtocol alternate_protocol,
280 double alternate_probability) { 268 double alternate_probability) {
281 269
282 AlternateProtocolInfo alternate(alternate_port, 270 AlternateProtocolInfo alternate(alternate_port,
283 alternate_protocol, 271 alternate_protocol,
284 alternate_probability); 272 alternate_probability);
285 if (HasAlternateProtocol(server)) { 273 AlternateProtocolMap::const_iterator it =
286 const AlternateProtocolInfo existing_alternate = 274 GetAlternateProtocolIterator(server);
287 GetAlternateProtocol(server); 275 if (it != alternate_protocol_map_.end()) {
276 const AlternateProtocolInfo existing_alternate = it->second;
Ryan Hamilton 2015/01/26 20:39:51 I think this change means that the g_force feature
Bence 2015/01/26 21:53:57 What behavior do you expect when there is g_force,
Ryan Hamilton 2015/01/27 00:25:17 Good question. All I was observing was that in the
288 277
289 if (existing_alternate.is_broken) { 278 if (existing_alternate.is_broken) {
290 DVLOG(1) << "Ignore alternate protocol since it's known to be broken."; 279 DVLOG(1) << "Ignore alternate protocol since it's known to be broken.";
291 return; 280 return;
292 } 281 }
293 282
294 if (!existing_alternate.Equals(alternate)) { 283 if (!existing_alternate.Equals(alternate)) {
295 LOG(WARNING) << "Changing the alternate protocol for: " 284 LOG(WARNING) << "Changing the alternate protocol for: "
296 << server.ToString() 285 << server.ToString()
297 << " from [Port: " << existing_alternate.port 286 << " from [Port: " << existing_alternate.port
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 const ServerNetworkStatsMap& 460 const ServerNetworkStatsMap&
472 HttpServerPropertiesImpl::server_network_stats_map() const { 461 HttpServerPropertiesImpl::server_network_stats_map() const {
473 return server_network_stats_map_; 462 return server_network_stats_map_;
474 } 463 }
475 464
476 void HttpServerPropertiesImpl::SetAlternateProtocolProbabilityThreshold( 465 void HttpServerPropertiesImpl::SetAlternateProtocolProbabilityThreshold(
477 double threshold) { 466 double threshold) {
478 alternate_protocol_probability_threshold_ = threshold; 467 alternate_protocol_probability_threshold_ = threshold;
479 } 468 }
480 469
470 AlternateProtocolMap::const_iterator
471 HttpServerPropertiesImpl::GetAlternateProtocolIterator(
472 const HostPortPair& server) {
473 AlternateProtocolMap::const_iterator it = alternate_protocol_map_.Get(server);
474 if (it != alternate_protocol_map_.end())
475 return it;
476
477 CanonicalHostMap::const_iterator canonical = GetCanonicalHost(server);
478 if (canonical != canonical_host_to_origin_map_.end())
479 return alternate_protocol_map_.Get(canonical->second);
480
481 return alternate_protocol_map_.end();
482 }
483
481 HttpServerPropertiesImpl::CanonicalHostMap::const_iterator 484 HttpServerPropertiesImpl::CanonicalHostMap::const_iterator
482 HttpServerPropertiesImpl::GetCanonicalHost(HostPortPair server) const { 485 HttpServerPropertiesImpl::GetCanonicalHost(HostPortPair server) const {
483 for (size_t i = 0; i < canonical_suffixes_.size(); ++i) { 486 for (size_t i = 0; i < canonical_suffixes_.size(); ++i) {
484 std::string canonical_suffix = canonical_suffixes_[i]; 487 std::string canonical_suffix = canonical_suffixes_[i];
485 if (EndsWith(server.host(), canonical_suffixes_[i], false)) { 488 if (EndsWith(server.host(), canonical_suffixes_[i], false)) {
486 HostPortPair canonical_host(canonical_suffix, server.port()); 489 HostPortPair canonical_host(canonical_suffix, server.port());
487 return canonical_host_to_origin_map_.find(canonical_host); 490 return canonical_host_to_origin_map_.find(canonical_host);
488 } 491 }
489 } 492 }
490 493
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 base::TimeDelta delay = when > now ? when - now : base::TimeDelta(); 531 base::TimeDelta delay = when > now ? when - now : base::TimeDelta();
529 base::MessageLoop::current()->PostDelayedTask( 532 base::MessageLoop::current()->PostDelayedTask(
530 FROM_HERE, 533 FROM_HERE,
531 base::Bind( 534 base::Bind(
532 &HttpServerPropertiesImpl::ExpireBrokenAlternateProtocolMappings, 535 &HttpServerPropertiesImpl::ExpireBrokenAlternateProtocolMappings,
533 weak_ptr_factory_.GetWeakPtr()), 536 weak_ptr_factory_.GetWeakPtr()),
534 delay); 537 delay);
535 } 538 }
536 539
537 } // namespace net 540 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_server_properties_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698