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