Implement a QuicHeadersStream to handle reliable in-order delivery of
headers.

Changes the way headers are delivered in QUIC from being the first bytes
on a stream, to being delivered as SPDY SYN_STREAM/SYN_REPLY frames on
a dedicated headers stream.  This also creates QUIC_VERSION_13.  Since
the intra-stream serialization format changes, it is not possible for a
client to handle a version negotiation across this boundary.

Merge internal change: 58313427

[email protected]

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@241682 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/quic/test_tools/quic_test_utils.cc b/net/quic/test_tools/quic_test_utils.cc
index d85f92f..1cf7e7b9 100644
--- a/net/quic/test_tools/quic_test_utils.cc
+++ b/net/quic/test_tools/quic_test_utils.cc
@@ -262,6 +262,17 @@
       helper_(helper()) {
 }
 
+MockConnection::MockConnection(bool is_server,
+                               const QuicVersionVector& supported_versions)
+    : QuicConnection(kTestGuid,
+                     IPEndPoint(Loopback4(), kTestPort),
+                     new testing::NiceMock<MockHelper>(),
+                     new testing::NiceMock<MockPacketWriter>(),
+                     is_server, supported_versions),
+      writer_(QuicConnectionPeer::GetWriter(this)),
+      helper_(helper()) {
+}
+
 MockConnection::~MockConnection() {
 }
 
@@ -273,6 +284,12 @@
     : MockConnection(is_server) {
 }
 
+PacketSavingConnection::PacketSavingConnection(
+    bool is_server,
+    const QuicVersionVector& supported_versions)
+    : MockConnection(is_server, supported_versions) {
+}
+
 PacketSavingConnection::~PacketSavingConnection() {
   STLDeleteElements(&packets_);
   STLDeleteElements(&encrypted_packets_);
@@ -512,6 +529,12 @@
   return config;
 }
 
+QuicVersionVector SupportedVersions(QuicVersion version) {
+  QuicVersionVector versions;
+  versions.push_back(version);
+  return versions;
+}
+
 bool TestDecompressorVisitor::OnDecompressedData(StringPiece data) {
   data.AppendToString(&data_);
   return true;