Do not pretend receiving FIN when receiving trailers in QUIC v99.

In Google QUIC, trailing HEADERS must have FIN bit.  In IETF QUIC, HTTP/3 frames
do not have flags, so trailing HEADERS will never have FIN.  This CL makes
QuicSpdyStream stop faking a FIN bit.

In non-v99 QUIC, |fin| must be true at the end of OnTrailingHeadersComplete(),
otherwise the connection would have been closed in line 568.

In v99 QUIC, |fin| is false in production, when OnStreamHeaderList() is called
from OnHeadersFrameEnd().  However, a large number of tests call
OnStreamHeaderList() with fin = true, so this needs to be supported for the time
being.  See linked bug.

This is prework for https://crbug.com/978733.  I do not want QuicSpdyStream to
close the connection when trailers arrive, so that it can signal an error if
other frames are received afterwards.

Also, according to
https://quicwg.org/base-drafts/draft-ietf-quic-http.html#request-response,
PUSH_PROMISE frames can arrive after trailers, so the stream really should
remain open.

This CL also fixes descriptions of some QuicSpdyStream methods related to FIN
flag.

gfe-relnote: n/a, QUIC v99-only change.
PiperOrigin-RevId: 255681867
Change-Id: I33928191e35d601514a0be5b18b8aa5ff389c831
3 files changed
tree: b4e6dbdd944251d1a9875edb75c183c1e920824a
  1. common/
  2. epoll_server/
  3. http2/
  4. quic/
  5. spdy/
  6. CONTRIBUTING.md
  7. LICENSE
  8. README.md
README.md

QUICHE

QUICHE (QUIC, Http/2, Etc) is Google‘s implementation of QUIC and related protocols. It powers Chromium as well as Google’s QUIC servers and some other projects.

The code is currently in process of being moved from https://cs.chromium.org/chromium/src/net/third_party/ into this repository. Please excuse our appearance while we're under construction.