1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker // 5*6777b538SAndroid Build Coastguard Worker // A class that stores the common state between HttpBasicStream and 6*6777b538SAndroid Build Coastguard Worker // WebSocketBasicHandshakeStream. 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #ifndef NET_HTTP_HTTP_BASIC_STATE_H_ 9*6777b538SAndroid Build Coastguard Worker #define NET_HTTP_HTTP_BASIC_STATE_H_ 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include <memory> 12*6777b538SAndroid Build Coastguard Worker #include <set> 13*6777b538SAndroid Build Coastguard Worker #include <string> 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker #include "base/memory/scoped_refptr.h" 16*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 17*6777b538SAndroid Build Coastguard Worker #include "net/base/request_priority.h" 18*6777b538SAndroid Build Coastguard Worker #include "net/traffic_annotation/network_traffic_annotation.h" 19*6777b538SAndroid Build Coastguard Worker #include "url/gurl.h" 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker namespace net { 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker class ClientSocketHandle; 24*6777b538SAndroid Build Coastguard Worker class GrowableIOBuffer; 25*6777b538SAndroid Build Coastguard Worker class HttpStreamParser; 26*6777b538SAndroid Build Coastguard Worker struct HttpRequestInfo; 27*6777b538SAndroid Build Coastguard Worker class NetLogWithSource; 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE HttpBasicState { 30*6777b538SAndroid Build Coastguard Worker public: 31*6777b538SAndroid Build Coastguard Worker HttpBasicState(std::unique_ptr<ClientSocketHandle> connection, 32*6777b538SAndroid Build Coastguard Worker bool is_for_get_to_http_proxy); 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker HttpBasicState(const HttpBasicState&) = delete; 35*6777b538SAndroid Build Coastguard Worker HttpBasicState& operator=(const HttpBasicState&) = delete; 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker ~HttpBasicState(); 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker // Initialize() must be called before using any of the other methods. 40*6777b538SAndroid Build Coastguard Worker void Initialize(const HttpRequestInfo* request_info, 41*6777b538SAndroid Build Coastguard Worker RequestPriority priority, 42*6777b538SAndroid Build Coastguard Worker const NetLogWithSource& net_log); 43*6777b538SAndroid Build Coastguard Worker parser()44*6777b538SAndroid Build Coastguard Worker HttpStreamParser* parser() const { return parser_.get(); } 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker // Returns true if this request is a non-tunneled HTTP request via a proxy. is_for_get_to_http_proxy()47*6777b538SAndroid Build Coastguard Worker bool is_for_get_to_http_proxy() const { return is_for_get_to_http_proxy_; } 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker // Deletes |parser_| and sets it to NULL. 50*6777b538SAndroid Build Coastguard Worker void DeleteParser(); 51*6777b538SAndroid Build Coastguard Worker connection()52*6777b538SAndroid Build Coastguard Worker ClientSocketHandle* connection() const { return connection_.get(); } 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker std::unique_ptr<ClientSocketHandle> ReleaseConnection(); 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker scoped_refptr<GrowableIOBuffer> read_buf() const; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker // Generates a string of the form "METHOD PATH HTTP/1.1\r\n", based on the 59*6777b538SAndroid Build Coastguard Worker // values of request_info_ and is_for_get_to_http_proxy_. 60*6777b538SAndroid Build Coastguard Worker std::string GenerateRequestLine() const; 61*6777b538SAndroid Build Coastguard Worker traffic_annotation()62*6777b538SAndroid Build Coastguard Worker MutableNetworkTrafficAnnotationTag traffic_annotation() { 63*6777b538SAndroid Build Coastguard Worker return traffic_annotation_; 64*6777b538SAndroid Build Coastguard Worker } 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker // Returns true if the connection has been "reused" as defined by HttpStream - 67*6777b538SAndroid Build Coastguard Worker // either actually reused, or has not been used yet, but has been idle for 68*6777b538SAndroid Build Coastguard Worker // some time. 69*6777b538SAndroid Build Coastguard Worker // 70*6777b538SAndroid Build Coastguard Worker // TODO(mmenke): Consider renaming this concept, to avoid confusion with 71*6777b538SAndroid Build Coastguard Worker // ClientSocketHandle::is_reused(). 72*6777b538SAndroid Build Coastguard Worker bool IsConnectionReused() const; 73*6777b538SAndroid Build Coastguard Worker 74*6777b538SAndroid Build Coastguard Worker // Retrieves any DNS aliases for the remote endpoint. Includes all known 75*6777b538SAndroid Build Coastguard Worker // aliases, e.g. from A, AAAA, or HTTPS, not just from the address used for 76*6777b538SAndroid Build Coastguard Worker // the connection, in no particular order. 77*6777b538SAndroid Build Coastguard Worker const std::set<std::string>& GetDnsAliases() const; 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker private: 80*6777b538SAndroid Build Coastguard Worker scoped_refptr<GrowableIOBuffer> read_buf_; 81*6777b538SAndroid Build Coastguard Worker 82*6777b538SAndroid Build Coastguard Worker std::unique_ptr<ClientSocketHandle> connection_; 83*6777b538SAndroid Build Coastguard Worker 84*6777b538SAndroid Build Coastguard Worker std::unique_ptr<HttpStreamParser> parser_; 85*6777b538SAndroid Build Coastguard Worker 86*6777b538SAndroid Build Coastguard Worker const bool is_for_get_to_http_proxy_; 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker GURL url_; 89*6777b538SAndroid Build Coastguard Worker std::string request_method_; 90*6777b538SAndroid Build Coastguard Worker 91*6777b538SAndroid Build Coastguard Worker MutableNetworkTrafficAnnotationTag traffic_annotation_; 92*6777b538SAndroid Build Coastguard Worker }; 93*6777b538SAndroid Build Coastguard Worker 94*6777b538SAndroid Build Coastguard Worker } // namespace net 95*6777b538SAndroid Build Coastguard Worker 96*6777b538SAndroid Build Coastguard Worker #endif // NET_HTTP_HTTP_BASIC_STATE_H_ 97