Landing Recent QUIC changes until 7:50 PM, Jan 18, 2019 UTC-4

log more cert subject name if it has empty SCT list when QUIC
uses it to build REJ. Protected by default true flag FLAGS_quic_reloadable_flag_quic_log_cert_name_for_empty_sct.
Before logging, leaf cert is parsed to extract subject name, which is new behavior. But it should have been parsed already while processing CHLO. So it's safe to parse again with a default true flag.
Merge internal change: 229967221
https://chromium-review.googlesource.com/c/chromium/src/+/1431614

Refactor QuicFramer BuildConnectivityProbingPacket, BuildPaddedPathChallengePacket and BuildPathResponsePacket for v99.
Refactoring, only changes QUIC v99, not flag protected.
This change is required for further work on adding the IETF QUIC long header length field.
Merge internal change: 229784385
https://chromium-review.googlesource.com/c/chromium/src/+/1429220

Bring Http/3 frames up to date with draft 17.
Merge internal change: 229783354
https://chromium-review.googlesource.com/c/chromium/src/+/1429119

In QUIC, making sure PacketNumberQueue and PacketNumberIndexedQueue deal with packet number 0 gracefully. Not protected.
In our current implementation, we reject packet number 0, no functional change expected from this change.
Merge internal change: 229746145
https://chromium-review.googlesource.com/c/chromium/src/+/1429039

Disable source token validation in quic for Quartc.
When 0-rtt will be used in Quartc, the source token will not be provided by the client in the 0-rtt full CHLO. Instead, Quartc will tunnel QUIC through ICE, guaranteeing provenance of the packet.
Merge internal change: 229739207
https://chromium-review.googlesource.com/c/chromium/src/+/1428900

In QUIC, close connection with QUIC_INVALID_ACK_DATA if receiving an ack which acks packet 0. Protected by ENABLED FLAGS_quic_reloadable_flag_quic_disallow_peer_ack_0.
Merge internal change: 229734932
https://chromium-review.googlesource.com/c/chromium/src/+/1428779

Add setting to disable source token verification.
When 0-rtt is used in Quartc, the source token will not be provided by the client in the 0-rtt full CHLO. Instead, Quartc will tunnel QUIC through ICE, guaranteeing provenance of the packet.
Because of the above, we'd like the ability to disable source token verification.
Add setting to disable source token verification.
Merge internal change: 229637229
https://chromium-review.googlesource.com/c/chromium/src/+/1428481

In QUIC, when a packet is received, populate the header->packet_number field only if the full packet number is not 0. No functional change expected, not protected.
Merge internal change: 229597882
https://chromium-review.googlesource.com/c/chromium/src/+/1428679

Deprecate gfe2_restart_flag_quic_use_async_key_exchange
Merge internal change: 229596530
https://chromium-review.googlesource.com/c/chromium/src/+/1428580

Disable padding during crypto handshake in Quartc.
RTP does not pad packets and doesn't check what's the largest packet it sends. It also doesn't pad handshake, which results in a faster handshake.
Padding is not always desirable: on slow connections it sends extra data during handshake, which slows down a handshake. (on 50kbps connection by about 150ms per one message).
Merge internal change: 229559845
https://chromium-review.googlesource.com/c/chromium/src/+/1428479

Add test for SpdyUtils::GetPromisedUrlFromHeaders to verify that userinfo is ignored and that the path starts with /.
More comprehensive tests exist for SpdyUtils::GetPushPromiseUrl, which GetPromisedUrlFromHeaders delegates to.
Motivated by crbug.com/801831
Merge internal change: 229443812
https://chromium-review.googlesource.com/c/chromium/src/+/1427251

Add a DCHECK making sure an endpoint does not send a stop waiting frame with least_unacked = 0.
Merge internal change: 229438050
https://chromium-review.googlesource.com/c/chromium/src/+/1428400

In QUIC, add kFirstSendingPacketNumber to represent the first sending packet of a connection. Cleanup misusage of QuicPacketNumber, QuicPacketCount and uint64_t. No functional change expected, not protected.
Merge internal change: 229418838
https://chromium-review.googlesource.com/c/chromium/src/+/1428094

In QUIC, change tests functions to take uint64_t instead of QuicPacketNumber to make the transition cleaner.
Merge internal change: 229408324
https://chromium-review.googlesource.com/c/chromium/src/+/1428091

More error details about QUIC_STREAM_LENGTH_OVERFLOW while receiving stream frame. Error message changes only, not flag protected.
Merge internal change: 229402859
https://chromium-review.googlesource.com/c/chromium/src/+/1428086

Add option to disable padding during crypto handshake.
Padding is not always desirable: on slow connections it sends extra data during handshake, which slows down a handshake. (on 50kbps connection by about 150ms per one message).
In Quartc we always have ice enabled when we make a call, and we only enable the server when we start the call. ICE will only accept data from endpoints negotiated in STUN pings.
Add ability to disable padding during crypto handshake, for Quartc.
Merge internal change: 229314318
https://chromium-review.googlesource.com/c/chromium/src/+/1427982

Use 1-rtt setup for Quartc client instead of 2-rtt.
Currently client waits for the SHLO to start sending media. This is unnecessary, client can start sending media right after sending full CHLO.
This cuts the send time to 1-rtt for the client (server still waits 1.5 rtt to start sending data).
We should use 0-rtt setup in quic to start sending media from client after 0-rtt, and after 0.5rtt from the server.
Merge internal change: 229313999
https://chromium-review.googlesource.com/c/chromium/src/+/1428039

Add a DCHECK to make sure an endpoint does not send an empty ack frame.
Merge internal change: 229244057
https://chromium-review.googlesource.com/c/chromium/src/+/1427929

Remove set_minimum_size in crypto client handshaker.
This branch is no longer needed, plus it's redundant. (we set minimum_size inside FillInchoateHello. Also, padding is now done in packet generator).
Remove set_minimum_size in crypto client handshaker.
Merge internal change: 229231874
https://chromium-review.googlesource.com/c/chromium/src/+/1427319


Change-Id: I973b7d0e9e346ae648a0e525d37f6cbb876de5b4
Reviewed-on: https://chromium-review.googlesource.com/c/1432183
Reviewed-by: Ryan Hamilton <rch@chromium.org>
Commit-Queue: Renjie Tang <renjietang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#625540}
74 files changed