| 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" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 } | 60 } |
| 61 | 61 |
| 62 // Add the entries from persisted data. | 62 // Add the entries from persisted data. |
| 63 for (AlternateProtocolMap::reverse_iterator it = | 63 for (AlternateProtocolMap::reverse_iterator it = |
| 64 alternate_protocol_map->rbegin(); | 64 alternate_protocol_map->rbegin(); |
| 65 it != alternate_protocol_map->rend(); ++it) { | 65 it != alternate_protocol_map->rend(); ++it) { |
| 66 alternate_protocol_map_.Put(it->first, it->second); | 66 alternate_protocol_map_.Put(it->first, it->second); |
| 67 } | 67 } |
| 68 | 68 |
| 69 // Attempt to find canonical servers. | 69 // Attempt to find canonical servers. |
| 70 int canonical_ports[] = { 80, 443 }; | 70 uint16 canonical_ports[] = { 80, 443 }; |
| 71 for (size_t i = 0; i < canonical_suffixes_.size(); ++i) { | 71 for (size_t i = 0; i < canonical_suffixes_.size(); ++i) { |
| 72 std::string canonical_suffix = canonical_suffixes_[i]; | 72 std::string canonical_suffix = canonical_suffixes_[i]; |
| 73 for (size_t j = 0; j < arraysize(canonical_ports); ++j) { | 73 for (size_t j = 0; j < arraysize(canonical_ports); ++j) { |
| 74 HostPortPair canonical_host(canonical_suffix, canonical_ports[j]); | 74 HostPortPair canonical_host(canonical_suffix, canonical_ports[j]); |
| 75 // If we already have a valid canonical server, we're done. | 75 // If we already have a valid canonical server, we're done. |
| 76 if (ContainsKey(canonical_host_to_origin_map_, canonical_host) && | 76 if (ContainsKey(canonical_host_to_origin_map_, canonical_host) && |
| 77 (alternate_protocol_map_.Peek(canonical_host_to_origin_map_[ | 77 (alternate_protocol_map_.Peek(canonical_host_to_origin_map_[ |
| 78 canonical_host]) != alternate_protocol_map_.end())) { | 78 canonical_host]) != alternate_protocol_map_.end())) { |
| 79 continue; | 79 continue; |
| 80 } | 80 } |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 canonical_host_to_origin_map_[canonical_host] = server; | 294 canonical_host_to_origin_map_[canonical_host] = server; |
| 295 break; | 295 break; |
| 296 } | 296 } |
| 297 } | 297 } |
| 298 } | 298 } |
| 299 | 299 |
| 300 void HttpServerPropertiesImpl::SetBrokenAlternateProtocol( | 300 void HttpServerPropertiesImpl::SetBrokenAlternateProtocol( |
| 301 const HostPortPair& server) { | 301 const HostPortPair& server) { |
| 302 AlternateProtocolMap::iterator it = alternate_protocol_map_.Get(server); | 302 AlternateProtocolMap::iterator it = alternate_protocol_map_.Get(server); |
| 303 if (it == alternate_protocol_map_.end()) { | 303 if (it == alternate_protocol_map_.end()) { |
| 304 LOG(DFATAL) << "Trying to mark unknown alternate protocol broken."; | 304 if (!HasAlternateProtocol(server)) { |
| 305 return; | 305 LOG(DFATAL) << "Trying to mark unknown alternate protocol broken."; |
| 306 return; |
| 307 } |
| 308 // This server's alternate protocol information is coming from a canonical |
| 309 // server. Add an entry in the map for this server explicitly so that |
| 310 // it can be marked as broken. |
| 311 it = alternate_protocol_map_.Put(server, GetAlternateProtocol(server)); |
| 306 } | 312 } |
| 307 it->second.is_broken = true; | 313 it->second.is_broken = true; |
| 308 int count = ++broken_alternate_protocol_map_[server]; | 314 int count = ++broken_alternate_protocol_map_[server]; |
| 309 base::TimeDelta delay = | 315 base::TimeDelta delay = |
| 310 base::TimeDelta::FromSeconds(kBrokenAlternateProtocolDelaySecs); | 316 base::TimeDelta::FromSeconds(kBrokenAlternateProtocolDelaySecs); |
| 311 BrokenAlternateProtocolEntry entry; | 317 BrokenAlternateProtocolEntry entry; |
| 312 entry.server = server; | 318 entry.server = server; |
| 313 entry.when = base::TimeTicks::Now() + delay * (1 << (count - 1)); | 319 entry.when = base::TimeTicks::Now() + delay * (1 << (count - 1)); |
| 314 broken_alternate_protocol_list_.push_back(entry); | 320 broken_alternate_protocol_list_.push_back(entry); |
| 315 | 321 |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 base::TimeDelta delay = when > now ? when - now : base::TimeDelta(); | 497 base::TimeDelta delay = when > now ? when - now : base::TimeDelta(); |
| 492 base::MessageLoop::current()->PostDelayedTask( | 498 base::MessageLoop::current()->PostDelayedTask( |
| 493 FROM_HERE, | 499 FROM_HERE, |
| 494 base::Bind( | 500 base::Bind( |
| 495 &HttpServerPropertiesImpl::ExpireBrokenAlternateProtocolMappings, | 501 &HttpServerPropertiesImpl::ExpireBrokenAlternateProtocolMappings, |
| 496 weak_ptr_factory_.GetWeakPtr()), | 502 weak_ptr_factory_.GetWeakPtr()), |
| 497 delay); | 503 delay); |
| 498 } | 504 } |
| 499 | 505 |
| 500 } // namespace net | 506 } // namespace net |
| OLD | NEW |