Consume unknown frames in QuicReceiveControlStream.

Note that consuming unknown frames in QuicSpdyStream will be much more
complicated because of the requirement to keep DATA frame payloads buffered by
the sequencer.  It will come in a separate CL.

gfe-relnote: n/a, QUIC v99-only change.
PiperOrigin-RevId: 258548485
Change-Id: Id3ce05642b0ee3deb9bb98d0d574833c2c42d22d
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index dd71302..55ae33f 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -82,6 +82,7 @@
   }
 
   bool OnDuplicatePushFrame(const DuplicatePushFrame& /*frame*/) override {
+    // TODO(b/137554973): Consume frame.
     CloseConnectionOnWrongFrame("Duplicate Push");
     return false;
   }
@@ -123,11 +124,13 @@
   }
 
   bool OnPushPromiseFrameStart(PushId /*push_id*/) override {
+    // TODO(b/137554973): Consume frame header.
     CloseConnectionOnWrongFrame("Push Promise");
     return false;
   }
 
   bool OnPushPromiseFramePayload(QuicStringPiece payload) override {
+    // TODO(b/137554973): Consume frame payload.
     DCHECK(!payload.empty());
     CloseConnectionOnWrongFrame("Push Promise");
     return false;
@@ -138,6 +141,19 @@
     return false;
   }
 
+  bool OnUnknownFrameStart(uint64_t /* frame_type */,
+                           Http3FrameLengths /* frame_length */) override {
+    // TODO(b/137554973): Consume frame header.
+    return true;
+  }
+
+  bool OnUnknownFramePayload(QuicStringPiece /* payload */) override {
+    // TODO(b/137554973): Consume frame payload.
+    return true;
+  }
+
+  bool OnUnknownFrameEnd() override { return true; }
+
  private:
   void CloseConnectionOnWrongFrame(std::string frame_type) {
     stream_->session()->connection()->CloseConnection(