Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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_alternate_protocols.h" | 5 #include "net/http/http_alternate_protocols.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/stl_util-inl.h" | 8 #include "base/stl_util-inl.h" |
| 9 | 9 |
| 10 namespace net { | 10 namespace net { |
| 11 | 11 |
| 12 const char HttpAlternateProtocols::kHeader[] = "Alternate-Protocol"; | 12 const char HttpAlternateProtocols::kHeader[] = "Alternate-Protocol"; |
| 13 const char* const HttpAlternateProtocols::kProtocolStrings[] = { | 13 const char* const HttpAlternateProtocols::kProtocolStrings[] = { |
| 14 "npn-spdy/1", | 14 "npn-spdy/1", |
| 15 "npn-spdy/2", | 15 "npn-spdy/2", |
| 16 }; | 16 }; |
| 17 | 17 |
| 18 // static | |
| 19 HttpAlternateProtocols::PortProtocolPair* | |
| 20 HttpAlternateProtocols::forced_alternate_protocol_ = NULL; | |
| 21 | |
| 18 HttpAlternateProtocols::HttpAlternateProtocols() {} | 22 HttpAlternateProtocols::HttpAlternateProtocols() {} |
| 19 HttpAlternateProtocols::~HttpAlternateProtocols() {} | 23 HttpAlternateProtocols::~HttpAlternateProtocols() {} |
| 20 | 24 |
| 21 bool HttpAlternateProtocols::HasAlternateProtocolFor( | 25 bool HttpAlternateProtocols::HasAlternateProtocolFor( |
| 22 const HostPortPair& http_host_port_pair) const { | 26 const HostPortPair& http_host_port_pair) const { |
| 23 return ContainsKey(protocol_map_, http_host_port_pair); | 27 return ContainsKey(protocol_map_, http_host_port_pair) || |
| 28 forced_alternate_protocol_; | |
| 24 } | 29 } |
| 25 | 30 |
| 26 bool HttpAlternateProtocols::HasAlternateProtocolFor( | 31 bool HttpAlternateProtocols::HasAlternateProtocolFor( |
| 27 const std::string& host, uint16 port) const { | 32 const std::string& host, uint16 port) const { |
| 28 HostPortPair http_host_port_pair(host, port); | 33 HostPortPair http_host_port_pair(host, port); |
| 29 return HasAlternateProtocolFor(http_host_port_pair); | 34 return HasAlternateProtocolFor(http_host_port_pair); |
| 30 } | 35 } |
| 31 | 36 |
| 32 HttpAlternateProtocols::PortProtocolPair | 37 HttpAlternateProtocols::PortProtocolPair |
| 33 HttpAlternateProtocols::GetAlternateProtocolFor( | 38 HttpAlternateProtocols::GetAlternateProtocolFor( |
| 34 const HostPortPair& http_host_port_pair) const { | 39 const HostPortPair& http_host_port_pair) const { |
| 35 DCHECK(ContainsKey(protocol_map_, http_host_port_pair)); | 40 DCHECK(HasAlternateProtocolFor(http_host_port_pair)); |
| 36 return protocol_map_.find(http_host_port_pair)->second; | 41 |
| 42 // First check the map. | |
| 43 ProtocolMap::const_iterator it = protocol_map_.find(http_host_port_pair); | |
| 44 if (it != protocol_map_.end()) | |
| 45 return it->second; | |
| 46 | |
| 47 // We must be forcing an alternate. | |
| 48 DCHECK(forced_alternate_protocol_); | |
| 49 return *forced_alternate_protocol_; | |
| 37 } | 50 } |
| 38 | 51 |
| 39 HttpAlternateProtocols::PortProtocolPair | 52 HttpAlternateProtocols::PortProtocolPair |
| 40 HttpAlternateProtocols::GetAlternateProtocolFor( | 53 HttpAlternateProtocols::GetAlternateProtocolFor( |
| 41 const std::string& host, uint16 port) const { | 54 const std::string& host, uint16 port) const { |
| 42 HostPortPair http_host_port_pair(host, port); | 55 HostPortPair http_host_port_pair(host, port); |
| 43 return GetAlternateProtocolFor(http_host_port_pair); | 56 return GetAlternateProtocolFor(http_host_port_pair); |
| 44 } | 57 } |
| 45 | 58 |
| 46 void HttpAlternateProtocols::SetAlternateProtocolFor( | 59 void HttpAlternateProtocols::SetAlternateProtocolFor( |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 76 } | 89 } |
| 77 | 90 |
| 78 protocol_map_[http_host_port_pair] = alternate; | 91 protocol_map_[http_host_port_pair] = alternate; |
| 79 } | 92 } |
| 80 | 93 |
| 81 void HttpAlternateProtocols::MarkBrokenAlternateProtocolFor( | 94 void HttpAlternateProtocols::MarkBrokenAlternateProtocolFor( |
| 82 const HostPortPair& http_host_port_pair) { | 95 const HostPortPair& http_host_port_pair) { |
| 83 protocol_map_[http_host_port_pair].protocol = BROKEN; | 96 protocol_map_[http_host_port_pair].protocol = BROKEN; |
| 84 } | 97 } |
| 85 | 98 |
| 99 // static | |
| 100 void HttpAlternateProtocols::ForceAlternateProtocol( | |
| 101 const PortProtocolPair& pair) { | |
| 102 // Note: we're going to leak this. | |
|
willchan no longer on Chromium
2010/08/22 16:27:33
Call delete forced_alternate_protocol_ here, in ca
| |
| 103 forced_alternate_protocol_ = new PortProtocolPair(pair); | |
| 104 } | |
| 105 | |
| 106 // static | |
| 107 void HttpAlternateProtocols::DisableForcedAlternateProtocol() { | |
| 108 delete forced_alternate_protocol_; | |
| 109 forced_alternate_protocol_ = NULL; | |
| 110 } | |
| 111 | |
| 86 } // namespace net | 112 } // namespace net |
| OLD | NEW |