Rewrite QuicSpdyStreamBodyBuffer's consumed byte tracking algorithm.

This is motivated by having to consume unknown frames (in a later CL), see
cr/258682203 for the end goal.

There is some behavioral change as a side effect of the new algorithm: DATA
frame headers are consumed immediately, not only when some of the corresponding
payload is consumed.  This hinges on the previously undocumented property of HttpDecoder that in only calls Visitor::On*FrameStart() methods after the entire frame header is processed.  This behavioral change necessitates minor updates to tests.

I plan four more CLs after this: one to move HEADERS frame header and
payload consumption calculations from QuicSpdyStream to
QuicSpdyStreamBodyBuffer; one to consume unknown frames; one to rename
QuicSpdyStreamBodyBuffer to QuicSpdyStreamBodyManager or something similar;
and one to remove Http3FrameLengths if by that point it's entirely unused.

gfe-relnote: n/a, change to QUIC v99-only code.  Protected by existing disabled gfe2_reloadable_flag_quic_enable_version_99.
PiperOrigin-RevId: 259987101
Change-Id: Id8a734fb36466b3502373097faba2c6c81c793de
diff --git a/quic/core/http/http_decoder.h b/quic/core/http/http_decoder.h
index 99c4d10..80ba385 100644
--- a/quic/core/http/http_decoder.h
+++ b/quic/core/http/http_decoder.h
@@ -49,6 +49,9 @@
 
     // All the following methods return true to continue decoding,
     // and false to pause it.
+    // On*FrameStart() methods are called after the frame header is completely
+    // processed.  At that point it is safe to consume
+    // |frame_length.header_length| bytes.
 
     // Called when a PRIORITY frame has been received.
     // |frame_length| contains PRIORITY frame length and payload length.