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

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

Issue 275953002: Remove HTTP pipelining support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "net/http/http_pipelined_host_pool.h"
6
7 #include "base/logging.h"
8 #include "base/stl_util.h"
9 #include "base/values.h"
10 #include "net/http/http_pipelined_host_capability.h"
11 #include "net/http/http_pipelined_host_forced.h"
12 #include "net/http/http_pipelined_host_impl.h"
13 #include "net/http/http_server_properties.h"
14
15 namespace net {
16
17 class HttpPipelinedHostImplFactory : public HttpPipelinedHost::Factory {
18 public:
19 virtual HttpPipelinedHost* CreateNewHost(
20 HttpPipelinedHost::Delegate* delegate,
21 const HttpPipelinedHost::Key& key,
22 HttpPipelinedConnection::Factory* factory,
23 HttpPipelinedHostCapability capability,
24 bool force_pipelining) OVERRIDE {
25 if (force_pipelining) {
26 return new HttpPipelinedHostForced(delegate, key, factory);
27 } else {
28 return new HttpPipelinedHostImpl(delegate, key, factory, capability);
29 }
30 }
31 };
32
33 HttpPipelinedHostPool::HttpPipelinedHostPool(
34 Delegate* delegate,
35 HttpPipelinedHost::Factory* factory,
36 const base::WeakPtr<HttpServerProperties>& http_server_properties,
37 bool force_pipelining)
38 : delegate_(delegate),
39 factory_(factory),
40 http_server_properties_(http_server_properties),
41 force_pipelining_(force_pipelining) {
42 if (!factory) {
43 factory_.reset(new HttpPipelinedHostImplFactory);
44 }
45 }
46
47 HttpPipelinedHostPool::~HttpPipelinedHostPool() {
48 CHECK(host_map_.empty());
49 }
50
51 bool HttpPipelinedHostPool::IsKeyEligibleForPipelining(
52 const HttpPipelinedHost::Key& key) {
53 HttpPipelinedHostCapability capability =
54 http_server_properties_->GetPipelineCapability(key.origin());
55 return capability != PIPELINE_INCAPABLE;
56 }
57
58 HttpPipelinedStream* HttpPipelinedHostPool::CreateStreamOnNewPipeline(
59 const HttpPipelinedHost::Key& key,
60 ClientSocketHandle* connection,
61 const SSLConfig& used_ssl_config,
62 const ProxyInfo& used_proxy_info,
63 const BoundNetLog& net_log,
64 bool was_npn_negotiated,
65 NextProto protocol_negotiated) {
66 HttpPipelinedHost* host = GetPipelinedHost(key, true);
67 if (!host) {
68 return NULL;
69 }
70 return host->CreateStreamOnNewPipeline(connection, used_ssl_config,
71 used_proxy_info, net_log,
72 was_npn_negotiated,
73 protocol_negotiated);
74 }
75
76 HttpPipelinedStream* HttpPipelinedHostPool::CreateStreamOnExistingPipeline(
77 const HttpPipelinedHost::Key& key) {
78 HttpPipelinedHost* host = GetPipelinedHost(key, false);
79 if (!host) {
80 return NULL;
81 }
82 return host->CreateStreamOnExistingPipeline();
83 }
84
85 bool HttpPipelinedHostPool::IsExistingPipelineAvailableForKey(
86 const HttpPipelinedHost::Key& key) {
87 HttpPipelinedHost* host = GetPipelinedHost(key, false);
88 if (!host) {
89 return false;
90 }
91 return host->IsExistingPipelineAvailable();
92 }
93
94 HttpPipelinedHost* HttpPipelinedHostPool::GetPipelinedHost(
95 const HttpPipelinedHost::Key& key, bool create_if_not_found) {
96 HostMap::iterator host_it = host_map_.find(key);
97 if (host_it != host_map_.end()) {
98 CHECK(host_it->second);
99 return host_it->second;
100 } else if (!create_if_not_found) {
101 return NULL;
102 }
103
104 HttpPipelinedHostCapability capability =
105 http_server_properties_->GetPipelineCapability(key.origin());
106 if (capability == PIPELINE_INCAPABLE) {
107 return NULL;
108 }
109
110 HttpPipelinedHost* host = factory_->CreateNewHost(
111 this, key, NULL, capability, force_pipelining_);
112 host_map_[key] = host;
113 return host;
114 }
115
116 void HttpPipelinedHostPool::OnHostIdle(HttpPipelinedHost* host) {
117 const HttpPipelinedHost::Key& key = host->GetKey();
118 CHECK(ContainsKey(host_map_, key));
119 host_map_.erase(key);
120 delete host;
121 }
122
123 void HttpPipelinedHostPool::OnHostHasAdditionalCapacity(
124 HttpPipelinedHost* host) {
125 delegate_->OnHttpPipelinedHostHasAdditionalCapacity(host);
126 }
127
128 void HttpPipelinedHostPool::OnHostDeterminedCapability(
129 HttpPipelinedHost* host,
130 HttpPipelinedHostCapability capability) {
131 http_server_properties_->SetPipelineCapability(host->GetKey().origin(),
132 capability);
133 }
134
135 base::Value* HttpPipelinedHostPool::PipelineInfoToValue() const {
136 base::ListValue* list = new base::ListValue();
137 for (HostMap::const_iterator it = host_map_.begin();
138 it != host_map_.end(); ++it) {
139 base::Value* value = it->second->PipelineInfoToValue();
140 list->Append(value);
141 }
142 return list;
143 }
144
145 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698