Renumber QUIC streams when there is no crypto stream

This also modifies spdy::PriorityWriteScheduler to allow using a different
value than kHttp2RootStreamId as the root stream ID.

gfe-relnote: Renumber QUIC streams, protected by QUIC_VERSION_99
PiperOrigin-RevId: 248609263
Change-Id: I5e83b5950253068996df830694ac55e424d7aa54
diff --git a/spdy/core/priority_write_scheduler.h b/spdy/core/priority_write_scheduler.h
index b02d463..067153b 100644
--- a/spdy/core/priority_write_scheduler.h
+++ b/spdy/core/priority_write_scheduler.h
@@ -45,7 +45,9 @@
   using typename WriteScheduler<StreamIdType>::StreamPrecedenceType;
 
   // Creates scheduler with no streams.
-  PriorityWriteScheduler() = default;
+  PriorityWriteScheduler() : PriorityWriteScheduler(kHttp2RootStreamId) {}
+  explicit PriorityWriteScheduler(StreamIdType root_stream_id)
+      : root_stream_id_(root_stream_id) {}
 
   void RegisterStream(StreamIdType stream_id,
                       const StreamPrecedenceType& precedence) override {
@@ -55,12 +57,12 @@
     // parent_id not used here, but may as well validate it.  However,
     // parent_id may legitimately not be registered yet--see b/15676312.
     StreamIdType parent_id = precedence.parent_id();
-    SPDY_DVLOG_IF(
-        1, parent_id != kHttp2RootStreamId && !StreamRegistered(parent_id))
+    SPDY_DVLOG_IF(1,
+                  parent_id != root_stream_id_ && !StreamRegistered(parent_id))
         << "Parent stream " << parent_id << " not registered";
 
-    if (stream_id == kHttp2RootStreamId) {
-      SPDY_BUG << "Stream " << kHttp2RootStreamId << " already registered";
+    if (stream_id == root_stream_id_) {
+      SPDY_BUG << "Stream " << root_stream_id_ << " already registered";
       return;
     }
     StreamInfo stream_info = {precedence.spdy3_priority(), stream_id, false};
@@ -106,8 +108,8 @@
     // parent_id not used here, but may as well validate it.  However,
     // parent_id may legitimately not be registered yet--see b/15676312.
     StreamIdType parent_id = precedence.parent_id();
-    SPDY_DVLOG_IF(
-        1, parent_id != kHttp2RootStreamId && !StreamRegistered(parent_id))
+    SPDY_DVLOG_IF(1,
+                  parent_id != root_stream_id_ && !StreamRegistered(parent_id))
         << "Parent stream " << parent_id << " not registered";
 
     auto it = stream_infos_.find(stream_id);
@@ -315,6 +317,7 @@
   PriorityInfo priority_infos_[kV3LowestPriority + 1];
   // StreamInfos for all registered streams.
   StreamInfoMap stream_infos_;
+  StreamIdType root_stream_id_;
 };
 
 }  // namespace spdy