1// Copyright 2013 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_PROXY_CONNECT_REDIRECT_HTTP_STREAM_H_
6#define NET_HTTP_PROXY_CONNECT_REDIRECT_HTTP_STREAM_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/scoped_ptr.h"
10#include "net/base/load_timing_info.h"
11#include "net/http/http_stream.h"
12
13namespace net {
14
15// A dummy HttpStream with no body used when a redirect is returned
16// from a proxy.
17class ProxyConnectRedirectHttpStream : public HttpStream {
18 public:
19  // |load_timing_info| is the info that should be returned by
20  // GetLoadTimingInfo(), or NULL if there is none. Does not take
21  // ownership of |load_timing_info|.
22  explicit ProxyConnectRedirectHttpStream(LoadTimingInfo* load_timing_info);
23  virtual ~ProxyConnectRedirectHttpStream();
24
25  // All functions below are expected not to be called except for the
26  // marked one.
27
28  virtual int InitializeStream(const HttpRequestInfo* request_info,
29                               RequestPriority priority,
30                               const BoundNetLog& net_log,
31                               const CompletionCallback& callback) OVERRIDE;
32  virtual int SendRequest(const HttpRequestHeaders& request_headers,
33                          HttpResponseInfo* response,
34                          const CompletionCallback& callback) OVERRIDE;
35  virtual int ReadResponseHeaders(const CompletionCallback& callback) OVERRIDE;
36  virtual int ReadResponseBody(IOBuffer* buf,
37                               int buf_len,
38                               const CompletionCallback& callback) OVERRIDE;
39
40  // This function may be called.
41  virtual void Close(bool not_reusable) OVERRIDE;
42
43  virtual bool IsResponseBodyComplete() const OVERRIDE;
44
45  // This function may be called.
46  virtual bool CanFindEndOfResponse() const OVERRIDE;
47
48  virtual bool IsConnectionReused() const OVERRIDE;
49  virtual void SetConnectionReused() OVERRIDE;
50  virtual bool IsConnectionReusable() const OVERRIDE;
51
52  virtual int64 GetTotalReceivedBytes() const OVERRIDE;
53
54  // This function may be called.
55  virtual bool GetLoadTimingInfo(
56      LoadTimingInfo* load_timing_info) const OVERRIDE;
57
58  virtual void GetSSLInfo(SSLInfo* ssl_info) OVERRIDE;
59  virtual void GetSSLCertRequestInfo(
60      SSLCertRequestInfo* cert_request_info) OVERRIDE;
61  virtual bool IsSpdyHttpStream() const OVERRIDE;
62  virtual void Drain(HttpNetworkSession* session) OVERRIDE;
63
64  // This function may be called.
65  virtual void SetPriority(RequestPriority priority) OVERRIDE;
66
67  virtual UploadProgress GetUploadProgress() const OVERRIDE;
68  virtual HttpStream* RenewStreamForAuth() OVERRIDE;
69
70 private:
71  bool has_load_timing_info_;
72  LoadTimingInfo load_timing_info_;
73};
74
75}  // namespace net
76
77#endif  // NET_HTTP_PROXY_CONNECT_REDIRECT_HTTP_STREAM_H_
78