Index: net/http/http_pipelined_host_pool.cc |
diff --git a/net/http/http_pipelined_host_pool.cc b/net/http/http_pipelined_host_pool.cc |
index 116c5bb30b25cc48dcaed011d2d6ba28a965a390..f14d0ada1aca84126f6a592d75aef11d9b784342 100644 |
--- a/net/http/http_pipelined_host_pool.cc |
+++ b/net/http/http_pipelined_host_pool.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -8,6 +8,7 @@ |
#include "base/stl_util.h" |
#include "base/values.h" |
#include "net/http/http_pipelined_host_capability.h" |
+#include "net/http/http_pipelined_host_forced.h" |
#include "net/http/http_pipelined_host_impl.h" |
#include "net/http/http_server_properties.h" |
@@ -19,10 +20,15 @@ namespace net { |
class HttpPipelinedHostImplFactory : public HttpPipelinedHost::Factory { |
public: |
virtual HttpPipelinedHost* CreateNewHost( |
- HttpPipelinedHost::Delegate* delegate, const HostPortPair& origin, |
+ HttpPipelinedHost::Delegate* delegate, |
+ const HttpPipelinedHost::Key& key, |
HttpPipelinedConnection::Factory* factory, |
HttpPipelinedHostCapability capability) OVERRIDE { |
- return new HttpPipelinedHostImpl(delegate, origin, factory, capability); |
+ if (key.force_pipelining()) { |
+ return new HttpPipelinedHostForced(delegate, key, factory); |
+ } else { |
+ return new HttpPipelinedHostImpl(delegate, key, factory, capability); |
+ } |
} |
}; |
@@ -42,22 +48,22 @@ HttpPipelinedHostPool::~HttpPipelinedHostPool() { |
CHECK(host_map_.empty()); |
} |
-bool HttpPipelinedHostPool::IsHostEligibleForPipelining( |
- const HostPortPair& origin) { |
+bool HttpPipelinedHostPool::IsKeyEligibleForPipelining( |
+ const HttpPipelinedHost::Key& key) { |
HttpPipelinedHostCapability capability = |
- http_server_properties_->GetPipelineCapability(origin); |
+ http_server_properties_->GetPipelineCapability(key.origin()); |
return capability != PIPELINE_INCAPABLE; |
} |
HttpPipelinedStream* HttpPipelinedHostPool::CreateStreamOnNewPipeline( |
- const HostPortPair& origin, |
+ const HttpPipelinedHost::Key& key, |
ClientSocketHandle* connection, |
const SSLConfig& used_ssl_config, |
const ProxyInfo& used_proxy_info, |
const BoundNetLog& net_log, |
bool was_npn_negotiated, |
SSLClientSocket::NextProto protocol_negotiated) { |
- HttpPipelinedHost* host = GetPipelinedHost(origin, true); |
+ HttpPipelinedHost* host = GetPipelinedHost(key, true); |
if (!host) { |
return NULL; |
} |
@@ -68,17 +74,17 @@ HttpPipelinedStream* HttpPipelinedHostPool::CreateStreamOnNewPipeline( |
} |
HttpPipelinedStream* HttpPipelinedHostPool::CreateStreamOnExistingPipeline( |
- const HostPortPair& origin) { |
- HttpPipelinedHost* host = GetPipelinedHost(origin, false); |
+ const HttpPipelinedHost::Key& key) { |
+ HttpPipelinedHost* host = GetPipelinedHost(key, false); |
if (!host) { |
return NULL; |
} |
return host->CreateStreamOnExistingPipeline(); |
} |
-bool HttpPipelinedHostPool::IsExistingPipelineAvailableForOrigin( |
- const HostPortPair& origin) { |
- HttpPipelinedHost* host = GetPipelinedHost(origin, false); |
+bool HttpPipelinedHostPool::IsExistingPipelineAvailableForKey( |
+ const HttpPipelinedHost::Key& key) { |
+ HttpPipelinedHost* host = GetPipelinedHost(key, false); |
if (!host) { |
return false; |
} |
@@ -86,8 +92,8 @@ bool HttpPipelinedHostPool::IsExistingPipelineAvailableForOrigin( |
} |
HttpPipelinedHost* HttpPipelinedHostPool::GetPipelinedHost( |
- const HostPortPair& origin, bool create_if_not_found) { |
- HostMap::iterator host_it = host_map_.find(origin); |
+ const HttpPipelinedHost::Key& key, bool create_if_not_found) { |
+ HostMap::iterator host_it = host_map_.find(key); |
if (host_it != host_map_.end()) { |
CHECK(host_it->second); |
return host_it->second; |
@@ -96,33 +102,34 @@ HttpPipelinedHost* HttpPipelinedHostPool::GetPipelinedHost( |
} |
HttpPipelinedHostCapability capability = |
- http_server_properties_->GetPipelineCapability(origin); |
+ http_server_properties_->GetPipelineCapability(key.origin()); |
if (capability == PIPELINE_INCAPABLE) { |
return NULL; |
} |
HttpPipelinedHost* host = factory_->CreateNewHost( |
- this, origin, NULL, capability); |
- host_map_[origin] = host; |
+ this, key, NULL, capability); |
+ host_map_[key] = host; |
return host; |
} |
void HttpPipelinedHostPool::OnHostIdle(HttpPipelinedHost* host) { |
- const HostPortPair& origin = host->origin(); |
- CHECK(ContainsKey(host_map_, origin)); |
- host_map_.erase(origin); |
+ const HttpPipelinedHost::Key& key = host->GetKey(); |
+ CHECK(ContainsKey(host_map_, key)); |
+ host_map_.erase(key); |
delete host; |
} |
void HttpPipelinedHostPool::OnHostHasAdditionalCapacity( |
HttpPipelinedHost* host) { |
- delegate_->OnHttpPipelinedHostHasAdditionalCapacity(host->origin()); |
+ delegate_->OnHttpPipelinedHostHasAdditionalCapacity(host); |
} |
void HttpPipelinedHostPool::OnHostDeterminedCapability( |
HttpPipelinedHost* host, |
HttpPipelinedHostCapability capability) { |
- http_server_properties_->SetPipelineCapability(host->origin(), capability); |
+ http_server_properties_->SetPipelineCapability(host->GetKey().origin(), |
+ capability); |
} |
Value* HttpPipelinedHostPool::PipelineInfoToValue() const { |