• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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