Home | History | Annotate | Download | only in http
      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 
     13 namespace net {
     14 
     15 // A dummy HttpStream with no body used when a redirect is returned
     16 // from a proxy.
     17 class 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