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