Landing recent QUIC changes until 8:47 PM, Nov 30, 2018 UTC-5

Flag changes:
Enable FLAGS_quic_reloadable_flag_quic_aggregate_acked_stream_frames_2
Enable FLAGS_quic_reloadable_flag_quic_new_lru_cache
Enable FLAGS_quic_reloadable_flag_quic_optimize_encryption_established
Enable FLAGS_quic_restart_flag_quic_no_ephemeral_key_source

Handle RST_STREAM frames received by PendingStream.
Merge internal change: 223602833
https://chromium-review.googlesource.com/c/chromium/src/+/1365799

Add a method to QuartcStream to ask it for the current read offset.
Merge internal change: 223580443
https://chromium-review.googlesource.com/c/chromium/src/+/1365798

First step towards variable length QUIC connection IDs. This CL introduces QuicConnectionIdFromUInt64() and QuicConnectionIdToUInt64() and uses it in all code that assumes connection IDs are uint64_t's. Once this is in, the next step will be to make QuicConnectionId a class that contains a uint64_t.
Merge internal change: 223557525
https://chromium-review.googlesource.com/c/chromium/src/+/1365796

In QUIC v99, when stream is created, determine stream type solely by stream ID.
Merge internal change: 223522570
https://chromium-review.googlesource.com/c/chromium/src/+/1363435

Add a new method to QuicSession for creating an incoming stream from a PendingStream. Implement this method in the various session subclasses which also requires add a PendingStream-based constructor to various QuicStream subclasses.
Merge internal change: 222419285
https://chromium-review.googlesource.com/c/chromium/src/+/1363434

Pass a QuicPerPacketContext into QuicTimeWaitListManager::ProcessPacket and QuicTimeWaitListManager::SendVersionNegotiationPacket. The context is not used in this CL, so there is no behavior change.
Merge internal change: 223407840
https://chromium-review.googlesource.com/c/chromium/src/+/1361636

Add a QUIC connection option to disable pacing offload.
Merge internal change: 223405141
https://chromium-review.googlesource.com/c/chromium/src/+/1361635

Change QpackInstructionEncoder and Decoder varint type to uint64_t.
Merge internal change: 223384725
https://chromium-review.googlesource.com/c/chromium/src/+/1361628

In QuicTimeWaitListManager, rename server_address to self_address, and client_address to peer_address.
Merge internal change: 223338983
https://chromium-review.googlesource.com/c/chromium/src/+/1361626

When a QuicStream is constructed from a PendingStream, ensure that the moved sequencer points to the new QuicStream not the old PendingStream.
Merge internal change: 223338371
https://chromium-review.googlesource.com/c/chromium/src/+/1361625

In QUIC, implement IETF style bidirectional and unidirectional stream IDs numbering in version 99.
Merge internal change: 223337761
https://chromium-review.googlesource.com/c/chromium/src/+/1361624

Move quic::QuicDispatcher::PerPacketContext to quic_packets.h, and rename it to quic::QuicPerPacketContext.
Merge internal change: 223234533
https://chromium-review.googlesource.com/c/chromium/src/+/1361329

Add GetNextUnreadRegion() API in QuicStreamSequencerBuffer.
Merge internal change: 223233937
https://chromium-review.googlesource.com/c/chromium/src/+/1361328

Remove the limit on QUIC stream buffer length.
Merge internal change: 223213240
https://chromium-review.googlesource.com/c/chromium/src/+/1361326

Change QuartcStream's max retransmission count to per-stream rather than number of frames.
Merge internal change: 223014131
https://chromium-review.googlesource.com/c/chromium/src/+/1361323

[email protected]

Change-Id: I5f57f2c168cef9d0875bc6a516702110be47b070
Reviewed-on: https://chromium-review.googlesource.com/c/1366437
Commit-Queue: Fan Yang <[email protected]>
Reviewed-by: Kentaro Hara <[email protected]>
Reviewed-by: Martin Šrámek <[email protected]>
Reviewed-by: Ryan Hamilton <[email protected]>
Cr-Commit-Position: refs/heads/master@{#615215}
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index cd4ef88ae..4ebfc92 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -260,13 +260,13 @@
         client_headers_include_h2_stream_dependency_(std::get<1>(GetParam())),
         supported_versions_(quic::test::SupportedTransportVersions(version_)),
         client_maker_(version_,
-                      0,
+                      quic::EmptyQuicConnectionId(),
                       &clock_,
                       kDefaultServerHostName,
                       quic::Perspective::IS_CLIENT,
                       client_headers_include_h2_stream_dependency_),
         server_maker_(version_,
-                      0,
+                      quic::EmptyQuicConnectionId(),
                       &clock_,
                       kDefaultServerHostName,
                       quic::Perspective::IS_SERVER,
@@ -890,12 +890,12 @@
     SendRequestAndExpectHttpResponseFromProxy("hello from http", true, 443);
   }
 
-  quic::QuicStreamId GetNthClientInitiatedStreamId(int n) {
-    return quic::test::GetNthClientInitiatedStreamId(version_, n);
+  quic::QuicStreamId GetNthClientInitiatedBidirectionalStreamId(int n) {
+    return quic::test::GetNthClientInitiatedBidirectionalStreamId(version_, n);
   }
 
-  quic::QuicStreamId GetNthServerInitiatedStreamId(int n) {
-    return quic::test::GetNthServerInitiatedStreamId(version_, n);
+  quic::QuicStreamId GetNthServerInitiatedUnidirectionalStreamId(int n) {
+    return quic::test::GetNthServerInitiatedUnidirectionalStreamId(version_, n);
   }
 
   static void AddCertificate(SSLSocketDataProvider* ssl_data) {
@@ -1039,14 +1039,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
 
@@ -1073,14 +1075,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
 
@@ -1107,14 +1111,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
 
@@ -1175,7 +1181,7 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
   spdy::SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK");
   response_headers["key1"] = std::string(30000, 'A');
@@ -1186,8 +1192,9 @@
   response_headers["key6"] = std::string(30000, 'A');
   response_headers["key7"] = std::string(30000, 'A');
   response_headers["key8"] = std::string(30000, 'A');
-  spdy::SpdyHeadersIR headers_frame(GetNthClientInitiatedStreamId(0),
-                                    std::move(response_headers));
+  spdy::SpdyHeadersIR headers_frame(
+      GetNthClientInitiatedBidirectionalStreamId(0),
+      std::move(response_headers));
   spdy::SpdyFramer response_framer(spdy::SpdyFramer::ENABLE_COMPRESSION);
   spdy::SpdySerializedFrame spdy_frame =
       response_framer.SerializeFrame(headers_frame);
@@ -1204,9 +1211,9 @@
   }
 
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerDataPacket(packet_number, GetNthClientInitiatedStreamId(0),
-                                false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 packet_number, GetNthClientInitiatedBidirectionalStreamId(0),
+                 false, true, 0, "hello!"));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddWrite(ASYNC, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddWrite(ASYNC,
@@ -1231,7 +1238,7 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
   spdy::SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK");
   response_headers["key1"] = std::string(30000, 'A');
@@ -1243,8 +1250,9 @@
   response_headers["key7"] = std::string(30000, 'A');
   response_headers["key8"] = std::string(30000, 'A');
   response_headers["key9"] = std::string(30000, 'A');
-  spdy::SpdyHeadersIR headers_frame(GetNthClientInitiatedStreamId(0),
-                                    std::move(response_headers));
+  spdy::SpdyHeadersIR headers_frame(
+      GetNthClientInitiatedBidirectionalStreamId(0),
+      std::move(response_headers));
   spdy::SpdyFramer response_framer(spdy::SpdyFramer::ENABLE_COMPRESSION);
   spdy::SpdySerializedFrame spdy_frame =
       response_framer.SerializeFrame(headers_frame);
@@ -1261,15 +1269,15 @@
   }
 
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerDataPacket(packet_number, GetNthClientInitiatedStreamId(0),
-                                false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 packet_number, GetNthClientInitiatedBidirectionalStreamId(0),
+                 false, true, 0, "hello!"));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddWrite(ASYNC, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddWrite(
-      ASYNC, ConstructClientAckAndRstPacket(4, GetNthClientInitiatedStreamId(0),
-                                            quic::QUIC_HEADERS_TOO_LARGE,
-                                            packet_number, 3, 1));
+      ASYNC, ConstructClientAckAndRstPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(0),
+                 quic::QUIC_HEADERS_TOO_LARGE, packet_number, 3, 1));
 
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -1294,14 +1302,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
 
@@ -1326,14 +1336,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "http", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -1372,14 +1384,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "http", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);
@@ -1430,14 +1444,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);
@@ -1517,14 +1533,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -1582,11 +1600,12 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &request_header_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    true, GetResponseHeaders("421"), nullptr));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 GetResponseHeaders("421"), nullptr));
   mock_quic_data.AddRead(ASYNC, OK);
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -1707,14 +1726,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -1773,14 +1794,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -1833,14 +1856,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -1875,14 +1900,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -1997,14 +2024,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -2055,14 +2084,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -2088,11 +2119,12 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
   // Read a GoAway packet with
   // quic::QuicErrorCode: quic::QUIC_ERROR_MIGRATING_PORT from the peer.
   mock_quic_data.AddRead(SYNCHRONOUS,
@@ -2100,13 +2132,14 @@
                              2, quic::QUIC_ERROR_MIGRATING_PORT,
                              "connection migration with port change only"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
-  mock_quic_data.AddRead(SYNCHRONOUS, ConstructServerDataPacket(
-                                          3, GetNthClientInitiatedStreamId(0),
-                                          false, true, 0, "hello!"));
-  mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientAckAndRstPacket(4, GetNthClientInitiatedStreamId(0),
-                                     quic::QUIC_STREAM_CANCELLED, 3, 3, 1));
+  mock_quic_data.AddRead(
+      SYNCHRONOUS, ConstructServerDataPacket(
+                       3, GetNthClientInitiatedBidirectionalStreamId(0), false,
+                       true, 0, "hello!"));
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientAckAndRstPacket(
+                              4, GetNthClientInitiatedBidirectionalStreamId(0),
+                              quic::QUIC_STREAM_CANCELLED, 3, 3, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
 
@@ -2470,14 +2503,16 @@
   quic_data2.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          3, GetNthClientInitiatedStreamId(0), true, true,
+          3, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  quic_data2.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                1, GetNthClientInitiatedStreamId(0), false,
-                                false, GetResponseHeaders("200 OK")));
   quic_data2.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  quic_data2.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   quic_data2.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(4, 2, 1, 1));
   quic_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
   quic_data2.AddSocketDataToFactory(&socket_factory_);
@@ -2563,9 +2598,9 @@
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeRequestHeadersPacketAndSaveData(
-                         1, GetNthClientInitiatedStreamId(0), true, true,
-                         priority, GetRequestHeaders("GET", "https", "/"), 0,
-                         nullptr, &header_stream_offset, &request_data));
+                         1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                         true, priority, GetRequestHeaders("GET", "https", "/"),
+                         0, nullptr, &header_stream_offset, &request_data));
 
   std::string settings_data;
   quic::QuicStreamOffset settings_offset = header_stream_offset;
@@ -2681,9 +2716,9 @@
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeRequestHeadersPacketAndSaveData(
-                         1, GetNthClientInitiatedStreamId(0), true, true,
-                         priority, GetRequestHeaders("GET", "https", "/"), 0,
-                         nullptr, &header_stream_offset, &request_data));
+                         1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                         true, priority, GetRequestHeaders("GET", "https", "/"),
+                         0, nullptr, &header_stream_offset, &request_data));
 
   std::string settings_data;
   quic::QuicStreamOffset settings_offset = header_stream_offset;
@@ -2807,9 +2842,9 @@
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeRequestHeadersPacketAndSaveData(
-                         1, GetNthClientInitiatedStreamId(0), true, true,
-                         priority, GetRequestHeaders("GET", "https", "/"), 0,
-                         nullptr, &header_stream_offset, &request_data));
+                         1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                         true, priority, GetRequestHeaders("GET", "https", "/"),
+                         0, nullptr, &header_stream_offset, &request_data));
 
   std::string settings_data;
   quic::QuicStreamOffset settings_offset = header_stream_offset;
@@ -2818,9 +2853,10 @@
                      client_maker_.MakeInitialSettingsPacketAndSaveData(
                          2, &header_stream_offset, &settings_data));
 
-  quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeRstPacket(
-                                      3, true, GetNthClientInitiatedStreamId(0),
-                                      quic::QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(SYNCHRONOUS,
+                     client_maker_.MakeRstPacket(
+                         3, true, GetNthClientInitiatedBidirectionalStreamId(0),
+                         quic::QUIC_STREAM_CANCELLED));
   // TLP 1
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeDataPacket(
@@ -2832,9 +2868,10 @@
                          5, quic::QuicUtils::GetHeadersStreamId(version_), true,
                          false, settings_offset, settings_data));
   // RTO 1
-  quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeRstPacket(
-                                      6, true, GetNthClientInitiatedStreamId(0),
-                                      quic::QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(SYNCHRONOUS,
+                     client_maker_.MakeRstPacket(
+                         6, true, GetNthClientInitiatedBidirectionalStreamId(0),
+                         quic::QUIC_STREAM_CANCELLED));
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeDataPacket(
                          7, quic::QuicUtils::GetHeadersStreamId(version_), true,
@@ -2844,9 +2881,10 @@
                      client_maker_.MakeDataPacket(
                          8, quic::QuicUtils::GetHeadersStreamId(version_), true,
                          false, settings_offset, settings_data));
-  quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeRstPacket(
-                                      9, true, GetNthClientInitiatedStreamId(0),
-                                      quic::QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(SYNCHRONOUS,
+                     client_maker_.MakeRstPacket(
+                         9, true, GetNthClientInitiatedBidirectionalStreamId(0),
+                         quic::QUIC_STREAM_CANCELLED));
   // RTO 3
   quic_data.AddWrite(
       SYNCHRONOUS, client_maker_.MakeDataPacket(
@@ -2858,9 +2896,9 @@
                        false, settings_offset, settings_data));
   // RTO 4
   quic_data.AddWrite(
-      SYNCHRONOUS,
-      client_maker_.MakeRstPacket(12, true, GetNthClientInitiatedStreamId(0),
-                                  quic::QUIC_STREAM_CANCELLED));
+      SYNCHRONOUS, client_maker_.MakeRstPacket(
+                       12, true, GetNthClientInitiatedBidirectionalStreamId(0),
+                       quic::QUIC_STREAM_CANCELLED));
   quic_data.AddWrite(
       SYNCHRONOUS, client_maker_.MakeDataPacket(
                        13, quic::QuicUtils::GetHeadersStreamId(version_), true,
@@ -2934,16 +2972,17 @@
   quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          1, GetNthClientInitiatedStreamId(0), true, true,
+          1, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
   client_maker_.SetEncryptionLevel(quic::ENCRYPTION_FORWARD_SECURE);
   quic_data.AddWrite(SYNCHRONOUS,
                      ConstructInitialSettingsPacket(2, &header_stream_offset));
   // Peer sending data from an non-existing stream causes this end to raise
   // error and close connection.
-  quic_data.AddRead(ASYNC, ConstructServerRstPacket(
-                               1, false, GetNthClientInitiatedStreamId(47),
-                               quic::QUIC_STREAM_LAST_ERROR));
+  quic_data.AddRead(
+      ASYNC, ConstructServerRstPacket(
+                 1, false, GetNthClientInitiatedBidirectionalStreamId(47),
+                 quic::QUIC_STREAM_LAST_ERROR));
   std::string quic_error_details = "Data for nonexistent stream";
   quic_data.AddWrite(SYNCHRONOUS,
                      ConstructClientAckAndConnectionClosePacket(
@@ -3012,9 +3051,9 @@
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeRequestHeadersPacketAndSaveData(
-                         1, GetNthClientInitiatedStreamId(0), true, true,
-                         priority, GetRequestHeaders("GET", "https", "/"), 0,
-                         nullptr, &header_stream_offset, &request_data));
+                         1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                         true, priority, GetRequestHeaders("GET", "https", "/"),
+                         0, nullptr, &header_stream_offset, &request_data));
 
   std::string settings_data;
   quic::QuicStreamOffset settings_offset = header_stream_offset;
@@ -3154,9 +3193,9 @@
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeRequestHeadersPacketAndSaveData(
-                         1, GetNthClientInitiatedStreamId(0), true, true,
-                         priority, GetRequestHeaders("GET", "https", "/"), 0,
-                         nullptr, &header_stream_offset, &request_data));
+                         1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                         true, priority, GetRequestHeaders("GET", "https", "/"),
+                         0, nullptr, &header_stream_offset, &request_data));
 
   std::string settings_data;
   quic::QuicStreamOffset settings_offset = header_stream_offset;
@@ -3300,9 +3339,9 @@
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeRequestHeadersPacketAndSaveData(
-                         1, GetNthClientInitiatedStreamId(0), true, true,
-                         priority, GetRequestHeaders("GET", "https", "/"), 0,
-                         nullptr, &header_stream_offset, &request_data));
+                         1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                         true, priority, GetRequestHeaders("GET", "https", "/"),
+                         0, nullptr, &header_stream_offset, &request_data));
 
   std::string settings_data;
   quic::QuicStreamOffset settings_offset = header_stream_offset;
@@ -3312,8 +3351,8 @@
                          2, &header_stream_offset, &settings_data));
 
   quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                               1, GetNthClientInitiatedStreamId(0), false,
-                               false, GetResponseHeaders("200 OK")));
+                               1, GetNthClientInitiatedBidirectionalStreamId(0),
+                               false, false, GetResponseHeaders("200 OK")));
   // quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 1, 1));
   quic_data.AddWrite(
       SYNCHRONOUS,
@@ -3453,9 +3492,9 @@
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeRequestHeadersPacketAndSaveData(
-                         1, GetNthClientInitiatedStreamId(0), true, true,
-                         priority, GetRequestHeaders("GET", "https", "/"), 0,
-                         nullptr, &header_stream_offset, &request_data));
+                         1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                         true, priority, GetRequestHeaders("GET", "https", "/"),
+                         0, nullptr, &header_stream_offset, &request_data));
 
   std::string settings_data;
   quic::QuicStreamOffset settings_offset = header_stream_offset;
@@ -3604,9 +3643,9 @@
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeRequestHeadersPacketAndSaveData(
-                         1, GetNthClientInitiatedStreamId(0), true, true,
-                         priority, GetRequestHeaders("GET", "https", "/"), 0,
-                         nullptr, &header_stream_offset, &request_data));
+                         1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                         true, priority, GetRequestHeaders("GET", "https", "/"),
+                         0, nullptr, &header_stream_offset, &request_data));
 
   std::string settings_data;
   quic::QuicStreamOffset settings_offset = header_stream_offset;
@@ -3615,9 +3654,10 @@
                      client_maker_.MakeInitialSettingsPacketAndSaveData(
                          2, &header_stream_offset, &settings_data));
 
-  quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeRstPacket(
-                                      3, true, GetNthClientInitiatedStreamId(0),
-                                      quic::QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(SYNCHRONOUS,
+                     client_maker_.MakeRstPacket(
+                         3, true, GetNthClientInitiatedBidirectionalStreamId(0),
+                         quic::QUIC_STREAM_CANCELLED));
   // TLP 1
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeDataPacket(
@@ -3629,9 +3669,10 @@
                          5, quic::QuicUtils::GetHeadersStreamId(version_), true,
                          false, settings_offset, settings_data));
   // RTO 1
-  quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeRstPacket(
-                                      6, true, GetNthClientInitiatedStreamId(0),
-                                      quic::QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(SYNCHRONOUS,
+                     client_maker_.MakeRstPacket(
+                         6, true, GetNthClientInitiatedBidirectionalStreamId(0),
+                         quic::QUIC_STREAM_CANCELLED));
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeDataPacket(
                          7, quic::QuicUtils::GetHeadersStreamId(version_), true,
@@ -3641,9 +3682,10 @@
                      client_maker_.MakeDataPacket(
                          8, quic::QuicUtils::GetHeadersStreamId(version_), true,
                          false, settings_offset, settings_data));
-  quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeRstPacket(
-                                      9, true, GetNthClientInitiatedStreamId(0),
-                                      quic::QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(SYNCHRONOUS,
+                     client_maker_.MakeRstPacket(
+                         9, true, GetNthClientInitiatedBidirectionalStreamId(0),
+                         quic::QUIC_STREAM_CANCELLED));
   // RTO 3
   quic_data.AddWrite(
       SYNCHRONOUS, client_maker_.MakeDataPacket(
@@ -3655,9 +3697,9 @@
                        false, settings_offset, settings_data));
   // RTO 4
   quic_data.AddWrite(
-      SYNCHRONOUS,
-      client_maker_.MakeRstPacket(12, true, GetNthClientInitiatedStreamId(0),
-                                  quic::QUIC_STREAM_CANCELLED));
+      SYNCHRONOUS, client_maker_.MakeRstPacket(
+                       12, true, GetNthClientInitiatedBidirectionalStreamId(0),
+                       quic::QUIC_STREAM_CANCELLED));
   quic_data.AddWrite(
       SYNCHRONOUS, client_maker_.MakeDataPacket(
                        13, quic::QuicUtils::GetHeadersStreamId(version_), true,
@@ -3734,16 +3776,17 @@
   quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          1, GetNthClientInitiatedStreamId(0), true, true,
+          1, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
   client_maker_.SetEncryptionLevel(quic::ENCRYPTION_FORWARD_SECURE);
   quic_data.AddWrite(SYNCHRONOUS,
                      ConstructInitialSettingsPacket(2, &header_stream_offset));
   // Peer sending data from an non-existing stream causes this end to raise
   // error and close connection.
-  quic_data.AddRead(ASYNC, ConstructServerRstPacket(
-                               1, false, GetNthClientInitiatedStreamId(47),
-                               quic::QUIC_STREAM_LAST_ERROR));
+  quic_data.AddRead(
+      ASYNC, ConstructServerRstPacket(
+                 1, false, GetNthClientInitiatedBidirectionalStreamId(47),
+                 quic::QUIC_STREAM_LAST_ERROR));
   std::string quic_error_details = "Data for nonexistent stream";
   quic_data.AddWrite(SYNCHRONOUS,
                      ConstructClientAckAndConnectionClosePacket(
@@ -3831,9 +3874,9 @@
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
   quic_data.AddWrite(SYNCHRONOUS,
                      client_maker_.MakeRequestHeadersPacketAndSaveData(
-                         1, GetNthClientInitiatedStreamId(0), true, true,
-                         priority, GetRequestHeaders("GET", "https", "/"), 0,
-                         nullptr, &header_stream_offset, &request_data));
+                         1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                         true, priority, GetRequestHeaders("GET", "https", "/"),
+                         0, nullptr, &header_stream_offset, &request_data));
 
   std::string settings_data;
   // quic::QuicStreamOffset settings_offset = header_stream_offset;
@@ -3842,9 +3885,10 @@
                      client_maker_.MakeInitialSettingsPacketAndSaveData(
                          2, &header_stream_offset, &settings_data));
 
-  quic_data.AddRead(ASYNC, ConstructServerRstPacket(
-                               1, false, GetNthClientInitiatedStreamId(0),
-                               quic::QUIC_HEADERS_TOO_LARGE));
+  quic_data.AddRead(ASYNC,
+                    ConstructServerRstPacket(
+                        1, false, GetNthClientInitiatedBidirectionalStreamId(0),
+                        quic::QUIC_HEADERS_TOO_LARGE));
 
   quic_data.AddRead(ASYNC, OK);
   quic_data.AddSocketDataToFactory(&socket_factory_);
@@ -3942,15 +3986,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &request_header_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 1, GetNthClientInitiatedStreamId(0), false, false,
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -4016,33 +4061,38 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &request_header_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 1, GetNthClientInitiatedStreamId(0), false, false,
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
 
   // Second request will go over the pooled QUIC connection, but will be
   // reset by the server.
   QuicTestPacketMaker client_maker2(
-      version_, 0, &clock_, origin2.host(), quic::Perspective::IS_CLIENT,
+      version_, quic::EmptyQuicConnectionId(), &clock_, origin2.host(),
+      quic::Perspective::IS_CLIENT,
       client_headers_include_h2_stream_dependency_);
-  QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2.host(),
+  QuicTestPacketMaker server_maker2(version_, quic::EmptyQuicConnectionId(),
+                                    &clock_, origin2.host(),
                                     quic::Perspective::IS_SERVER, false);
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          4, GetNthClientInitiatedStreamId(1), false, true,
+          4, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
           GetRequestHeaders("GET", "https", "/", &client_maker2),
-          GetNthClientInitiatedStreamId(0), &request_header_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerRstPacket(
-                                    3, false, GetNthClientInitiatedStreamId(1),
-                                    quic::QUIC_HEADERS_TOO_LARGE));
+          GetNthClientInitiatedBidirectionalStreamId(0),
+          &request_header_offset));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerRstPacket(
+                 3, false, GetNthClientInitiatedBidirectionalStreamId(1),
+                 quic::QUIC_HEADERS_TOO_LARGE));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
 
@@ -4156,7 +4206,7 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &request_header_offset));
 
   std::string alt_svc_list =
@@ -4165,29 +4215,31 @@
   mock_quic_data.AddRead(
       ASYNC,
       ConstructServerResponseHeadersPacket(
-          1, GetNthClientInitiatedStreamId(0), false, false,
+          1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
           GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
 
   // Second QUIC request data.
   // Connection pooling, using existing session, no need to include version
   // as version negotiation has been completed.
   mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientRequestHeadersPacket(
-          4, GetNthClientInitiatedStreamId(1), false, true,
-          GetRequestHeaders("GET", "https", "/"),
-          GetNthClientInitiatedStreamId(0), &request_header_offset));
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       4, GetNthClientInitiatedBidirectionalStreamId(1), false,
+                       true, GetRequestHeaders("GET", "https", "/"),
+                       GetNthClientInitiatedBidirectionalStreamId(0),
+                       &request_header_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 3, GetNthClientInitiatedStreamId(1), false, false,
+                 3, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(1),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -4225,36 +4277,38 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "http", "/"), &request_header_offset));
 
   std::string alt_svc_list;
   mock_quic_data.AddRead(
       ASYNC,
       ConstructServerResponseHeadersPacket(
-          1, GetNthClientInitiatedStreamId(0), false, false,
+          1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
           GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
 
   // Second QUIC request data.
   // Connection pooling, using existing session, no need to include version
   // as version negotiation has been completed.
   mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientRequestHeadersPacket(
-          4, GetNthClientInitiatedStreamId(1), false, true,
-          GetRequestHeaders("GET", "http", "/"),
-          GetNthClientInitiatedStreamId(0), &request_header_offset));
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       4, GetNthClientInitiatedBidirectionalStreamId(1), false,
+                       true, GetRequestHeaders("GET", "http", "/"),
+                       GetNthClientInitiatedBidirectionalStreamId(0),
+                       &request_header_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 3, GetNthClientInitiatedStreamId(1), false, false,
+                 3, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(1),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -4308,31 +4362,33 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &request_header_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 1, GetNthClientInitiatedStreamId(0), false, false,
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
 
   // Second request.
   mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientRequestHeadersPacket(
-          4, GetNthClientInitiatedStreamId(1), false, true,
-          GetRequestHeaders("GET", "https", "/"),
-          GetNthClientInitiatedStreamId(0), &request_header_offset));
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       4, GetNthClientInitiatedBidirectionalStreamId(1), false,
+                       true, GetRequestHeaders("GET", "https", "/"),
+                       GetNthClientInitiatedBidirectionalStreamId(0),
+                       &request_header_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 3, GetNthClientInitiatedStreamId(1), false, false,
+                 3, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(1),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -4391,36 +4447,41 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &request_header_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 1, GetNthClientInitiatedStreamId(0), false, false,
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
 
   // Second request.
   QuicTestPacketMaker client_maker2(
-      version_, 0, &clock_, origin2.host(), quic::Perspective::IS_CLIENT,
+      version_, quic::EmptyQuicConnectionId(), &clock_, origin2.host(),
+      quic::Perspective::IS_CLIENT,
       client_headers_include_h2_stream_dependency_);
-  QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2.host(),
+  QuicTestPacketMaker server_maker2(version_, quic::EmptyQuicConnectionId(),
+                                    &clock_, origin2.host(),
                                     quic::Perspective::IS_SERVER, false);
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          4, GetNthClientInitiatedStreamId(1), false, true,
+          4, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
           GetRequestHeaders("GET", "https", "/", &client_maker2),
-          GetNthClientInitiatedStreamId(0), &request_header_offset));
+          GetNthClientInitiatedBidirectionalStreamId(0),
+          &request_header_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 3, GetNthClientInitiatedStreamId(1), false, false,
+                 3, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(1),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -4513,7 +4574,8 @@
   quic::QuicStreamOffset response_header_offset = 0;
 
   QuicTestPacketMaker client_maker(
-      version_, 0, &clock_, "mail.example.org", quic::Perspective::IS_CLIENT,
+      version_, quic::EmptyQuicConnectionId(), &clock_, "mail.example.org",
+      quic::Perspective::IS_CLIENT,
       client_headers_include_h2_stream_dependency_);
   server_maker_.set_hostname("www.example.org");
   client_maker_.set_hostname("www.example.org");
@@ -4524,31 +4586,34 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &request_header_offset));
 
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 1, GetNthClientInitiatedStreamId(0), false, false,
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerDataPacket(
-                                    2, GetNthClientInitiatedStreamId(0), false,
-                                    true, 0, "hello from mail QUIC!"));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello from mail QUIC!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   // Second QUIC request data.
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          4, GetNthClientInitiatedStreamId(1), false, true,
+          4, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
           GetRequestHeaders("GET", "https", "/", &client_maker),
-          GetNthClientInitiatedStreamId(0), &request_header_offset));
+          GetNthClientInitiatedBidirectionalStreamId(0),
+          &request_header_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 3, GetNthClientInitiatedStreamId(1), false, false,
+                 3, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
                  GetResponseHeaders("200 OK"), &response_header_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerDataPacket(
-                                    4, GetNthClientInitiatedStreamId(1), false,
-                                    true, 0, "hello from mail QUIC!"));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
+                 0, "hello from mail QUIC!"));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -4628,14 +4693,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -4682,14 +4749,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, 0);  // EOF
 
@@ -4716,14 +4785,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "http", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -4816,14 +4887,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          1, GetNthClientInitiatedStreamId(0), true, true,
+          1, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(2, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -4847,16 +4920,18 @@
   MockQuicData mock_quic_data;
   client_maker_.SetEncryptionLevel(quic::ENCRYPTION_INITIAL);
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              1, GetNthClientInitiatedStreamId(0), true, true,
-                              GetRequestHeaders("GET", "https", "/")));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       true, GetRequestHeaders("GET", "https", "/")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(2, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -4928,14 +5003,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
@@ -4983,19 +5060,20 @@
   quic::QuicStreamOffset server_header_stream_offset = 0;
   client_maker_.SetEncryptionLevel(quic::ENCRYPTION_INITIAL);
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              1, GetNthClientInitiatedStreamId(0), true, true,
-                              GetRequestHeaders("GET", "https", "/"),
-                              &client_header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("425 TOO_EARLY"),
-                                    &server_header_stream_offset));
   mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientAckAndRstPacket(2, GetNthClientInitiatedStreamId(0),
-                                     quic::QUIC_STREAM_CANCELLED, 1, 1, 1));
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       true, GetRequestHeaders("GET", "https", "/"),
+                       &client_header_stream_offset));
+  mock_quic_data.AddRead(
+      ASYNC,
+      ConstructServerResponseHeadersPacket(
+          1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+          GetResponseHeaders("425 TOO_EARLY"), &server_header_stream_offset));
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientAckAndRstPacket(
+                              2, GetNthClientInitiatedBidirectionalStreamId(0),
+                              quic::QUIC_STREAM_CANCELLED, 1, 1, 1));
 
   client_maker_.SetEncryptionLevel(quic::ENCRYPTION_FORWARD_SECURE);
 
@@ -5013,18 +5091,19 @@
   client_header_stream_offset += spdy_frame.size();
 
   mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientRequestHeadersPacket(
-          4, GetNthClientInitiatedStreamId(1), false, true,
-          GetRequestHeaders("GET", "https", "/"),
-          GetNthClientInitiatedStreamId(0), &client_header_stream_offset));
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       4, GetNthClientInitiatedBidirectionalStreamId(1), false,
+                       true, GetRequestHeaders("GET", "https", "/"),
+                       GetNthClientInitiatedBidirectionalStreamId(0),
+                       &client_header_stream_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 2, GetNthClientInitiatedStreamId(1), false, false,
+                 2, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
                  GetResponseHeaders("200 OK"), &server_header_stream_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(3, GetNthClientInitiatedStreamId(1),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 3, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndConnectionClosePacket(5, 3, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -5079,19 +5158,20 @@
   quic::QuicStreamOffset server_header_stream_offset = 0;
   client_maker_.SetEncryptionLevel(quic::ENCRYPTION_INITIAL);
   client_maker_.SetLongHeaderType(quic::ZERO_RTT_PROTECTED);
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              1, GetNthClientInitiatedStreamId(0), true, true,
-                              GetRequestHeaders("GET", "https", "/"),
-                              &client_header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("425 TOO_EARLY"),
-                                    &server_header_stream_offset));
   mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientAckAndRstPacket(2, GetNthClientInitiatedStreamId(0),
-                                     quic::QUIC_STREAM_CANCELLED, 1, 1, 1));
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       true, GetRequestHeaders("GET", "https", "/"),
+                       &client_header_stream_offset));
+  mock_quic_data.AddRead(
+      ASYNC,
+      ConstructServerResponseHeadersPacket(
+          1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+          GetResponseHeaders("425 TOO_EARLY"), &server_header_stream_offset));
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientAckAndRstPacket(
+                              2, GetNthClientInitiatedBidirectionalStreamId(0),
+                              quic::QUIC_STREAM_CANCELLED, 1, 1, 1));
 
   client_maker_.SetEncryptionLevel(quic::ENCRYPTION_FORWARD_SECURE);
 
@@ -5109,19 +5189,20 @@
   client_header_stream_offset += spdy_frame.size();
 
   mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientRequestHeadersPacket(
-          4, GetNthClientInitiatedStreamId(1), false, true,
-          GetRequestHeaders("GET", "https", "/"),
-          GetNthClientInitiatedStreamId(0), &client_header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    2, GetNthClientInitiatedStreamId(1), false,
-                                    false, GetResponseHeaders("425 TOO_EARLY"),
-                                    &server_header_stream_offset));
-  mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientAckAndRstPacket(5, GetNthClientInitiatedStreamId(1),
-                                     quic::QUIC_STREAM_CANCELLED, 2, 1, 1));
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       4, GetNthClientInitiatedBidirectionalStreamId(1), false,
+                       true, GetRequestHeaders("GET", "https", "/"),
+                       GetNthClientInitiatedBidirectionalStreamId(0),
+                       &client_header_stream_offset));
+  mock_quic_data.AddRead(
+      ASYNC,
+      ConstructServerResponseHeadersPacket(
+          2, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
+          GetResponseHeaders("425 TOO_EARLY"), &server_header_stream_offset));
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientAckAndRstPacket(
+                              5, GetNthClientInitiatedBidirectionalStreamId(1),
+                              quic::QUIC_STREAM_CANCELLED, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
 
@@ -5184,7 +5265,7 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
   // Read a close connection packet with
   // quic::QuicErrorCode: quic::QUIC_CRYPTO_VERSION_NOT_SUPPORTED from the peer.
@@ -5243,13 +5324,14 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
   // Peer sending data from an non-existing stream causes this end to raise
   // error and close connection.
-  mock_quic_data.AddRead(ASYNC, ConstructServerRstPacket(
-                                    1, false, GetNthClientInitiatedStreamId(47),
-                                    quic::QUIC_STREAM_LAST_ERROR));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerRstPacket(
+                 1, false, GetNthClientInitiatedBidirectionalStreamId(47),
+                 quic::QUIC_STREAM_LAST_ERROR));
   std::string quic_error_details = "Data for nonexistent stream";
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndConnectionClosePacket(
@@ -5304,15 +5386,17 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
   // Read the response headers, then a RST_STREAM frame.
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
-  mock_quic_data.AddRead(ASYNC, ConstructServerRstPacket(
-                                    2, false, GetNthClientInitiatedStreamId(0),
-                                    quic::QUIC_STREAM_CANCELLED));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerRstPacket(
+                 2, false, GetNthClientInitiatedBidirectionalStreamId(0),
+                 quic::QUIC_STREAM_CANCELLED));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more read data.
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
@@ -5373,11 +5457,12 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerRstPacket(
-                                    1, false, GetNthClientInitiatedStreamId(0),
-                                    quic::QUIC_STREAM_CANCELLED));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerRstPacket(
+                 1, false, GetNthClientInitiatedBidirectionalStreamId(0),
+                 quic::QUIC_STREAM_CANCELLED));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more read data.
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -5515,14 +5600,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          1, GetNthClientInitiatedStreamId(0), true, true,
+          1, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(2, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -5572,14 +5659,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
@@ -5741,10 +5830,10 @@
 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) {
   MockQuicData mock_quic_data;
   mock_quic_data.AddRead(SYNCHRONOUS, ConstructServerConnectionClosePacket(1));
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              1, GetNthClientInitiatedStreamId(0), true, true,
-                              GetRequestHeaders("GET", "https", "/")));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       true, GetRequestHeaders("GET", "https", "/")));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(2, 1, 1, 1));
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -5809,10 +5898,10 @@
 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnectProxy) {
   MockQuicData mock_quic_data;
   mock_quic_data.AddRead(SYNCHRONOUS, ConstructServerConnectionClosePacket(1));
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              1, GetNthClientInitiatedStreamId(0), true, true,
-                              GetRequestHeaders("GET", "https", "/")));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       1, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       true, GetRequestHeaders("GET", "https", "/")));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(2, 1, 1, 1));
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -5868,14 +5957,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more read data.
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
@@ -5982,10 +6073,11 @@
   socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
   quic::QuicStreamOffset offset = 0;
   socket_data.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket(1, &offset));
-  socket_data.AddWrite(SYNCHRONOUS,
-                       ConstructClientRequestHeadersPacket(
-                           2, GetNthClientInitiatedStreamId(0), true, false,
-                           GetRequestHeaders("POST", "https", "/"), &offset));
+  socket_data.AddWrite(
+      SYNCHRONOUS,
+      ConstructClientRequestHeadersPacket(
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, false,
+          GetRequestHeaders("POST", "https", "/"), &offset));
   socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED);
   socket_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -6026,16 +6118,18 @@
   quic::QuicStreamOffset offset = 0;
   socket_data.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket(1, &offset));
   socket_data.AddWrite(ASYNC, ERR_NO_BUFFER_SPACE);
-  socket_data.AddWrite(SYNCHRONOUS,
-                       ConstructClientRequestHeadersPacket(
-                           2, GetNthClientInitiatedStreamId(0), true, true,
-                           GetRequestHeaders("GET", "https", "/"), &offset));
-  socket_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                 1, GetNthClientInitiatedStreamId(0), false,
-                                 false, GetResponseHeaders("200 OK")));
+  socket_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       true, GetRequestHeaders("GET", "https", "/"), &offset));
   socket_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  socket_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   socket_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
   socket_data.AddWrite(
@@ -6059,16 +6153,18 @@
   quic::QuicStreamOffset offset = 0;
   socket_data.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket(1, &offset));
   socket_data.AddWrite(SYNCHRONOUS, ERR_NO_BUFFER_SPACE);
-  socket_data.AddWrite(SYNCHRONOUS,
-                       ConstructClientRequestHeadersPacket(
-                           2, GetNthClientInitiatedStreamId(0), true, true,
-                           GetRequestHeaders("GET", "https", "/"), &offset));
-  socket_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                 1, GetNthClientInitiatedStreamId(0), false,
-                                 false, GetResponseHeaders("200 OK")));
+  socket_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       true, GetRequestHeaders("GET", "https", "/"), &offset));
   socket_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  socket_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   socket_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
   socket_data.AddWrite(
@@ -6206,46 +6302,50 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          client_packet_number++, GetNthClientInitiatedStreamId(0), true, true,
-          GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
+          client_packet_number++, GetNthClientInitiatedBidirectionalStreamId(0),
+          true, true, GetRequestHeaders("GET", "https", "/"),
+          &header_stream_offset));
   quic::QuicStreamOffset server_header_offset = 0;
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerPushPromisePacket(
-          1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0),
-          false, GetRequestHeaders("GET", "https", "/pushed.jpg"),
-          &server_header_offset, &server_maker_));
+      ASYNC, ConstructServerPushPromisePacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0),
+                 GetNthServerInitiatedUnidirectionalStreamId(0), false,
+                 GetRequestHeaders("GET", "https", "/pushed.jpg"),
+                 &server_header_offset, &server_maker_));
   if (client_headers_include_h2_stream_dependency_ &&
       version_ >= quic::QUIC_VERSION_43) {
-    mock_quic_data.AddWrite(
-        SYNCHRONOUS,
-        ConstructClientPriorityPacket(client_packet_number++, false,
-                                      GetNthServerInitiatedStreamId(0),
-                                      GetNthClientInitiatedStreamId(0),
-                                      DEFAULT_PRIORITY, &header_stream_offset));
+    mock_quic_data.AddWrite(SYNCHRONOUS,
+                            ConstructClientPriorityPacket(
+                                client_packet_number++, false,
+                                GetNthServerInitiatedUnidirectionalStreamId(0),
+                                GetNthClientInitiatedBidirectionalStreamId(0),
+                                DEFAULT_PRIORITY, &header_stream_offset));
   }
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 2, GetNthClientInitiatedStreamId(0), false, false,
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &server_header_offset));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckPacket(client_packet_number++, 2, 1, 1));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 3, GetNthServerInitiatedStreamId(0), false, false,
-                 GetResponseHeaders("200 OK"), &server_header_offset));
+                 3, GetNthServerInitiatedUnidirectionalStreamId(0), false,
+                 false, GetResponseHeaders("200 OK"), &server_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckPacket(client_packet_number++, 4, 3, 1));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(5, GetNthServerInitiatedStreamId(0),
-                                       false, true, 0, "and hello!"));
-  mock_quic_data.AddWrite(
-      SYNCHRONOUS, ConstructClientAckAndRstPacket(
-                       client_packet_number++, GetNthServerInitiatedStreamId(0),
-                       quic::QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1));
+      ASYNC, ConstructServerDataPacket(
+                 5, GetNthServerInitiatedUnidirectionalStreamId(0), false, true,
+                 0, "and hello!"));
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientAckAndRstPacket(
+                              client_packet_number++,
+                              GetNthServerInitiatedUnidirectionalStreamId(0),
+                              quic::QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
@@ -6293,37 +6393,39 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          client_packet_number++, GetNthClientInitiatedStreamId(0), true, true,
-          GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
+          client_packet_number++, GetNthClientInitiatedBidirectionalStreamId(0),
+          true, true, GetRequestHeaders("GET", "https", "/"),
+          &header_stream_offset));
   quic::QuicStreamOffset server_header_offset = 0;
   // Server promise for: https://mail.example.org/pushed.jpg
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerPushPromisePacket(
-          1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0),
-          false, GetRequestHeaders("GET", "https", "/pushed.jpg"),
-          &server_header_offset, &server_maker_));
+      ASYNC, ConstructServerPushPromisePacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0),
+                 GetNthServerInitiatedUnidirectionalStreamId(0), false,
+                 GetRequestHeaders("GET", "https", "/pushed.jpg"),
+                 &server_header_offset, &server_maker_));
   if (client_headers_include_h2_stream_dependency_ &&
       version_ >= quic::QUIC_VERSION_43) {
-    mock_quic_data.AddWrite(
-        SYNCHRONOUS,
-        ConstructClientPriorityPacket(client_packet_number++, false,
-                                      GetNthServerInitiatedStreamId(0),
-                                      GetNthClientInitiatedStreamId(0),
-                                      DEFAULT_PRIORITY, &header_stream_offset));
+    mock_quic_data.AddWrite(SYNCHRONOUS,
+                            ConstructClientPriorityPacket(
+                                client_packet_number++, false,
+                                GetNthServerInitiatedUnidirectionalStreamId(0),
+                                GetNthClientInitiatedBidirectionalStreamId(0),
+                                DEFAULT_PRIORITY, &header_stream_offset));
   }
   // Response headers for first request.
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 2, GetNthClientInitiatedStreamId(0), false, false,
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &server_header_offset));
   // Client ACKs the response headers.
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckPacket(client_packet_number++, 2, 1, 1));
   // Response body for first request.
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(3, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 3, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   // Write error for the third request.
   mock_quic_data.AddWrite(SYNCHRONOUS, ERR_FAILED);
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -6379,16 +6481,19 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersAndDataFramesPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true, DEFAULT_PRIORITY,
-          GetRequestHeaders("POST", "https", "/"), 0, &offset, nullptr, {"1"}));
-
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
+          DEFAULT_PRIORITY, GetRequestHeaders("POST", "https", "/"), 0, &offset,
+          nullptr, {"1"}));
 
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
 
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
 
@@ -6455,20 +6560,22 @@
   spdy::SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/"));
   headers["user-agent"] = "";
   headers["accept-encoding"] = "gzip, deflate";
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true, true,
-                              std::move(headers), &header_stream_offset));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       true, std::move(headers), &header_stream_offset));
 
   quic::QuicStreamOffset expected_raw_header_response_size = 0;
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK"),
-                                    &expected_raw_header_response_size));
+  mock_quic_data.AddRead(
+      ASYNC,
+      ConstructServerResponseHeadersPacket(
+          1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+          GetResponseHeaders("200 OK"), &expected_raw_header_response_size));
 
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "Main Resource Data"));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "Main Resource Data"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
 
   mock_quic_data.AddRead(ASYNC, 0);  // EOF
@@ -6523,34 +6630,35 @@
   headers["user-agent"] = "";
   headers["accept-encoding"] = "gzip, deflate";
   mock_quic_data.AddWrite(
-      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
-                       client_packet_number++, GetNthClientInitiatedStreamId(0),
-                       true, true, std::move(headers), &header_stream_offset));
+      SYNCHRONOUS,
+      ConstructClientRequestHeadersPacket(
+          client_packet_number++, GetNthClientInitiatedBidirectionalStreamId(0),
+          true, true, std::move(headers), &header_stream_offset));
 
   quic::QuicStreamOffset server_header_offset = 0;
   quic::QuicStreamOffset expected_raw_header_response_size = 0;
 
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerPushPromisePacket(
-          1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0),
-          false, GetRequestHeaders("GET", "https", "/pushed.jpg"),
-          &server_header_offset, &server_maker_));
+      ASYNC, ConstructServerPushPromisePacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0),
+                 GetNthServerInitiatedUnidirectionalStreamId(0), false,
+                 GetRequestHeaders("GET", "https", "/pushed.jpg"),
+                 &server_header_offset, &server_maker_));
 
   if (client_headers_include_h2_stream_dependency_ &&
       version_ >= quic::QUIC_VERSION_43) {
-    mock_quic_data.AddWrite(
-        SYNCHRONOUS,
-        ConstructClientPriorityPacket(client_packet_number++, false,
-                                      GetNthServerInitiatedStreamId(0),
-                                      GetNthClientInitiatedStreamId(0),
-                                      DEFAULT_PRIORITY, &header_stream_offset));
+    mock_quic_data.AddWrite(SYNCHRONOUS,
+                            ConstructClientPriorityPacket(
+                                client_packet_number++, false,
+                                GetNthServerInitiatedUnidirectionalStreamId(0),
+                                GetNthClientInitiatedBidirectionalStreamId(0),
+                                DEFAULT_PRIORITY, &header_stream_offset));
   }
 
   expected_raw_header_response_size = server_header_offset;
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 2, GetNthClientInitiatedStreamId(0), false, false,
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &server_header_offset));
   expected_raw_header_response_size =
       server_header_offset - expected_raw_header_response_size;
@@ -6560,17 +6668,19 @@
 
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 3, GetNthServerInitiatedStreamId(0), false, false,
-                 GetResponseHeaders("200 OK"), &server_header_offset));
+                 3, GetNthServerInitiatedUnidirectionalStreamId(0), false,
+                 false, GetResponseHeaders("200 OK"), &server_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthServerInitiatedStreamId(0),
-                                       false, true, 0, "Pushed Resource Data"));
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthServerInitiatedUnidirectionalStreamId(0), false, true,
+                 0, "Pushed Resource Data"));
 
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckPacket(client_packet_number++, 4, 3, 1));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(5, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "Main Resource Data"));
+      ASYNC, ConstructServerDataPacket(
+                 5, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "Main Resource Data"));
 
   mock_quic_data.AddRead(ASYNC, ConstructServerConnectionClosePacket(6));
 
@@ -6631,14 +6741,16 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddRead(ASYNC, 0);               // EOF
@@ -6900,8 +7012,8 @@
     EXPECT_EQ(443, response->socket_address.port());
   }
 
-  quic::QuicStreamId GetNthClientInitiatedStreamId(int n) {
-    return quic::test::GetNthClientInitiatedStreamId(version_, n);
+  quic::QuicStreamId GetNthClientInitiatedBidirectionalStreamId(int n) {
+    return quic::test::GetNthClientInitiatedBidirectionalStreamId(version_, n);
   }
 
   quic::MockClock clock_;
@@ -7003,9 +7115,11 @@
   crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
 
   QuicTestPacketMaker client_maker(
-      version_, 0, &clock_, origin1_, quic::Perspective::IS_CLIENT,
+      version_, quic::EmptyQuicConnectionId(), &clock_, origin1_,
+      quic::Perspective::IS_CLIENT,
       client_headers_include_h2_stream_dependency_);
-  QuicTestPacketMaker server_maker(version_, 0, &clock_, origin1_,
+  QuicTestPacketMaker server_maker(version_, quic::EmptyQuicConnectionId(),
+                                   &clock_, origin1_,
                                    quic::Perspective::IS_SERVER, false);
 
   quic::QuicStreamOffset request_header_offset(0);
@@ -7015,16 +7129,18 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructInitialSettingsPacket(1, &request_header_offset, &client_maker));
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true,
-                              &request_header_offset, &client_maker));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0),
-                                    &response_header_offset, &server_maker));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       &request_header_offset, &client_maker));
+  mock_quic_data.AddRead(ASYNC,
+                         ConstructServerResponseHeadersPacket(
+                             1, GetNthClientInitiatedBidirectionalStreamId(0),
+                             &response_header_offset, &server_maker));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       &server_maker));
+      ASYNC,
+      ConstructServerDataPacket(
+          2, GetNthClientInitiatedBidirectionalStreamId(0), &server_maker));
   mock_quic_data.AddWrite(SYNCHRONOUS,
                           ConstructClientAckPacket(3, 2, 1, 1, &client_maker));
 
@@ -7033,15 +7149,17 @@
 
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientRequestHeadersPacket(
-                       4, GetNthClientInitiatedStreamId(1), false,
-                       GetNthClientInitiatedStreamId(0), &request_header_offset,
-                       &client_maker));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    3, GetNthClientInitiatedStreamId(1),
-                                    &response_header_offset, &server_maker));
+                       4, GetNthClientInitiatedBidirectionalStreamId(1), false,
+                       GetNthClientInitiatedBidirectionalStreamId(0),
+                       &request_header_offset, &client_maker));
+  mock_quic_data.AddRead(ASYNC,
+                         ConstructServerResponseHeadersPacket(
+                             3, GetNthClientInitiatedBidirectionalStreamId(1),
+                             &response_header_offset, &server_maker));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(1),
-                                       &server_maker));
+      ASYNC,
+      ConstructServerDataPacket(
+          4, GetNthClientInitiatedBidirectionalStreamId(1), &server_maker));
   mock_quic_data.AddWrite(SYNCHRONOUS,
                           ConstructClientAckPacket(5, 4, 3, 1, &client_maker));
   mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -7098,9 +7216,11 @@
   crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2);
 
   QuicTestPacketMaker client_maker1(
-      version_, 0, &clock_, origin1_, quic::Perspective::IS_CLIENT,
+      version_, quic::EmptyQuicConnectionId(), &clock_, origin1_,
+      quic::Perspective::IS_CLIENT,
       client_headers_include_h2_stream_dependency_);
-  QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_,
+  QuicTestPacketMaker server_maker1(version_, quic::EmptyQuicConnectionId(),
+                                    &clock_, origin1_,
                                     quic::Perspective::IS_SERVER, false);
 
   MockQuicData mock_quic_data1;
@@ -7108,16 +7228,18 @@
   mock_quic_data1.AddWrite(
       SYNCHRONOUS, ConstructInitialSettingsPacket(1, &header_stream_offset1,
                                                   &client_maker1));
-  mock_quic_data1.AddWrite(SYNCHRONOUS,
-                           ConstructClientRequestHeadersPacket(
-                               2, GetNthClientInitiatedStreamId(0), true,
-                               &header_stream_offset1, &client_maker1));
+  mock_quic_data1.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       &header_stream_offset1, &client_maker1));
   mock_quic_data1.AddRead(
-      ASYNC, ConstructServerResponseHeadersPacket(
-                 1, GetNthClientInitiatedStreamId(0), &server_maker1));
+      ASYNC,
+      ConstructServerResponseHeadersPacket(
+          1, GetNthClientInitiatedBidirectionalStreamId(0), &server_maker1));
   mock_quic_data1.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       &server_maker1));
+      ASYNC,
+      ConstructServerDataPacket(
+          2, GetNthClientInitiatedBidirectionalStreamId(0), &server_maker1));
   mock_quic_data1.AddWrite(
       SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1, &client_maker1));
   mock_quic_data1.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -7126,9 +7248,11 @@
   mock_quic_data1.AddSocketDataToFactory(&socket_factory_);
 
   QuicTestPacketMaker client_maker2(
-      version_, 0, &clock_, origin2_, quic::Perspective::IS_CLIENT,
+      version_, quic::EmptyQuicConnectionId(), &clock_, origin2_,
+      quic::Perspective::IS_CLIENT,
       client_headers_include_h2_stream_dependency_);
-  QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_,
+  QuicTestPacketMaker server_maker2(version_, quic::EmptyQuicConnectionId(),
+                                    &clock_, origin2_,
                                     quic::Perspective::IS_SERVER, false);
 
   MockQuicData mock_quic_data2;
@@ -7136,16 +7260,18 @@
   mock_quic_data2.AddWrite(
       SYNCHRONOUS, ConstructInitialSettingsPacket(1, &header_stream_offset2,
                                                   &client_maker2));
-  mock_quic_data2.AddWrite(SYNCHRONOUS,
-                           ConstructClientRequestHeadersPacket(
-                               2, GetNthClientInitiatedStreamId(0), true,
-                               &header_stream_offset2, &client_maker2));
+  mock_quic_data2.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       &header_stream_offset2, &client_maker2));
   mock_quic_data2.AddRead(
-      ASYNC, ConstructServerResponseHeadersPacket(
-                 1, GetNthClientInitiatedStreamId(0), &server_maker2));
+      ASYNC,
+      ConstructServerResponseHeadersPacket(
+          1, GetNthClientInitiatedBidirectionalStreamId(0), &server_maker2));
   mock_quic_data2.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       &server_maker2));
+      ASYNC,
+      ConstructServerDataPacket(
+          2, GetNthClientInitiatedBidirectionalStreamId(0), &server_maker2));
   mock_quic_data2.AddWrite(
       SYNCHRONOUS, ConstructClientAckPacket(3, 2, 1, 1, &client_maker2));
   mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
@@ -7174,68 +7300,74 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          client_packet_number++, GetNthClientInitiatedStreamId(0), true, true,
-          GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
+          client_packet_number++, GetNthClientInitiatedBidirectionalStreamId(0),
+          true, true, GetRequestHeaders("GET", "https", "/"),
+          &header_stream_offset));
   quic::QuicStreamOffset server_header_offset = 0;
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerPushPromisePacket(
-          1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0),
-          false, GetRequestHeaders("GET", "https", "/pushed.jpg"),
-          &server_header_offset, &server_maker_));
+      ASYNC, ConstructServerPushPromisePacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0),
+                 GetNthServerInitiatedUnidirectionalStreamId(0), false,
+                 GetRequestHeaders("GET", "https", "/pushed.jpg"),
+                 &server_header_offset, &server_maker_));
   if (client_headers_include_h2_stream_dependency_ &&
       version_ >= quic::QUIC_VERSION_43) {
-    mock_quic_data.AddWrite(
-        SYNCHRONOUS,
-        ConstructClientPriorityPacket(client_packet_number++, false,
-                                      GetNthServerInitiatedStreamId(0),
-                                      GetNthClientInitiatedStreamId(0),
-                                      DEFAULT_PRIORITY, &header_stream_offset));
+    mock_quic_data.AddWrite(SYNCHRONOUS,
+                            ConstructClientPriorityPacket(
+                                client_packet_number++, false,
+                                GetNthServerInitiatedUnidirectionalStreamId(0),
+                                GetNthClientInitiatedBidirectionalStreamId(0),
+                                DEFAULT_PRIORITY, &header_stream_offset));
   }
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 2, GetNthClientInitiatedStreamId(0), false, false,
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &server_header_offset));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckPacket(client_packet_number++, 2, 1, 1));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 3, GetNthServerInitiatedStreamId(0), false, false,
-                 GetResponseHeaders("200 OK"), &server_header_offset));
+                 3, GetNthServerInitiatedUnidirectionalStreamId(0), false,
+                 false, GetResponseHeaders("200 OK"), &server_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckPacket(client_packet_number++, 4, 3, 1));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(5, GetNthServerInitiatedStreamId(0),
-                                       false, true, 0, "and hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 5, GetNthServerInitiatedUnidirectionalStreamId(0), false, true,
+                 0, "and hello!"));
 
   // Because the matching request has a body, we will see the push
   // stream get cancelled, and the matching request go out on the
   // wire.
-  mock_quic_data.AddWrite(
-      SYNCHRONOUS, ConstructClientAckAndRstPacket(
-                       client_packet_number++, GetNthServerInitiatedStreamId(0),
-                       quic::QUIC_STREAM_CANCELLED, 5, 5, 1));
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientAckAndRstPacket(
+                              client_packet_number++,
+                              GetNthServerInitiatedUnidirectionalStreamId(0),
+                              quic::QUIC_STREAM_CANCELLED, 5, 5, 1));
   const char kBody[] = "1";
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersAndDataFramesPacket(
-          client_packet_number++, GetNthClientInitiatedStreamId(1), false, true,
-          DEFAULT_PRIORITY, GetRequestHeaders("GET", "https", "/pushed.jpg"),
-          GetNthServerInitiatedStreamId(0), &header_stream_offset, nullptr,
-          {kBody}));
+          client_packet_number++, GetNthClientInitiatedBidirectionalStreamId(1),
+          false, true, DEFAULT_PRIORITY,
+          GetRequestHeaders("GET", "https", "/pushed.jpg"),
+          GetNthServerInitiatedUnidirectionalStreamId(0), &header_stream_offset,
+          nullptr, {kBody}));
 
   // We see the same response as for the earlier pushed and cancelled
   // stream.
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 6, GetNthClientInitiatedStreamId(1), false, false,
+                 6, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
                  GetResponseHeaders("200 OK"), &server_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(7, GetNthClientInitiatedStreamId(1),
-                                       false, true, 0, "and hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 7, GetNthClientInitiatedBidirectionalStreamId(1), false, true,
+                 0, "and hello!"));
 
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckPacket(client_packet_number++, 7, 6, 1));
@@ -7280,32 +7412,35 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, true,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, true,
           GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
 
   quic::QuicStreamOffset server_header_offset = 0;
-  mock_quic_data.AddRead(ASYNC, ConstructServerPushPromisePacket(
-                                    1, GetNthClientInitiatedStreamId(0),
-                                    GetNthServerInitiatedStreamId(0), false,
-                                    std::move(pushed_request_headers),
-                                    &server_header_offset, &server_maker_));
-  mock_quic_data.AddWrite(
-      SYNCHRONOUS, ConstructClientRstPacket(3, GetNthServerInitiatedStreamId(0),
-                                            quic::QUIC_INVALID_PROMISE_URL, 0));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerPushPromisePacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0),
+                 GetNthServerInitiatedUnidirectionalStreamId(0), false,
+                 std::move(pushed_request_headers), &server_header_offset,
+                 &server_maker_));
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientRstPacket(
+                              3, GetNthServerInitiatedUnidirectionalStreamId(0),
+                              quic::QUIC_INVALID_PROMISE_URL, 0));
 
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 2, GetNthClientInitiatedStreamId(0), false, false,
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &server_header_offset));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(4, 2, 1, 1));
 
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 3, GetNthServerInitiatedStreamId(0), false, false,
-                 GetResponseHeaders("200 OK"), &server_header_offset));
+                 3, GetNthServerInitiatedUnidirectionalStreamId(0), false,
+                 false, GetResponseHeaders("200 OK"), &server_header_offset));
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(0),
-                                       false, true, 0, "hello!"));
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 0, "hello!"));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(5, 4, 3, 1));
 
   mock_quic_data.AddRead(ASYNC, 0);
@@ -7334,14 +7469,15 @@
   quic::QuicStreamOffset header_stream_offset = 0;
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructInitialSettingsPacket(1, &header_stream_offset));
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true, false,
-                              ConnectRequestHeaders("mail.example.org:443"),
-                              &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       false, ConnectRequestHeaders("mail.example.org:443"),
+                       &header_stream_offset));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
 
   const char get_request[] =
       "GET / HTTP/1.1\r\n"
@@ -7349,27 +7485,28 @@
       "Connection: keep-alive\r\n\r\n";
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndDataPacket(
-                       3, false, GetNthClientInitiatedStreamId(0), 1, 1, 1,
-                       false, 0, quic::QuicStringPiece(get_request)));
+                       3, false, GetNthClientInitiatedBidirectionalStreamId(0),
+                       1, 1, 1, false, 0, quic::QuicStringPiece(get_request)));
   const char get_response[] =
       "HTTP/1.1 200 OK\r\n"
       "Content-Length: 10\r\n\r\n";
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0), false,
-                                false, 0, quic::QuicStringPiece(get_response)));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 0, quic::QuicStringPiece(get_response)));
 
-  mock_quic_data.AddRead(SYNCHRONOUS, ConstructServerDataPacket(
-                                          3, GetNthClientInitiatedStreamId(0),
-                                          false, false, strlen(get_response),
-                                          quic::QuicStringPiece("0123456789")));
+  mock_quic_data.AddRead(
+      SYNCHRONOUS,
+      ConstructServerDataPacket(
+          3, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+          strlen(get_response), quic::QuicStringPiece("0123456789")));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(4, 3, 2, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
 
   mock_quic_data.AddWrite(
-      SYNCHRONOUS, ConstructClientRstPacket(5, GetNthClientInitiatedStreamId(0),
-                                            quic::QUIC_STREAM_CANCELLED,
-                                            strlen(get_request)));
+      SYNCHRONOUS, ConstructClientRstPacket(
+                       5, GetNthClientInitiatedBidirectionalStreamId(0),
+                       quic::QUIC_STREAM_CANCELLED, strlen(get_request)));
 
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -7409,14 +7546,15 @@
   quic::QuicStreamOffset header_stream_offset = 0;
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructInitialSettingsPacket(1, &header_stream_offset));
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true, false,
-                              ConnectRequestHeaders("mail.example.org:443"),
-                              &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       false, ConnectRequestHeaders("mail.example.org:443"),
+                       &header_stream_offset));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
 
   SpdyTestUtil spdy_util;
 
@@ -7425,28 +7563,30 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientAckAndDataPacket(
-          3, false, GetNthClientInitiatedStreamId(0), 1, 1, 1, false, 0,
-          quic::QuicStringPiece(get_frame.data(), get_frame.size())));
+          3, false, GetNthClientInitiatedBidirectionalStreamId(0), 1, 1, 1,
+          false, 0, quic::QuicStringPiece(get_frame.data(), get_frame.size())));
   spdy::SpdySerializedFrame resp_frame =
       spdy_util.ConstructSpdyGetReply(nullptr, 0, 1);
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(
-                 2, GetNthClientInitiatedStreamId(0), false, false, 0,
-                 quic::QuicStringPiece(resp_frame.data(), resp_frame.size())));
+      ASYNC,
+      ConstructServerDataPacket(
+          2, GetNthClientInitiatedBidirectionalStreamId(0), false, false, 0,
+          quic::QuicStringPiece(resp_frame.data(), resp_frame.size())));
 
   spdy::SpdySerializedFrame data_frame =
       spdy_util.ConstructSpdyDataFrame(1, "0123456789", true);
   mock_quic_data.AddRead(
       SYNCHRONOUS,
       ConstructServerDataPacket(
-          3, GetNthClientInitiatedStreamId(0), false, false, resp_frame.size(),
+          3, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+          resp_frame.size(),
           quic::QuicStringPiece(data_frame.data(), data_frame.size())));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(4, 3, 2, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
 
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
-      ConstructClientRstPacket(5, GetNthClientInitiatedStreamId(0),
+      ConstructClientRstPacket(5, GetNthClientInitiatedBidirectionalStreamId(0),
                                quic::QUIC_STREAM_CANCELLED, get_frame.size()));
 
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
@@ -7490,14 +7630,15 @@
   quic::QuicStreamOffset header_stream_offset = 0;
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructInitialSettingsPacket(1, &header_stream_offset));
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true, false,
-                              ConnectRequestHeaders("mail.example.org:443"),
-                              &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    false, GetResponseHeaders("200 OK")));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       false, ConnectRequestHeaders("mail.example.org:443"),
+                       &header_stream_offset));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 GetResponseHeaders("200 OK")));
 
   quic::QuicStreamOffset client_data_offset = 0;
   quic::QuicStreamOffset server_data_offset = 0;
@@ -7508,23 +7649,24 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientAckAndDataPacket(
-          3, false, GetNthClientInitiatedStreamId(0), 1, 1, 1, false,
-          client_data_offset, quic::QuicStringPiece(get_request_1)));
+          3, false, GetNthClientInitiatedBidirectionalStreamId(0), 1, 1, 1,
+          false, client_data_offset, quic::QuicStringPiece(get_request_1)));
   client_data_offset += strlen(get_request_1);
 
   const char get_response_1[] =
       "HTTP/1.1 200 OK\r\n"
       "Content-Length: 10\r\n\r\n";
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0),
-                                       false, false, server_data_offset,
-                                       quic::QuicStringPiece(get_response_1)));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 server_data_offset, quic::QuicStringPiece(get_response_1)));
   server_data_offset += strlen(get_response_1);
 
-  mock_quic_data.AddRead(SYNCHRONOUS, ConstructServerDataPacket(
-                                          3, GetNthClientInitiatedStreamId(0),
-                                          false, false, server_data_offset,
-                                          quic::QuicStringPiece("0123456789")));
+  mock_quic_data.AddRead(
+      SYNCHRONOUS,
+      ConstructServerDataPacket(
+          3, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+          server_data_offset, quic::QuicStringPiece("0123456789")));
   server_data_offset += 10;
 
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(4, 3, 2, 1));
@@ -7535,33 +7677,34 @@
       "Connection: keep-alive\r\n\r\n";
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
-      ConstructClientDataPacket(5, GetNthClientInitiatedStreamId(0), false,
-                                false, client_data_offset,
-                                quic::QuicStringPiece(get_request_2)));
+      ConstructClientDataPacket(
+          5, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+          client_data_offset, quic::QuicStringPiece(get_request_2)));
   client_data_offset += strlen(get_request_2);
 
   const char get_response_2[] =
       "HTTP/1.1 200 OK\r\n"
       "Content-Length: 7\r\n\r\n";
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(0),
-                                       false, false, server_data_offset,
-                                       quic::QuicStringPiece(get_response_2)));
+      ASYNC, ConstructServerDataPacket(
+                 4, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 server_data_offset, quic::QuicStringPiece(get_response_2)));
   server_data_offset += strlen(get_response_2);
 
   mock_quic_data.AddRead(
-      SYNCHRONOUS, ConstructServerDataPacket(
-                       5, GetNthClientInitiatedStreamId(0), false, false,
-                       server_data_offset, quic::QuicStringPiece("0123456")));
+      SYNCHRONOUS,
+      ConstructServerDataPacket(
+          5, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+          server_data_offset, quic::QuicStringPiece("0123456")));
   server_data_offset += 7;
 
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(6, 5, 4, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
 
-  mock_quic_data.AddWrite(
-      SYNCHRONOUS, ConstructClientRstPacket(7, GetNthClientInitiatedStreamId(0),
-                                            quic::QUIC_STREAM_CANCELLED,
-                                            client_data_offset));
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientRstPacket(
+                              7, GetNthClientInitiatedBidirectionalStreamId(0),
+                              quic::QUIC_STREAM_CANCELLED, client_data_offset));
 
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -7619,14 +7762,14 @@
                                            1, &client_header_stream_offset));
 
   // CONNECT request and response for first request
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true, false,
-                              ConnectRequestHeaders("mail.example.org:443"),
-                              &client_header_stream_offset));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       false, ConnectRequestHeaders("mail.example.org:443"),
+                       &client_header_stream_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 1, GetNthClientInitiatedStreamId(0), false, false,
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &server_header_stream_offset));
 
   // GET request, response, and data over QUIC tunnel for first request
@@ -7636,31 +7779,33 @@
       "Connection: keep-alive\r\n\r\n";
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndDataPacket(
-                       3, false, GetNthClientInitiatedStreamId(0), 1, 1, 1,
-                       false, 0, quic::QuicStringPiece(get_request)));
+                       3, false, GetNthClientInitiatedBidirectionalStreamId(0),
+                       1, 1, 1, false, 0, quic::QuicStringPiece(get_request)));
   const char get_response[] =
       "HTTP/1.1 200 OK\r\n"
       "Content-Length: 10\r\n\r\n";
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0), false,
-                                false, 0, quic::QuicStringPiece(get_response)));
-  mock_quic_data.AddRead(SYNCHRONOUS, ConstructServerDataPacket(
-                                          3, GetNthClientInitiatedStreamId(0),
-                                          false, false, strlen(get_response),
-                                          quic::QuicStringPiece("0123456789")));
+      ASYNC, ConstructServerDataPacket(
+                 2, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+                 0, quic::QuicStringPiece(get_response)));
+  mock_quic_data.AddRead(
+      SYNCHRONOUS,
+      ConstructServerDataPacket(
+          3, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
+          strlen(get_response), quic::QuicStringPiece("0123456789")));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(4, 3, 2, 1));
 
   // CONNECT request and response for second request
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          5, GetNthClientInitiatedStreamId(1), false, false,
+          5, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
           ConnectRequestHeaders("different.example.org:443"),
-          GetNthClientInitiatedStreamId(0), &client_header_stream_offset));
+          GetNthClientInitiatedBidirectionalStreamId(0),
+          &client_header_stream_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 4, GetNthClientInitiatedStreamId(1), false, false,
+                 4, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
                  GetResponseHeaders("200 OK"), &server_header_stream_offset));
 
   // GET request, response, and data over QUIC tunnel for second request
@@ -7670,34 +7815,35 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientAckAndDataPacket(
-          6, false, GetNthClientInitiatedStreamId(1), 4, 4, 1, false, 0,
-          quic::QuicStringPiece(get_frame.data(), get_frame.size())));
+          6, false, GetNthClientInitiatedBidirectionalStreamId(1), 4, 4, 1,
+          false, 0, quic::QuicStringPiece(get_frame.data(), get_frame.size())));
 
   spdy::SpdySerializedFrame resp_frame =
       spdy_util.ConstructSpdyGetReply(nullptr, 0, 1);
   mock_quic_data.AddRead(
-      ASYNC, ConstructServerDataPacket(
-                 5, GetNthClientInitiatedStreamId(1), false, false, 0,
-                 quic::QuicStringPiece(resp_frame.data(), resp_frame.size())));
+      ASYNC,
+      ConstructServerDataPacket(
+          5, GetNthClientInitiatedBidirectionalStreamId(1), false, false, 0,
+          quic::QuicStringPiece(resp_frame.data(), resp_frame.size())));
 
   spdy::SpdySerializedFrame data_frame =
       spdy_util.ConstructSpdyDataFrame(1, "0123456", true);
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerDataPacket(
-          6, GetNthClientInitiatedStreamId(1), false, false, resp_frame.size(),
-          quic::QuicStringPiece(data_frame.data(), data_frame.size())));
+      ASYNC, ConstructServerDataPacket(
+                 6, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
+                 resp_frame.size(),
+                 quic::QuicStringPiece(data_frame.data(), data_frame.size())));
 
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(7, 6, 5, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
 
   mock_quic_data.AddWrite(
-      SYNCHRONOUS, ConstructClientRstPacket(8, GetNthClientInitiatedStreamId(0),
-                                            quic::QUIC_STREAM_CANCELLED,
-                                            strlen(get_request)));
+      SYNCHRONOUS, ConstructClientRstPacket(
+                       8, GetNthClientInitiatedBidirectionalStreamId(0),
+                       quic::QUIC_STREAM_CANCELLED, strlen(get_request)));
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
-      ConstructClientRstPacket(9, GetNthClientInitiatedStreamId(1),
+      ConstructClientRstPacket(9, GetNthClientInitiatedBidirectionalStreamId(1),
                                quic::QUIC_STREAM_CANCELLED, get_frame.size()));
 
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
@@ -7755,19 +7901,20 @@
   quic::QuicStreamOffset header_stream_offset = 0;
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructInitialSettingsPacket(1, &header_stream_offset));
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true, false,
-                              ConnectRequestHeaders("mail.example.org:443"),
-                              &header_stream_offset));
-  mock_quic_data.AddRead(ASYNC, ConstructServerResponseHeadersPacket(
-                                    1, GetNthClientInitiatedStreamId(0), false,
-                                    true, GetResponseHeaders("500")));
-  mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
   mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientAckAndRstPacket(3, GetNthClientInitiatedStreamId(0),
-                                     quic::QUIC_STREAM_CANCELLED, 1, 1, 1));
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       false, ConnectRequestHeaders("mail.example.org:443"),
+                       &header_stream_offset));
+  mock_quic_data.AddRead(
+      ASYNC, ConstructServerResponseHeadersPacket(
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, true,
+                 GetResponseHeaders("500")));
+  mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientAckAndRstPacket(
+                              3, GetNthClientInitiatedBidirectionalStreamId(0),
+                              quic::QUIC_STREAM_CANCELLED, 1, 1, 1));
 
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -7801,11 +7948,11 @@
   quic::QuicStreamOffset header_stream_offset = 0;
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructInitialSettingsPacket(1, &header_stream_offset));
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true, false,
-                              ConnectRequestHeaders("mail.example.org:443"),
-                              &header_stream_offset));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       false, ConnectRequestHeaders("mail.example.org:443"),
+                       &header_stream_offset));
   mock_quic_data.AddRead(ASYNC, ERR_CONNECTION_FAILED);
 
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
@@ -7839,29 +7986,29 @@
   quic::QuicStreamOffset server_header_stream_offset = 0;
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket(
                                            1, &client_header_stream_offset));
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true, false,
-                              ConnectRequestHeaders("mail.example.org:443"),
-                              &client_header_stream_offset));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       false, ConnectRequestHeaders("mail.example.org:443"),
+                       &client_header_stream_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 1, GetNthClientInitiatedStreamId(0), false, false,
+                 1, GetNthClientInitiatedBidirectionalStreamId(0), false, false,
                  GetResponseHeaders("200 OK"), &server_header_stream_offset));
-  mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientAckAndRstPacket(3, GetNthClientInitiatedStreamId(0),
-                                     quic::QUIC_STREAM_CANCELLED, 1, 1, 1));
+  mock_quic_data.AddWrite(SYNCHRONOUS,
+                          ConstructClientAckAndRstPacket(
+                              3, GetNthClientInitiatedBidirectionalStreamId(0),
+                              quic::QUIC_STREAM_CANCELLED, 1, 1, 1));
 
   mock_quic_data.AddWrite(
-      SYNCHRONOUS,
-      ConstructClientRequestHeadersPacket(
-          4, GetNthClientInitiatedStreamId(1), false, false,
-          ConnectRequestHeaders("mail.example.org:443"),
-          GetNthClientInitiatedStreamId(0), &client_header_stream_offset));
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       4, GetNthClientInitiatedBidirectionalStreamId(1), false,
+                       false, ConnectRequestHeaders("mail.example.org:443"),
+                       GetNthClientInitiatedBidirectionalStreamId(0),
+                       &client_header_stream_offset));
   mock_quic_data.AddRead(
       ASYNC, ConstructServerResponseHeadersPacket(
-                 2, GetNthClientInitiatedStreamId(1), false, false,
+                 2, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
                  GetResponseHeaders("200 OK"), &server_header_stream_offset));
 
   const char get_request[] =
@@ -7870,27 +8017,28 @@
       "Connection: keep-alive\r\n\r\n";
   mock_quic_data.AddWrite(
       SYNCHRONOUS, ConstructClientAckAndDataPacket(
-                       5, false, GetNthClientInitiatedStreamId(1), 2, 2, 1,
-                       false, 0, quic::QuicStringPiece(get_request)));
+                       5, false, GetNthClientInitiatedBidirectionalStreamId(1),
+                       2, 2, 1, false, 0, quic::QuicStringPiece(get_request)));
   const char get_response[] =
       "HTTP/1.1 200 OK\r\n"
       "Content-Length: 10\r\n\r\n";
   mock_quic_data.AddRead(
-      ASYNC,
-      ConstructServerDataPacket(3, GetNthClientInitiatedStreamId(1), false,
-                                false, 0, quic::QuicStringPiece(get_response)));
+      ASYNC, ConstructServerDataPacket(
+                 3, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
+                 0, quic::QuicStringPiece(get_response)));
 
-  mock_quic_data.AddRead(SYNCHRONOUS, ConstructServerDataPacket(
-                                          4, GetNthClientInitiatedStreamId(1),
-                                          false, false, strlen(get_response),
-                                          quic::QuicStringPiece("0123456789")));
+  mock_quic_data.AddRead(
+      SYNCHRONOUS,
+      ConstructServerDataPacket(
+          4, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
+          strlen(get_response), quic::QuicStringPiece("0123456789")));
   mock_quic_data.AddWrite(SYNCHRONOUS, ConstructClientAckPacket(6, 4, 3, 1));
   mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);  // No more data to read
 
   mock_quic_data.AddWrite(
-      SYNCHRONOUS, ConstructClientRstPacket(7, GetNthClientInitiatedStreamId(1),
-                                            quic::QUIC_STREAM_CANCELLED,
-                                            strlen(get_request)));
+      SYNCHRONOUS, ConstructClientRstPacket(
+                       7, GetNthClientInitiatedBidirectionalStreamId(1),
+                       quic::QUIC_STREAM_CANCELLED, strlen(get_request)));
 
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
@@ -7946,10 +8094,10 @@
 
   spdy::SpdyHeaderBlock headers = ConnectRequestHeaders("mail.example.org:443");
   headers["user-agent"] = "Chromium Ultra Awesome X Edition";
-  mock_quic_data.AddWrite(SYNCHRONOUS,
-                          ConstructClientRequestHeadersPacket(
-                              2, GetNthClientInitiatedStreamId(0), true, false,
-                              std::move(headers), &header_stream_offset));
+  mock_quic_data.AddWrite(
+      SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+                       2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+                       false, std::move(headers), &header_stream_offset));
   // Return an error, so the transaction stops here (this test isn't interested
   // in the rest).
   mock_quic_data.AddRead(ASYNC, ERR_CONNECTION_FAILED);
@@ -7991,8 +8139,8 @@
   mock_quic_data.AddWrite(
       SYNCHRONOUS,
       ConstructClientRequestHeadersPacket(
-          2, GetNthClientInitiatedStreamId(0), true, false, request_priority,
-          ConnectRequestHeaders("mail.example.org:443"), 0,
+          2, GetNthClientInitiatedBidirectionalStreamId(0), true, false,
+          request_priority, ConnectRequestHeaders("mail.example.org:443"), 0,
           &header_stream_offset));
   // Return an error, so the transaction stops here (this test isn't interested
   // in the rest).
@@ -8028,13 +8176,13 @@
   // IsConnectedAndIdle returns false.  The socket should still be drained and
   // reused. See http://crbug.com/544255.
   for (int i = 0; i < 2; ++i) {
-    client_maker.reset(
-        new QuicTestPacketMaker(version_, 0, &clock_, kDefaultServerHostName,
-                                quic::Perspective::IS_CLIENT,
-                                client_headers_include_h2_stream_dependency_));
-    server_maker.reset(
-        new QuicTestPacketMaker(version_, 0, &clock_, kDefaultServerHostName,
-                                quic::Perspective::IS_SERVER, false));
+    client_maker.reset(new QuicTestPacketMaker(
+        version_, quic::EmptyQuicConnectionId(), &clock_,
+        kDefaultServerHostName, quic::Perspective::IS_CLIENT,
+        client_headers_include_h2_stream_dependency_));
+    server_maker.reset(new QuicTestPacketMaker(
+        version_, quic::EmptyQuicConnectionId(), &clock_,
+        kDefaultServerHostName, quic::Perspective::IS_SERVER, false));
 
     session_params_.enable_quic = true;
     proxy_resolution_service_ =
@@ -8054,7 +8202,8 @@
     mock_quic_data.AddWrite(
         SYNCHRONOUS,
         client_maker->MakeRequestHeadersPacketWithOffsetTracking(
-            2, GetNthClientInitiatedStreamId(0), true, false, default_priority,
+            2, GetNthClientInitiatedBidirectionalStreamId(0), true, false,
+            default_priority,
             client_maker->ConnectRequestHeaders("mail.example.org:443"), 0,
             &client_header_stream_offset));
 
@@ -8064,19 +8213,19 @@
     headers["content-length"] = "10";
     mock_quic_data.AddRead(
         ASYNC, server_maker->MakeResponseHeadersPacketWithOffsetTracking(
-                   1, GetNthClientInitiatedStreamId(0), false, false,
-                   std::move(headers), &server_header_stream_offset));
+                   1, GetNthClientInitiatedBidirectionalStreamId(0), false,
+                   false, std::move(headers), &server_header_stream_offset));
 
     if (i == 0) {
       mock_quic_data.AddRead(
           ASYNC, server_maker->MakeDataPacket(
-                     2, GetNthClientInitiatedStreamId(0), false, false,
-                     server_data_offset, "0123456789"));
+                     2, GetNthClientInitiatedBidirectionalStreamId(0), false,
+                     false, server_data_offset, "0123456789"));
     } else {
       mock_quic_data.AddRead(
           SYNCHRONOUS, server_maker->MakeDataPacket(
-                           2, GetNthClientInitiatedStreamId(0), false, false,
-                           server_data_offset, "0123456789"));
+                           2, GetNthClientInitiatedBidirectionalStreamId(0),
+                           false, false, server_data_offset, "0123456789"));
     }
     server_data_offset += 10;
 
@@ -8084,18 +8233,19 @@
                             client_maker->MakeAckPacket(3, 2, 1, 1, true));
 
     mock_quic_data.AddWrite(
-        SYNCHRONOUS, client_maker->MakeRstPacket(
-                         4, false, GetNthClientInitiatedStreamId(0),
-                         quic::QUIC_STREAM_CANCELLED, client_data_offset));
+        SYNCHRONOUS,
+        client_maker->MakeRstPacket(
+            4, false, GetNthClientInitiatedBidirectionalStreamId(0),
+            quic::QUIC_STREAM_CANCELLED, client_data_offset));
 
     headers = client_maker->ConnectRequestHeaders("mail.example.org:443");
     headers["proxy-authorization"] = "Basic Zm9vOmJheg==";
     mock_quic_data.AddWrite(
-        SYNCHRONOUS,
-        client_maker->MakeRequestHeadersPacketWithOffsetTracking(
-            5, GetNthClientInitiatedStreamId(1), false, false, default_priority,
-            std::move(headers), GetNthClientInitiatedStreamId(0),
-            &client_header_stream_offset));
+        SYNCHRONOUS, client_maker->MakeRequestHeadersPacketWithOffsetTracking(
+                         5, GetNthClientInitiatedBidirectionalStreamId(1),
+                         false, false, default_priority, std::move(headers),
+                         GetNthClientInitiatedBidirectionalStreamId(0),
+                         &client_header_stream_offset));
 
     // Response to wrong password
     headers =
@@ -8104,15 +8254,16 @@
     headers["content-length"] = "10";
     mock_quic_data.AddRead(
         ASYNC, server_maker->MakeResponseHeadersPacketWithOffsetTracking(
-                   3, GetNthClientInitiatedStreamId(1), false, false,
-                   std::move(headers), &server_header_stream_offset));
+                   3, GetNthClientInitiatedBidirectionalStreamId(1), false,
+                   false, std::move(headers), &server_header_stream_offset));
     mock_quic_data.AddRead(SYNCHRONOUS,
                            ERR_IO_PENDING);  // No more data to read
 
-    mock_quic_data.AddWrite(SYNCHRONOUS,
-                            client_maker->MakeAckAndRstPacket(
-                                6, false, GetNthClientInitiatedStreamId(1),
-                                quic::QUIC_STREAM_CANCELLED, 3, 3, 1, true));
+    mock_quic_data.AddWrite(
+        SYNCHRONOUS,
+        client_maker->MakeAckAndRstPacket(
+            6, false, GetNthClientInitiatedBidirectionalStreamId(1),
+            quic::QUIC_STREAM_CANCELLED, 3, 3, 1, true));
 
     mock_quic_data.AddSocketDataToFactory(&socket_factory_);
     mock_quic_data.GetSequencedSocketData()->set_busy_before_sync_reads(true);
@@ -8190,11 +8341,16 @@
   session_params_.origins_to_force_quic_on.insert(
       HostPortPair::FromString("mail.example.org:443"));
 
-  const quic::QuicStreamId client_stream_0 = GetNthClientInitiatedStreamId(0);
-  const quic::QuicStreamId client_stream_1 = GetNthClientInitiatedStreamId(1);
-  const quic::QuicStreamId client_stream_2 = GetNthClientInitiatedStreamId(2);
-  const quic::QuicStreamId push_stream_0 = GetNthServerInitiatedStreamId(0);
-  const quic::QuicStreamId push_stream_1 = GetNthServerInitiatedStreamId(1);
+  const quic::QuicStreamId client_stream_0 =
+      GetNthClientInitiatedBidirectionalStreamId(0);
+  const quic::QuicStreamId client_stream_1 =
+      GetNthClientInitiatedBidirectionalStreamId(1);
+  const quic::QuicStreamId client_stream_2 =
+      GetNthClientInitiatedBidirectionalStreamId(2);
+  const quic::QuicStreamId push_stream_0 =
+      GetNthServerInitiatedUnidirectionalStreamId(0);
+  const quic::QuicStreamId push_stream_1 =
+      GetNthServerInitiatedUnidirectionalStreamId(1);
 
   MockQuicData mock_quic_data;
   quic::QuicStreamOffset header_stream_offset = 0;