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// A class that stores the common state between HttpBasicStream and 6// WebSocketBasicHandshakeStream. 7 8#ifndef NET_HTTP_HTTP_BASIC_STATE_H_ 9#define NET_HTTP_HTTP_BASIC_STATE_H_ 10 11#include <string> 12 13#include "base/basictypes.h" 14#include "base/memory/ref_counted.h" 15#include "base/memory/scoped_ptr.h" 16#include "net/base/completion_callback.h" 17#include "net/base/net_export.h" 18#include "net/base/request_priority.h" 19 20namespace net { 21 22class BoundNetLog; 23class ClientSocketHandle; 24class GrowableIOBuffer; 25class HttpStreamParser; 26struct HttpRequestInfo; 27 28class NET_EXPORT_PRIVATE HttpBasicState { 29 public: 30 HttpBasicState(ClientSocketHandle* connection, bool using_proxy); 31 ~HttpBasicState(); 32 33 // Initialize() must be called before using any of the other methods. 34 int Initialize(const HttpRequestInfo* request_info, 35 RequestPriority priority, 36 const BoundNetLog& net_log, 37 const CompletionCallback& callback); 38 39 HttpStreamParser* parser() const { return parser_.get(); } 40 41 bool using_proxy() const { return using_proxy_; } 42 43 // Deletes |parser_| and sets it to NULL. 44 void DeleteParser(); 45 46 ClientSocketHandle* connection() const { return connection_.get(); } 47 48 scoped_ptr<ClientSocketHandle> ReleaseConnection(); 49 50 scoped_refptr<GrowableIOBuffer> read_buf() const; 51 52 // Generates a string of the form "METHOD PATH HTTP/1.1\r\n", based on the 53 // values of request_info_ and using_proxy_. 54 std::string GenerateRequestLine() const; 55 56 private: 57 scoped_refptr<GrowableIOBuffer> read_buf_; 58 59 scoped_ptr<HttpStreamParser> parser_; 60 61 scoped_ptr<ClientSocketHandle> connection_; 62 63 const bool using_proxy_; 64 65 const HttpRequestInfo* request_info_; 66 67 DISALLOW_COPY_AND_ASSIGN(HttpBasicState); 68}; 69 70} // namespace net 71 72#endif // NET_HTTP_HTTP_BASIC_STATE_H_ 73