1*6777b538SAndroid Build Coastguard Worker // Copyright 2016 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 #ifndef NET_SPDY_MULTIPLEXED_HTTP_STREAM_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_SPDY_MULTIPLEXED_HTTP_STREAM_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <memory> 9*6777b538SAndroid Build Coastguard Worker #include <vector> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "net/http/http_stream.h" 12*6777b538SAndroid Build Coastguard Worker #include "net/spdy/multiplexed_session.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/spdy/core/http2_header_block.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace net { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker // Base class for SPDY and QUIC HttpStream subclasses. 18*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE MultiplexedHttpStream : public HttpStream { 19*6777b538SAndroid Build Coastguard Worker public: 20*6777b538SAndroid Build Coastguard Worker explicit MultiplexedHttpStream( 21*6777b538SAndroid Build Coastguard Worker std::unique_ptr<MultiplexedSessionHandle> session); 22*6777b538SAndroid Build Coastguard Worker ~MultiplexedHttpStream() override; 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker int GetRemoteEndpoint(IPEndPoint* endpoint) override; 25*6777b538SAndroid Build Coastguard Worker void GetSSLInfo(SSLInfo* ssl_info) override; 26*6777b538SAndroid Build Coastguard Worker void Drain(HttpNetworkSession* session) override; 27*6777b538SAndroid Build Coastguard Worker std::unique_ptr<HttpStream> RenewStreamForAuth() override; 28*6777b538SAndroid Build Coastguard Worker void SetConnectionReused() override; 29*6777b538SAndroid Build Coastguard Worker bool CanReuseConnection() const override; 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // Caches SSL info from the underlying session. 32*6777b538SAndroid Build Coastguard Worker void SaveSSLInfo(); 33*6777b538SAndroid Build Coastguard Worker void SetRequestHeadersCallback(RequestHeadersCallback callback) override; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker protected: 36*6777b538SAndroid Build Coastguard Worker void DispatchRequestHeadersCallback( 37*6777b538SAndroid Build Coastguard Worker const spdy::Http2HeaderBlock& spdy_headers); 38*6777b538SAndroid Build Coastguard Worker session()39*6777b538SAndroid Build Coastguard Worker MultiplexedSessionHandle* session() { return session_.get(); } session()40*6777b538SAndroid Build Coastguard Worker const MultiplexedSessionHandle* session() const { return session_.get(); } 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker private: 43*6777b538SAndroid Build Coastguard Worker const std::unique_ptr<MultiplexedSessionHandle> session_; 44*6777b538SAndroid Build Coastguard Worker RequestHeadersCallback request_headers_callback_; 45*6777b538SAndroid Build Coastguard Worker }; 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker } // namespace net 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker #endif // NET_SPDY_MULTIPLEXED_HTTP_STREAM_H_ 50