Miscellaneous fixes in OgHttp2Session.

* Clears a stream from additional maps when it is closed.
* Casts a parameter to FrameType for better readability.
* Verifies that DATA frames are not queued.

PiperOrigin-RevId: 421369135
diff --git a/http2/adapter/oghttp2_session.cc b/http2/adapter/oghttp2_session.cc
index 016792a..bc8100f 100644
--- a/http2/adapter/oghttp2_session.cc
+++ b/http2/adapter/oghttp2_session.cc
@@ -633,6 +633,10 @@
     const auto& frame_ptr = frames_.front();
     FrameAttributeCollector c;
     frame_ptr->Visit(&c);
+
+    // DATA frames should never be queued.
+    QUICHE_DCHECK_NE(c.frame_type(), 0);
+
     // Frames can't accurately report their own length; the actual serialized
     // length must be used instead.
     spdy::SpdySerializedFrame frame = framer_.SerializeFrame(*frame_ptr);
@@ -669,16 +673,17 @@
   return SendResult::SEND_OK;
 }
 
-bool OgHttp2Session::AfterFrameSent(uint8_t frame_type, uint32_t stream_id,
+bool OgHttp2Session::AfterFrameSent(uint8_t frame_type_int, uint32_t stream_id,
                                     size_t payload_length, uint8_t flags,
                                     uint32_t error_code) {
-  int result = visitor_.OnFrameSent(frame_type, stream_id, payload_length,
+  const FrameType frame_type = static_cast<FrameType>(frame_type_int);
+  int result = visitor_.OnFrameSent(frame_type_int, stream_id, payload_length,
                                     flags, error_code);
   if (result < 0) {
     return false;
   }
   if (stream_id == 0) {
-    if (static_cast<FrameType>(frame_type) == FrameType::SETTINGS) {
+    if (frame_type == FrameType::SETTINGS) {
       const bool is_settings_ack = (flags & 0x01);
       if (is_settings_ack && encoder_header_table_capacity_when_acking_) {
         framer_.UpdateHeaderEncoderTableSize(
@@ -691,12 +696,12 @@
     return true;
   }
   auto iter = queued_frames_.find(stream_id);
-  if (frame_type != 0) {
+  if (frame_type != FrameType::DATA) {
     --iter->second;
   }
   if (iter->second == 0) {
     // TODO(birenroy): Consider passing through `error_code` here.
-    CloseStreamIfReady(frame_type, stream_id);
+    CloseStreamIfReady(frame_type_int, stream_id);
   }
   return true;
 }
@@ -1493,6 +1498,9 @@
   stream_map_.erase(stream_id);
   trailers_ready_.erase(stream_id);
   metadata_ready_.erase(stream_id);
+  streams_reset_.erase(stream_id);
+  queued_frames_.erase(stream_id);
+  stream_map_.erase(stream_id);
   if (write_scheduler_.StreamRegistered(stream_id)) {
     write_scheduler_.UnregisterStream(stream_id);
   }
diff --git a/http2/adapter/oghttp2_session.h b/http2/adapter/oghttp2_session.h
index 97cff20..eaef9bd 100644
--- a/http2/adapter/oghttp2_session.h
+++ b/http2/adapter/oghttp2_session.h
@@ -330,7 +330,7 @@
   SendResult SendQueuedFrames();
 
   // Returns false if a fatal connection error occurred.
-  bool AfterFrameSent(uint8_t frame_type, uint32_t stream_id,
+  bool AfterFrameSent(uint8_t frame_type_int, uint32_t stream_id,
                       size_t payload_length, uint8_t flags,
                       uint32_t error_code);