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;