Write PRIORITY_UPDATE frame.

gfe-relnote: n/a, change to QUIC v99-only code.  Protected by existing disabled gfe2_reloadable_flag_quic_enable_version_99.
PiperOrigin-RevId: 289127305
Change-Id: Ic515e3159362430055178010ee1c45e1a8e2c604
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 819caef..195f92b 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -1037,7 +1037,16 @@
         std::move(ack_listener));
   }
 
-  // TODO(b/147306124): Send PRIORITY_UPDATE frame.
+  if (!priority_sent_) {
+    PriorityUpdateFrame priority_update;
+    priority_update.prioritized_element_type = REQUEST_STREAM;
+    priority_update.prioritized_element_id = id();
+    // Value between 0 and 7, inclusive.  Lower value means higher priority.
+    int urgency = precedence().spdy3_priority();
+    priority_update.priority_field_value = quiche::QuicheStrCat("u=", urgency);
+    spdy_session_->WriteHttp3PriorityUpdate(priority_update);
+    priority_sent_ = true;
+  }
 
   // Encode header list.
   QuicByteCount encoder_stream_sent_byte_count;