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.
5 #ifndef NET_HTTP_HTTP_PIPELINED_STREAM_H_
6 #define NET_HTTP_HTTP_PIPELINED_STREAM_H_
10 #include "base/basictypes.h"
11 #include "net/base/net_log.h"
12 #include "net/http/http_stream.h"
13 #include "net/socket/ssl_client_socket.h"
18 class HttpPipelinedConnectionImpl;
19 class HttpResponseInfo;
20 class HttpRequestHeaders;
21 struct HttpRequestInfo;
26 // HttpPipelinedStream is the pipelined implementation of HttpStream. It has
27 // very little code in it. Instead, it serves as the client's interface to the
28 // pipelined connection, where all the work happens.
30 // In the case of pipelining failures, these functions may return
31 // ERR_PIPELINE_EVICTION. In that case, the client should retry the HTTP
32 // request without pipelining.
33 class HttpPipelinedStream : public HttpStream {
35 HttpPipelinedStream(HttpPipelinedConnectionImpl* pipeline,
37 virtual ~HttpPipelinedStream();
39 // HttpStream methods:
40 virtual int InitializeStream(const HttpRequestInfo* request_info,
41 RequestPriority priority,
42 const BoundNetLog& net_log,
43 const CompletionCallback& callback) OVERRIDE;
45 virtual int SendRequest(const HttpRequestHeaders& headers,
46 HttpResponseInfo* response,
47 const CompletionCallback& callback) OVERRIDE;
49 virtual UploadProgress GetUploadProgress() const OVERRIDE;
51 virtual int ReadResponseHeaders(const CompletionCallback& callback) OVERRIDE;
53 virtual const HttpResponseInfo* GetResponseInfo() const OVERRIDE;
55 virtual int ReadResponseBody(IOBuffer* buf, int buf_len,
56 const CompletionCallback& callback) OVERRIDE;
58 virtual void Close(bool not_reusable) OVERRIDE;
60 virtual HttpStream* RenewStreamForAuth() OVERRIDE;
62 virtual bool IsResponseBodyComplete() const OVERRIDE;
64 virtual bool CanFindEndOfResponse() const OVERRIDE;
66 virtual bool IsConnectionReused() const OVERRIDE;
68 virtual void SetConnectionReused() OVERRIDE;
70 virtual bool IsConnectionReusable() const OVERRIDE;
72 virtual bool GetLoadTimingInfo(
73 LoadTimingInfo* load_timing_info) const OVERRIDE;
75 virtual void GetSSLInfo(SSLInfo* ssl_info) OVERRIDE;
77 virtual void GetSSLCertRequestInfo(
78 SSLCertRequestInfo* cert_request_info) OVERRIDE;
80 virtual bool IsSpdyHttpStream() const OVERRIDE;
82 virtual void Drain(HttpNetworkSession* session) OVERRIDE;
84 virtual void SetPriority(RequestPriority priority) OVERRIDE;
86 // The SSLConfig used to establish this stream's pipeline.
87 const SSLConfig& used_ssl_config() const;
89 // The ProxyInfo used to establish this this stream's pipeline.
90 const ProxyInfo& used_proxy_info() const;
92 // The BoundNetLog of this stream's pipelined connection.
93 const BoundNetLog& net_log() const;
95 // True if this stream's pipeline was NPN negotiated.
96 bool was_npn_negotiated() const;
98 // Protocol negotiated with the server.
99 NextProto protocol_negotiated() const;
102 HttpPipelinedConnectionImpl* pipeline_;
106 const HttpRequestInfo* request_info_;
108 DISALLOW_COPY_AND_ASSIGN(HttpPipelinedStream);
113 #endif // NET_HTTP_HTTP_PIPELINED_STREAM_H_