1 // Copyright 2022 The Chromium Authors 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_WEBSOCKETS_WEBSOCKET_QUIC_SPDY_STREAM_H_ 6 #define NET_WEBSOCKETS_WEBSOCKET_QUIC_SPDY_STREAM_H_ 7 8 #include "net/quic/quic_chromium_client_stream.h" 9 #include "net/third_party/quiche/src/quiche/quic/core/http/quic_spdy_client_session_base.h" 10 11 namespace net { 12 13 class IOBuffer; 14 15 class NET_EXPORT_PRIVATE WebSocketQuicSpdyStream : public quic::QuicSpdyStream { 16 public: 17 class NET_EXPORT_PRIVATE Delegate { 18 public: 19 Delegate() = default; 20 Delegate(const Delegate&) = delete; 21 Delegate& operator=(const Delegate&) = delete; 22 virtual void OnInitialHeadersComplete( 23 bool fin, 24 size_t frame_len, 25 const quic::QuicHeaderList& header_list) = 0; 26 virtual void OnBodyAvailable() = 0; 27 virtual void ClearStream() = 0; 28 29 protected: 30 virtual ~Delegate() = default; 31 }; 32 WebSocketQuicSpdyStream(quic::QuicStreamId id, 33 quic::QuicSpdyClientSessionBase* session, 34 quic::StreamType type); 35 36 WebSocketQuicSpdyStream(const WebSocketQuicSpdyStream&) = delete; 37 WebSocketQuicSpdyStream& operator=(const WebSocketQuicSpdyStream&) = delete; 38 ~WebSocketQuicSpdyStream() override; 39 set_delegate(Delegate * delegate)40 void set_delegate(Delegate* delegate) { delegate_ = delegate; } 41 42 void OnInitialHeadersComplete( 43 bool fin, 44 size_t frame_len, 45 const quic::QuicHeaderList& header_list) override; 46 void OnBodyAvailable() override; 47 int Read(IOBuffer* buf, int buf_len); 48 49 private: 50 // The transaction should own the delegate. `delegate_` notifies this object 51 // of its destruction, because they may be destroyed in any order. 52 raw_ptr<WebSocketQuicSpdyStream::Delegate> delegate_ = nullptr; 53 }; 54 55 } // namespace net 56 #endif // NET_WEBSOCKETS_WEBSOCKET_QUIC_SPDY_STREAM_H_ 57