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