1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 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 // HttpBasicStream is a simple implementation of HttpStream. It assumes it is 6*6777b538SAndroid Build Coastguard Worker // not sharing a sharing with any other HttpStreams, therefore it just reads and 7*6777b538SAndroid Build Coastguard Worker // writes directly to the Http Stream. 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #ifndef NET_HTTP_HTTP_BASIC_STREAM_H_ 10*6777b538SAndroid Build Coastguard Worker #define NET_HTTP_HTTP_BASIC_STREAM_H_ 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker #include <memory> 15*6777b538SAndroid Build Coastguard Worker #include <set> 16*6777b538SAndroid Build Coastguard Worker #include <string> 17*6777b538SAndroid Build Coastguard Worker #include <string_view> 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h" 20*6777b538SAndroid Build Coastguard Worker #include "net/base/completion_once_callback.h" 21*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 22*6777b538SAndroid Build Coastguard Worker #include "net/http/http_basic_state.h" 23*6777b538SAndroid Build Coastguard Worker #include "net/http/http_stream.h" 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker namespace net { 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker class ClientSocketHandle; 28*6777b538SAndroid Build Coastguard Worker class HttpResponseInfo; 29*6777b538SAndroid Build Coastguard Worker struct HttpRequestInfo; 30*6777b538SAndroid Build Coastguard Worker class HttpRequestHeaders; 31*6777b538SAndroid Build Coastguard Worker class HttpStreamParser; 32*6777b538SAndroid Build Coastguard Worker class IOBuffer; 33*6777b538SAndroid Build Coastguard Worker class NetLogWithSource; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE HttpBasicStream : public HttpStream { 36*6777b538SAndroid Build Coastguard Worker public: 37*6777b538SAndroid Build Coastguard Worker // Constructs a new HttpBasicStream. InitializeStream must be called to 38*6777b538SAndroid Build Coastguard Worker // initialize it correctly. 39*6777b538SAndroid Build Coastguard Worker HttpBasicStream(std::unique_ptr<ClientSocketHandle> connection, 40*6777b538SAndroid Build Coastguard Worker bool is_for_get_to_http_proxy); 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker HttpBasicStream(const HttpBasicStream&) = delete; 43*6777b538SAndroid Build Coastguard Worker HttpBasicStream& operator=(const HttpBasicStream&) = delete; 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker ~HttpBasicStream() override; 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker // HttpStream methods: 48*6777b538SAndroid Build Coastguard Worker void RegisterRequest(const HttpRequestInfo* request_info) override; 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker int InitializeStream(bool can_send_early, 51*6777b538SAndroid Build Coastguard Worker RequestPriority priority, 52*6777b538SAndroid Build Coastguard Worker const NetLogWithSource& net_log, 53*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback) override; 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker int SendRequest(const HttpRequestHeaders& headers, 56*6777b538SAndroid Build Coastguard Worker HttpResponseInfo* response, 57*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback) override; 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker int ReadResponseHeaders(CompletionOnceCallback callback) override; 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker int ReadResponseBody(IOBuffer* buf, 62*6777b538SAndroid Build Coastguard Worker int buf_len, 63*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback) override; 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker void Close(bool not_reusable) override; 66*6777b538SAndroid Build Coastguard Worker 67*6777b538SAndroid Build Coastguard Worker std::unique_ptr<HttpStream> RenewStreamForAuth() override; 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker bool IsResponseBodyComplete() const override; 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Worker bool IsConnectionReused() const override; 72*6777b538SAndroid Build Coastguard Worker 73*6777b538SAndroid Build Coastguard Worker void SetConnectionReused() override; 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker bool CanReuseConnection() const override; 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker int64_t GetTotalReceivedBytes() const override; 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker int64_t GetTotalSentBytes() const override; 80*6777b538SAndroid Build Coastguard Worker 81*6777b538SAndroid Build Coastguard Worker bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override; 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard Worker bool GetAlternativeService( 84*6777b538SAndroid Build Coastguard Worker AlternativeService* alternative_service) const override; 85*6777b538SAndroid Build Coastguard Worker 86*6777b538SAndroid Build Coastguard Worker void GetSSLInfo(SSLInfo* ssl_info) override; 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker int GetRemoteEndpoint(IPEndPoint* endpoint) override; 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker void Drain(HttpNetworkSession* session) override; 91*6777b538SAndroid Build Coastguard Worker 92*6777b538SAndroid Build Coastguard Worker void PopulateNetErrorDetails(NetErrorDetails* details) override; 93*6777b538SAndroid Build Coastguard Worker 94*6777b538SAndroid Build Coastguard Worker void SetPriority(RequestPriority priority) override; 95*6777b538SAndroid Build Coastguard Worker 96*6777b538SAndroid Build Coastguard Worker void SetRequestHeadersCallback(RequestHeadersCallback callback) override; 97*6777b538SAndroid Build Coastguard Worker 98*6777b538SAndroid Build Coastguard Worker const std::set<std::string>& GetDnsAliases() const override; 99*6777b538SAndroid Build Coastguard Worker 100*6777b538SAndroid Build Coastguard Worker std::string_view GetAcceptChViaAlps() const override; 101*6777b538SAndroid Build Coastguard Worker 102*6777b538SAndroid Build Coastguard Worker private: parser()103*6777b538SAndroid Build Coastguard Worker HttpStreamParser* parser() const { return state_.parser(); } 104*6777b538SAndroid Build Coastguard Worker 105*6777b538SAndroid Build Coastguard Worker void OnHandshakeConfirmed(CompletionOnceCallback callback, int rv); 106*6777b538SAndroid Build Coastguard Worker 107*6777b538SAndroid Build Coastguard Worker HttpBasicState state_; 108*6777b538SAndroid Build Coastguard Worker base::TimeTicks confirm_handshake_end_; 109*6777b538SAndroid Build Coastguard Worker RequestHeadersCallback request_headers_callback_; 110*6777b538SAndroid Build Coastguard Worker // The request to send. 111*6777b538SAndroid Build Coastguard Worker // Set to null before the response body is read. This is to allow |this| to 112*6777b538SAndroid Build Coastguard Worker // be shared for reading and to possibly outlive request_info_'s owner. 113*6777b538SAndroid Build Coastguard Worker // Setting to null happens after headers are completely read or upload data 114*6777b538SAndroid Build Coastguard Worker // stream is uploaded, whichever is later. 115*6777b538SAndroid Build Coastguard Worker raw_ptr<const HttpRequestInfo> request_info_; 116*6777b538SAndroid Build Coastguard Worker }; 117*6777b538SAndroid Build Coastguard Worker 118*6777b538SAndroid Build Coastguard Worker } // namespace net 119*6777b538SAndroid Build Coastguard Worker 120*6777b538SAndroid Build Coastguard Worker #endif // NET_HTTP_HTTP_BASIC_STREAM_H_ 121