xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/http2/adapter/recording_http2_visitor.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 #ifndef QUICHE_HTTP2_ADAPTER_RECORDING_HTTP2_VISITOR_H_
2 #define QUICHE_HTTP2_ADAPTER_RECORDING_HTTP2_VISITOR_H_
3 
4 #include <cstdint>
5 #include <list>
6 #include <string>
7 
8 #include "quiche/http2/adapter/http2_visitor_interface.h"
9 #include "quiche/common/platform/api/quiche_export.h"
10 #include "quiche/common/platform/api/quiche_test.h"
11 
12 namespace http2 {
13 namespace adapter {
14 namespace test {
15 
16 // A visitor implementation that records the sequence of callbacks it receives.
17 class QUICHE_NO_EXPORT RecordingHttp2Visitor : public Http2VisitorInterface {
18  public:
19   using Event = std::string;
20   using EventSequence = std::list<Event>;
21 
22   // From Http2VisitorInterface
23   int64_t OnReadyToSend(absl::string_view serialized) override;
24   void OnConnectionError(ConnectionError error) override;
25   bool OnFrameHeader(Http2StreamId stream_id, size_t length, uint8_t type,
26                      uint8_t flags) override;
27   void OnSettingsStart() override;
28   void OnSetting(Http2Setting setting) override;
29   void OnSettingsEnd() override;
30   void OnSettingsAck() override;
31   bool OnBeginHeadersForStream(Http2StreamId stream_id) override;
32   OnHeaderResult OnHeaderForStream(Http2StreamId stream_id,
33                                    absl::string_view name,
34                                    absl::string_view value) override;
35   bool OnEndHeadersForStream(Http2StreamId stream_id) override;
36   bool OnDataPaddingLength(Http2StreamId stream_id,
37                            size_t padding_length) override;
38   bool OnBeginDataForStream(Http2StreamId stream_id,
39                             size_t payload_length) override;
40   bool OnDataForStream(Http2StreamId stream_id,
41                        absl::string_view data) override;
42   bool OnEndStream(Http2StreamId stream_id) override;
43   void OnRstStream(Http2StreamId stream_id, Http2ErrorCode error_code) override;
44   bool OnCloseStream(Http2StreamId stream_id,
45                      Http2ErrorCode error_code) override;
46   void OnPriorityForStream(Http2StreamId stream_id,
47                            Http2StreamId parent_stream_id, int weight,
48                            bool exclusive) override;
49   void OnPing(Http2PingId ping_id, bool is_ack) override;
50   void OnPushPromiseForStream(Http2StreamId stream_id,
51                               Http2StreamId promised_stream_id) override;
52   bool OnGoAway(Http2StreamId last_accepted_stream_id,
53                 Http2ErrorCode error_code,
54                 absl::string_view opaque_data) override;
55   void OnWindowUpdate(Http2StreamId stream_id, int window_increment) override;
56   int OnBeforeFrameSent(uint8_t frame_type, Http2StreamId stream_id,
57                         size_t length, uint8_t flags) override;
58   int OnFrameSent(uint8_t frame_type, Http2StreamId stream_id, size_t length,
59                   uint8_t flags, uint32_t error_code) override;
60   bool OnInvalidFrame(Http2StreamId stream_id,
61                       InvalidFrameError error) override;
62   void OnBeginMetadataForStream(Http2StreamId stream_id,
63                                 size_t payload_length) override;
64   bool OnMetadataForStream(Http2StreamId stream_id,
65                            absl::string_view metadata) override;
66   bool OnMetadataEndForStream(Http2StreamId stream_id) override;
67   void OnErrorDebug(absl::string_view message) override;
68 
GetEventSequence()69   const EventSequence& GetEventSequence() const { return events_; }
Clear()70   void Clear() { events_.clear(); }
71 
72  private:
73   EventSequence events_;
74 };
75 
76 }  // namespace test
77 }  // namespace adapter
78 }  // namespace http2
79 
80 #endif  // QUICHE_HTTP2_ADAPTER_RECORDING_HTTP2_VISITOR_H_
81