Landing Recent QUIC changes until 4:14 AM, Oct 28, 2017

Send an explicit QUIC connection close when we idle timeout, but there have been recent unacked tail loss probes.  Protected by FLAGS_quic_reloadable_flag_quic_explicit_close_after_tlp.

Merge internal change: 173768088
https://chromium-review.googlesource.com/c/chromium/src/+/749978

Remove timeout code that should have been deprecated.

n/a (Remove useless code)

Merge internal change: 173696357
https://chromium-review.googlesource.com/c/chromium/src/+/749975

Deprecate FLAGS_quic_reloadable_flag_quic_enable_random_padding.

Merge internal change: 173669334
https://chromium-review.googlesource.com/c/chromium/src/+/749974

Extract setting up delete_sessions_alarm_ and adding session to closed_session_list_ out of QuicDispatcher::OnConnectionClose(). Doing so allow subclass to destroy closed sessions in different ways.

Merge internal change: 173543146
https://chromium-review.googlesource.com/c/chromium/src/+/749973

In QUIC, stop calling OnStreamFrameDiscarded on stream cancellation, and canceled stream is immediately closed. Protected by FLAGS_quic_reloadable_flag_quic_remove_on_stream_frame_discarded.

Merge internal change: 173406337
https://chromium-review.googlesource.com/c/chromium/src/+/749824

Remove QuicUnackedPacketMap::RestoreToInFlight, because it's dead.

n/a (Dead code removal)

Merge internal change: 172944396
https://chromium-review.googlesource.com/c/chromium/src/+/750251

Remove AckListenerWrapper and ForceHolAckListener because they're dead code.

n/a (Dead code removal)

Merge internal change: 172939535
https://chromium-review.googlesource.com/c/chromium/src/+/750249

Rename UpdateSequenceNumberLength to UpdatePacketNumberLength in QuicPacketGenerator.

n/a (Method rename)

Merge internal change: 172920458
https://chromium-review.googlesource.com/c/chromium/src/+/750596

Add a DCHECK to ensure implementations of QuicPacketWriter don't return write blocked and then IsWriteBlocked() returns false.

n/a (Add a DCHECK)

Merge internal change: 172802216
https://chromium-review.googlesource.com/c/chromium/src/+/750247

Move QuicTransmissionInfo copying into QuicPendingRetransmission timeout.

n/a (no-op refactor)

Merge internal change: 172784381
https://chromium-review.googlesource.com/c/chromium/src/+/750595

Delete code associated with experiments

Remove experiment code.  If any clients in the wild are still sending
the QUIC connection option tags, they will be ignored.  Since this
change is only deleting code, it is not flag-protected.

Merge internal change: 172780334
https://chromium-review.googlesource.com/c/chromium/src/+/750244

Remove StreamBufferDeleter from quic_stream_frame.h because it is unused.

n/a (Remove dead code)

Merge internal change: 172750637
https://chromium-review.googlesource.com/c/chromium/src/+/750243

In QUIC, always force client to send connection ID.

Merge internal change: 172733471
https://chromium-review.googlesource.com/c/chromium/src/+/750273

Add a QUIC connection options to increase BBR's ack aggregation window to 20 and 40 RTTs.  Protected by FLAGS_quic_reloadable_flag_quic_bbr_ack_aggregation_window.

Merge internal change: 172669632
https://chromium-review.googlesource.com/c/chromium/src/+/750590

Deprecate FLAGS_quic_reloadable_flag_quic_handle_duplicate_trailers

Merge internal change: 172536859
https://chromium-review.googlesource.com/c/chromium/src/+/750586

Fix bug in IETF QUIC crypter nonce construction

bugfix in unused code branch

Merge internal change: 172532210
https://chromium-review.googlesource.com/c/chromium/src/+/750584

Create three new QUIC BBR connection options to modify STARTUP behavior to disable conservation(BBS1), make conservation more aggressive(BBS2) and use slowstart conservation(BBS3).  Protected by FLAGS_quic_reloadable_flag_quic_bbr_conservation_in_startup.

Merge internal change: 172501501
https://chromium-review.googlesource.com/c/chromium/src/+/750239

In QUIC, combine QuicPacketPublicHeader and QuicPacketHeader to QuicPacketHeader. No functional change expected.

This change also includes:
1. Replace version vector with version in QuicPacketHeader.
2. Replace public header with just connection id in QuicPublicResetPacket.
3. Define QuicVersionNegotiationPacket with only connection id and version
vector.

Merge internal change: 172457139
https://chromium-review.googlesource.com/c/chromium/src/+/750267

Fully drain the queue once per round in QUIC BBR when the BBR3 connection option is present.  Protected by FLAGS_quic_reloadable_flag_quic_bbr_fully_drain_queue.

Merge internal change: 172409681
https://chromium-review.googlesource.com/c/chromium/src/+/750228

Add MaxPacingRate() method to QuicConnection, for internal use.

Merge internal change: 172385426
https://chromium-review.googlesource.com/c/chromium/src/+/750226

Remove support for extremely costly code in QuicAckFrame's PacketNumberQueue AddRange and replace with a QUIC_BUG.  Replaces FLAGS_quic_reloadable_flag_quic_frames_deque2 with FLAGS_quic_reloadable_flag_quic_frames_deque3.

Merge internal change: 172374734
https://chromium-review.googlesource.com/c/chromium/src/+/750222

Deprecate use of largest_observed in QuicAckFrame because it's redundant.  Protected by FLAGS_quic_reloadable_flag_quic_deprecate_largest_observed.

This is the first of 2 CLs to deprecate QuicAckFrame.largest_observed:

CL-1: Move all reads into a central place, i.e. the LargestAcked() function,
in which our assumption for the deprecation is checked. Use a reloadable flag
to decide which value to return from the function.

CL-2: After the flag is true everywhere(and no issues found), remove the
deprecated_largest_observed field, this is safe because deprecated_largest_observed
is never read when the flag is true. Also remove the reloadable flag.

Merge internal change: 168829354
https://chromium-review.googlesource.com/c/chromium/src/+/750193

Bug: 
Cq-Include-Trybots: master.tryserver.chromium.android:android_cronet_tester;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: I7e7d8210475238c64af830d49e8604c2d3deeabb
Reviewed-on: https://chromium-review.googlesource.com/752510
Commit-Queue: Jana Iyengar <[email protected]>
Reviewed-by: Ryan Hamilton <[email protected]>
Cr-Commit-Position: refs/heads/master@{#513701}
diff --git a/net/quic/test_tools/quic_test_utils.cc b/net/quic/test_tools/quic_test_utils.cc
index 41da20c..5d1b1dc 100644
--- a/net/quic/test_tools/quic_test_utils.cc
+++ b/net/quic/test_tools/quic_test_utils.cc
@@ -45,7 +45,7 @@
     end_of_previous_block = block.limit;
   }
 
-  ack.largest_observed = ack.packets.Max();
+  ack.deprecated_largest_observed = ack.packets.Max();
 
   return ack;
 }
@@ -57,7 +57,7 @@
 QuicAckFrame MakeAckFrameWithAckBlocks(size_t num_ack_blocks,
                                        QuicPacketNumber least_unacked) {
   QuicAckFrame ack;
-  ack.largest_observed = 2 * num_ack_blocks + least_unacked;
+  ack.deprecated_largest_observed = 2 * num_ack_blocks + least_unacked;
   // Add enough received packets to get num_ack_blocks ack blocks.
   for (QuicPacketNumber i = 2; i < 2 * num_ack_blocks + 1; i += 2) {
     ack.packets.Add(least_unacked + i);
@@ -76,7 +76,7 @@
     bool last_frame = i == frames.size() - 1;
     const size_t frame_size = framer->GetSerializedFrameLength(
         frames[i], max_plaintext_size - packet_size, first_frame, last_frame,
-        header.public_header.packet_number_length);
+        header.packet_number_length);
     DCHECK(frame_size);
     packet_size += frame_size;
   }
@@ -92,10 +92,8 @@
   DCHECK_NE(0u, length);
   // Re-construct the data packet with data ownership.
   return new QuicPacket(buffer, length, /* owns_buffer */ true,
-                        header.public_header.connection_id_length,
-                        header.public_header.version_flag,
-                        header.public_header.nonce != nullptr,
-                        header.public_header.packet_number_length);
+                        header.connection_id_length, header.version_flag,
+                        header.nonce != nullptr, header.packet_number_length);
 }
 
 string Sha1Hash(QuicStringPiece data) {
@@ -169,7 +167,7 @@
 }
 
 bool NoOpFramerVisitor::OnUnauthenticatedPublicHeader(
-    const QuicPacketPublicHeader& header) {
+    const QuicPacketHeader& header) {
   return true;
 }
 
@@ -660,11 +658,11 @@
     QuicTransportVersionVector* versions,
     Perspective perspective) {
   QuicPacketHeader header;
-  header.public_header.connection_id = connection_id;
-  header.public_header.connection_id_length = connection_id_length;
-  header.public_header.version_flag = version_flag;
-  header.public_header.reset_flag = reset_flag;
-  header.public_header.packet_number_length = packet_number_length;
+  header.connection_id = connection_id;
+  header.connection_id_length = connection_id_length;
+  header.version_flag = version_flag;
+  header.reset_flag = reset_flag;
+  header.packet_number_length = packet_number_length;
   header.packet_number = packet_number;
   QuicStreamFrame stream_frame(1, false, 0, QuicStringPiece(data));
   QuicFrame frame(&stream_frame);
@@ -704,11 +702,11 @@
     QuicTransportVersionVector* versions,
     Perspective perspective) {
   QuicPacketHeader header;
-  header.public_header.connection_id = connection_id;
-  header.public_header.connection_id_length = connection_id_length;
-  header.public_header.version_flag = version_flag;
-  header.public_header.reset_flag = reset_flag;
-  header.public_header.packet_number_length = packet_number_length;
+  header.connection_id = connection_id;
+  header.connection_id_length = connection_id_length;
+  header.version_flag = version_flag;
+  header.reset_flag = reset_flag;
+  header.packet_number_length = packet_number_length;
   header.packet_number = packet_number;
   QuicStreamFrame stream_frame(1, false, 0, QuicStringPiece(data));
   QuicFrame frame(&stream_frame);