Update default HTTP/3 priority.

Default value in draft spec was changed from 1 to 3 at
https://github.com/httpwg/http-extensions/pull/1172.

Protected by FLAGS_quic_reloadable_flag_quic_http3_new_default_urgency_value.

PiperOrigin-RevId: 329295352
Change-Id: I7a3a42ed25f3250b8aa465c5c34ca924ba3167bc
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index 0ff48c1..fa6aec9 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -2143,7 +2143,7 @@
 
   // PRIORITY_UPDATE frame arrives after stream creation.
   TestStream* stream1 = session_.CreateIncomingStream(stream_id1);
-  EXPECT_EQ(QuicStream::kDefaultUrgency,
+  EXPECT_EQ(QuicStream::DefaultUrgency(),
             stream1->precedence().spdy3_priority());
   EXPECT_CALL(debug_visitor, OnPriorityUpdateFrameReceived(priority_update1));
   session_.OnStreamFrame(data3);
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 259493f..a14c3e5 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -199,7 +199,7 @@
       sequencer_offset_(0),
       is_decoder_processing_input_(false),
       ack_listener_(nullptr),
-      last_sent_urgency_(kDefaultUrgency) {
+      last_sent_urgency_(DefaultUrgency()) {
   DCHECK_EQ(session()->connection(), spdy_session->connection());
   DCHECK_EQ(transport_version(), spdy_session->transport_version());
   DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id));
@@ -235,7 +235,7 @@
       sequencer_offset_(sequencer()->NumBytesConsumed()),
       is_decoder_processing_input_(false),
       ack_listener_(nullptr),
-      last_sent_urgency_(kDefaultUrgency) {
+      last_sent_urgency_(DefaultUrgency()) {
   DCHECK_EQ(session()->connection(), spdy_session->connection());
   DCHECK_EQ(transport_version(), spdy_session->transport_version());
   DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id()));
diff --git a/quic/core/quic_stream.cc b/quic/core/quic_stream.cc
index dfe00a6..d965fa7 100644
--- a/quic/core/quic_stream.cc
+++ b/quic/core/quic_stream.cc
@@ -109,9 +109,6 @@
 // static
 const SpdyPriority QuicStream::kDefaultPriority;
 
-// static
-const int QuicStream::kDefaultUrgency;
-
 PendingStream::PendingStream(QuicStreamId id, QuicSession* session)
     : id_(id),
       session_(session),
@@ -388,6 +385,16 @@
   }
 }
 
+// static
+int QuicStream::DefaultUrgency() {
+  if (GetQuicReloadableFlag(quic_http3_new_default_urgency_value)) {
+    QUIC_RELOADABLE_FLAG_COUNT(quic_http3_new_default_urgency_value);
+    return 3;
+  } else {
+    return 1;
+  }
+}
+
 void QuicStream::OnStreamFrame(const QuicStreamFrame& frame) {
   DCHECK_EQ(frame.stream_id, id_);
 
@@ -1337,7 +1344,7 @@
 spdy::SpdyStreamPrecedence QuicStream::CalculateDefaultPriority(
     const QuicSession* session) {
   if (VersionUsesHttp3(session->transport_version())) {
-    return spdy::SpdyStreamPrecedence(QuicStream::kDefaultUrgency);
+    return spdy::SpdyStreamPrecedence(DefaultUrgency());
   }
 
   if (session->use_http2_priority_write_scheduler()) {
diff --git a/quic/core/quic_stream.h b/quic/core/quic_stream.h
index d6fe8f8..8f669ca 100644
--- a/quic/core/quic_stream.h
+++ b/quic/core/quic_stream.h
@@ -113,6 +113,7 @@
 class QUIC_EXPORT_PRIVATE QuicStream
     : public QuicStreamSequencer::StreamInterface {
  public:
+  // Default priority for Google QUIC.
   // This is somewhat arbitrary.  It's possible, but unlikely, we will either
   // fail to set a priority client-side, or cancel a stream before stripping the
   // priority from the wire server-side.  In either case, start out with a
@@ -121,10 +122,6 @@
   static_assert(kDefaultPriority ==
                     (spdy::kV3LowestPriority + spdy::kV3HighestPriority) / 2,
                 "Unexpected value of kDefaultPriority");
-  // On the other hand, when using IETF QUIC, use the default value defined by
-  // the priority extension at
-  // https://httpwg.org/http-extensions/draft-ietf-httpbis-priority.html#default.
-  static const int kDefaultUrgency = 1;
 
   // Creates a new stream with stream_id |id| associated with |session|. If
   // |is_static| is true, then the stream will be given precedence
@@ -142,6 +139,12 @@
 
   virtual ~QuicStream();
 
+  // Default priority for IETF QUIC, defined by the priority extension at
+  // https://httpwg.org/http-extensions/draft-ietf-httpbis-priority.html#urgency.
+  // TODO(bnc): Remove this method and reinstate static const int
+  // kDefaultUrgency member when removing quic_http3_new_default_urgency_value.
+  static int DefaultUrgency();
+
   // QuicStreamSequencer::StreamInterface implementation.
   QuicStreamId id() const override { return id_; }
   // Called by the stream subclass after it has consumed the final incoming
diff --git a/quic/tools/quic_spdy_client_base.cc b/quic/tools/quic_spdy_client_base.cc
index 309928f..212e605 100644
--- a/quic/tools/quic_spdy_client_base.cc
+++ b/quic/tools/quic_spdy_client_base.cc
@@ -188,8 +188,6 @@
   auto* stream = static_cast<QuicSpdyClientStream*>(
       client_session()->CreateOutgoingBidirectionalStream());
   if (stream) {
-    stream->SetPriority(
-        spdy::SpdyStreamPrecedence(QuicStream::kDefaultPriority));
     stream->set_visitor(this);
   }
   return stream;