Land Recent QUIC Changes.

Trying to merge as many of flow control changes as possible before the
branch (we have all changed until Fri 06/13 21:20 UTC).

Test tools for udp proxying.  This involves a few refactors of test
tools but nothing which affects the internal server.

minor refactors to allow quic udp proxy testing.

Merge internal change: 69157651
https://codereview.chromium.org/331963002/


Added FEC policy per stream, which is translated to an FEC protection
value on writes further on down.

Merge internal change: 69153464
https://codereview.chromium.org/338623002/


Pull out stream/session updates from OnConfigNegotiated. Preparation for
updating stream/session with different received windows.

QUIC refector: Pull out stream/session updates from OnConfigNegotiated

Merge internal change: 69106467
https://codereview.chromium.org/337723003/


Rather than passing initial_flow_control_window all the way down the
call stack, put it inside QuicConfig as intended: each member of
QuicConfig has a "value to send" field, so populate this at the top
level.

rtenneti: when porting to Chromium, you should add
config.SetInitialFlowControlWindowToSend(kInitialReceiveWindowSize)

in QuicStreamFactory::CreateSession, just above line 837: *session =
  new QuicClientSession(...)

Store initial flow control window for QUIC in QuicConfig. No behavior
change intended.

Added the following unit tests to EndToEndTest.cc
+ DoNotSetResumeWriteAlarmIfConnectionFlowControlBlocked
+ NegotiateMaxOpenStreams

Merge internal change: 69079363
https://codereview.chromium.org/333803007/


First version of a QUIC SendAlgorithmSimulator which is designed to
simulate BBR and TCP flows and changes.

Merge internal change: 69035927
https://codereview.chromium.org/330163003/

[email protected], [email protected]

Review URL: https://codereview.chromium.org/330333006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277959 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/quic/quic_protocol.h b/net/quic/quic_protocol.h
index 23bdd3e1..eed756b 100644
--- a/net/quic/quic_protocol.h
+++ b/net/quic/quic_protocol.h
@@ -158,7 +158,13 @@
 // Indicates FEC protection level for data being written.
 enum FecProtection {
   MUST_FEC_PROTECT,  // Callee must FEC protect this data.
-  MAY_FEC_PROTECT  // Callee does not have to but may FEC protect this data.
+  MAY_FEC_PROTECT    // Callee does not have to but may FEC protect this data.
+};
+
+// Indicates FEC policy
+enum FecPolicy {
+  FEC_PROTECT_ALWAYS,   // All data in the stream should be FEC protected.
+  FEC_PROTECT_OPTIONAL  // Data in the stream does not need FEC protection.
 };
 
 enum QuicFrameType {