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

Side by Side Diff: net/http/http_pipelined_host_impl.h

Issue 275953002: Remove HTTP pipelining support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix line endings Created 6 years, 6 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
« no previous file with comments | « net/http/http_pipelined_host_forced_unittest.cc ('k') | net/http/http_pipelined_host_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #ifndef NET_HTTP_HTTP_PIPELINED_HOST_IMPL_H_
6 #define NET_HTTP_HTTP_PIPELINED_HOST_IMPL_H_
7
8 #include <map>
9 #include <string>
10
11 #include "base/basictypes.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "net/base/host_port_pair.h"
14 #include "net/base/net_export.h"
15 #include "net/http/http_pipelined_connection.h"
16 #include "net/http/http_pipelined_host.h"
17 #include "net/http/http_pipelined_host_capability.h"
18
19 namespace base {
20 class Value;
21 }
22
23 namespace net {
24
25 class BoundNetLog;
26 class ClientSocketHandle;
27 class HttpPipelinedStream;
28 class ProxyInfo;
29 struct SSLConfig;
30
31 // Manages all of the pipelining state for specific host with active pipelined
32 // HTTP requests. Manages connection jobs, constructs pipelined streams, and
33 // assigns requests to the least loaded pipelined connection.
34 class NET_EXPORT_PRIVATE HttpPipelinedHostImpl
35 : public HttpPipelinedHost,
36 public HttpPipelinedConnection::Delegate {
37 public:
38 HttpPipelinedHostImpl(HttpPipelinedHost::Delegate* delegate,
39 const HttpPipelinedHost::Key& key,
40 HttpPipelinedConnection::Factory* factory,
41 HttpPipelinedHostCapability capability);
42 virtual ~HttpPipelinedHostImpl();
43
44 // HttpPipelinedHost interface
45 virtual HttpPipelinedStream* CreateStreamOnNewPipeline(
46 ClientSocketHandle* connection,
47 const SSLConfig& used_ssl_config,
48 const ProxyInfo& used_proxy_info,
49 const BoundNetLog& net_log,
50 bool was_npn_negotiated,
51 NextProto protocol_negotiated) OVERRIDE;
52
53 virtual HttpPipelinedStream* CreateStreamOnExistingPipeline() OVERRIDE;
54
55 virtual bool IsExistingPipelineAvailable() const OVERRIDE;
56
57 // HttpPipelinedConnection::Delegate interface
58
59 // Called when a pipelined connection completes a request. Adds a pending
60 // request to the pipeline if the pipeline is still usable.
61 virtual void OnPipelineHasCapacity(
62 HttpPipelinedConnection* pipeline) OVERRIDE;
63
64 virtual void OnPipelineFeedback(
65 HttpPipelinedConnection* pipeline,
66 HttpPipelinedConnection::Feedback feedback) OVERRIDE;
67
68 virtual const Key& GetKey() const OVERRIDE;
69
70 // Creates a Value summary of this host's |pipelines_|. Caller assumes
71 // ownership of the returned Value.
72 virtual base::Value* PipelineInfoToValue() const OVERRIDE;
73
74 // Returns the maximum number of in-flight pipelined requests we'll allow on a
75 // single connection.
76 static int max_pipeline_depth() { return 3; }
77
78 private:
79 struct PipelineInfo {
80 PipelineInfo();
81
82 int num_successes;
83 };
84 typedef std::map<HttpPipelinedConnection*, PipelineInfo> PipelineInfoMap;
85
86 // Called when a pipeline is empty and there are no pending requests. Closes
87 // the connection.
88 void OnPipelineEmpty(HttpPipelinedConnection* pipeline);
89
90 // Adds the next pending request to the pipeline if it's still usuable.
91 void AddRequestToPipeline(HttpPipelinedConnection* pipeline);
92
93 // Returns the current pipeline capacity based on |capability_|. This should
94 // not be called if |capability_| is INCAPABLE.
95 int GetPipelineCapacity() const;
96
97 // Returns true if |pipeline| can handle a new request. This is true if the
98 // |pipeline| is active, usable, has capacity, and |capability_| is
99 // sufficient.
100 bool CanPipelineAcceptRequests(HttpPipelinedConnection* pipeline) const;
101
102 // Called when |this| moves from UNKNOWN |capability_| to PROBABLY_CAPABLE.
103 // Causes all pipelines to increase capacity to start pipelining.
104 void NotifyAllPipelinesHaveCapacity();
105
106 HttpPipelinedHost::Delegate* delegate_;
107 const Key key_;
108 PipelineInfoMap pipelines_;
109 scoped_ptr<HttpPipelinedConnection::Factory> factory_;
110 HttpPipelinedHostCapability capability_;
111
112 DISALLOW_COPY_AND_ASSIGN(HttpPipelinedHostImpl);
113 };
114
115 } // namespace net
116
117 #endif // NET_HTTP_HTTP_PIPELINED_HOST_IMPL_H_
OLDNEW
« no previous file with comments | « net/http/http_pipelined_host_forced_unittest.cc ('k') | net/http/http_pipelined_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698