diff --git a/quiche/quic/core/http/quic_receive_control_stream.cc b/quiche/quic/core/http/quic_receive_control_stream.cc
index b23fc57..c3862be 100644
--- a/quiche/quic/core/http/quic_receive_control_stream.cc
+++ b/quiche/quic/core/http/quic_receive_control_stream.cc
@@ -137,56 +137,17 @@
     spdy_session()->debug_visitor()->OnPriorityUpdateFrameReceived(frame);
   }
 
-  if (GetQuicReloadableFlag(quic_priority_update_structured_headers_parser)) {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_priority_update_structured_headers_parser);
-    absl::optional<QuicStreamPriority> priority =
-        ParsePriorityFieldValue(frame.priority_field_value);
+  absl::optional<QuicStreamPriority> priority =
+      ParsePriorityFieldValue(frame.priority_field_value);
 
-    if (!priority.has_value()) {
-      stream_delegate()->OnStreamError(
-          QUIC_INVALID_PRIORITY_UPDATE,
-          "Invalid PRIORITY_UPDATE frame payload.");
-      return false;
-    }
-
-    const QuicStreamId stream_id = frame.prioritized_element_id;
-    return spdy_session_->OnPriorityUpdateForRequestStream(stream_id,
-                                                           *priority);
+  if (!priority.has_value()) {
+    stream_delegate()->OnStreamError(QUIC_INVALID_PRIORITY_UPDATE,
+                                     "Invalid PRIORITY_UPDATE frame payload.");
+    return false;
   }
 
-  for (absl::string_view key_value :
-       absl::StrSplit(frame.priority_field_value, ',')) {
-    std::vector<absl::string_view> key_and_value =
-        absl::StrSplit(key_value, '=');
-    if (key_and_value.size() != 2) {
-      continue;
-    }
-
-    absl::string_view key = key_and_value[0];
-    quiche::QuicheTextUtils::RemoveLeadingAndTrailingWhitespace(&key);
-    if (key != "u") {
-      continue;
-    }
-
-    absl::string_view value = key_and_value[1];
-    int urgency;
-    // This violates RFC9218 Section 4: "priority parameters with out-of-range
-    // values, or values of unexpected types MUST be ignored".
-    if (!absl::SimpleAtoi(value, &urgency) || urgency < 0 || urgency > 7) {
-      stream_delegate()->OnStreamError(
-          QUIC_INVALID_PRIORITY_UPDATE,
-          "Invalid value for PRIORITY_UPDATE urgency parameter.");
-      return false;
-    }
-
-    return spdy_session_->OnPriorityUpdateForRequestStream(
-        frame.prioritized_element_id,
-        QuicStreamPriority{static_cast<uint8_t>(urgency),
-                           QuicStreamPriority::kDefaultIncremental});
-  }
-
-  // Ignore frame if no urgency parameter can be parsed.
-  return true;
+  const QuicStreamId stream_id = frame.prioritized_element_id;
+  return spdy_session_->OnPriorityUpdateForRequestStream(stream_id, *priority);
 }
 
 bool QuicReceiveControlStream::OnAcceptChFrameStart(
diff --git a/quiche/quic/core/http/quic_spdy_session_test.cc b/quiche/quic/core/http/quic_spdy_session_test.cc
index 550ba80..4c23b9e 100644
--- a/quiche/quic/core/http/quic_spdy_session_test.cc
+++ b/quiche/quic/core/http/quic_spdy_session_test.cc
@@ -2246,11 +2246,7 @@
   session_.OnStreamFrame(stream_frame3);
   // Priority is applied upon stream construction.
   TestStream* stream2 = session_.CreateIncomingStream(stream_id2);
-  if (GetQuicReloadableFlag(quic_priority_update_structured_headers_parser)) {
-    EXPECT_EQ((QuicStreamPriority{5u, true}), stream2->priority());
-  } else {
-    EXPECT_EQ((QuicStreamPriority{5u, false}), stream2->priority());
-  }
+  EXPECT_EQ((QuicStreamPriority{5u, true}), stream2->priority());
 }
 
 TEST_P(QuicSpdySessionTestServer, OnInvalidPriorityUpdateFrame) {
@@ -2289,13 +2285,9 @@
   PriorityUpdateFrame priority_update{stream_id, "00"};
 
   EXPECT_CALL(debug_visitor, OnPriorityUpdateFrameReceived(priority_update));
-  if (GetQuicReloadableFlag(quic_priority_update_structured_headers_parser)) {
-    EXPECT_CALL(*connection_,
-                CloseConnection(QUIC_INVALID_PRIORITY_UPDATE,
-                                "Invalid PRIORITY_UPDATE frame payload.", _));
-  } else {
-    EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(0);
-  }
+  EXPECT_CALL(*connection_,
+              CloseConnection(QUIC_INVALID_PRIORITY_UPDATE,
+                              "Invalid PRIORITY_UPDATE frame payload.", _));
 
   std::string serialized_priority_update =
       HttpEncoder::SerializePriorityUpdateFrame(priority_update);
@@ -2339,14 +2331,7 @@
   PriorityUpdateFrame priority_update{stream_id, "u=9"};
 
   EXPECT_CALL(debug_visitor, OnPriorityUpdateFrameReceived(priority_update));
-  if (GetQuicReloadableFlag(quic_priority_update_structured_headers_parser)) {
-    EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(0);
-  } else {
-    EXPECT_CALL(*connection_,
-                CloseConnection(
-                    QUIC_INVALID_PRIORITY_UPDATE,
-                    "Invalid value for PRIORITY_UPDATE urgency parameter.", _));
-  }
+  EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(0);
 
   std::string serialized_priority_update =
       HttpEncoder::SerializePriorityUpdateFrame(priority_update);
diff --git a/quiche/quic/core/quic_flags_list.h b/quiche/quic/core/quic_flags_list.h
index d9333b2..ee67f58 100644
--- a/quiche/quic/core/quic_flags_list.h
+++ b/quiche/quic/core/quic_flags_list.h
@@ -77,8 +77,6 @@
 QUIC_FLAG(quic_reloadable_flag_quic_connection_migration_use_new_cid_v2, true)
 // If true, use next_connection_id_sequence_number to validate retired cid number.
 QUIC_FLAG(quic_reloadable_flag_quic_check_retire_cid_with_next_cid_sequence_number, true)
-// If true, use quiche/common/structured_headers in QuicReceiveControlStream::OnPriorityUpdateFrame().
-QUIC_FLAG(quic_reloadable_flag_quic_priority_update_structured_headers_parser, true)
 // If true, uses conservative cwnd gain and pacing gain when cwnd gets bootstrapped.
 QUIC_FLAG(quic_reloadable_flag_quic_conservative_cwnd_and_pacing_gains, false)
 // If true, when TicketCrypter fails to encrypt a session ticket, quic::TlsServerHandshaker will send a placeholder ticket, instead of an empty one, to the client.
