diff --git a/quic/core/http/http_decoder.cc b/quic/core/http/http_decoder.cc
index b20789b..5a07c3f 100644
--- a/quic/core/http/http_decoder.cc
+++ b/quic/core/http/http_decoder.cc
@@ -422,20 +422,6 @@
   return visitor_->OnUnknownFramePayload(payload);
 }
 
-void HttpDecoder::DiscardFramePayload(QuicDataReader* reader) {
-  QuicByteCount bytes_to_read = std::min<QuicByteCount>(
-      remaining_frame_length_, reader->BytesRemaining());
-  absl::string_view payload;
-  bool success = reader->ReadStringPiece(&payload, bytes_to_read);
-  QUICHE_DCHECK(success);
-  remaining_frame_length_ -= payload.length();
-  if (remaining_frame_length_ == 0) {
-    state_ = STATE_READING_FRAME_TYPE;
-    current_length_field_length_ = 0;
-    current_type_field_length_ = 0;
-  }
-}
-
 bool HttpDecoder::BufferOrParsePayload(QuicDataReader* reader) {
   QUICHE_DCHECK_EQ(current_frame_length_,
                    buffer_.size() + remaining_frame_length_);
@@ -525,7 +511,7 @@
     }
     case static_cast<uint64_t>(HttpFrameType::PRIORITY_UPDATE_REQUEST_STREAM): {
       PriorityUpdateFrame frame;
-      if (!ParseNewPriorityUpdateFrame(reader, &frame)) {
+      if (!ParsePriorityUpdateFrame(reader, &frame)) {
         return false;
       }
       return visitor_->OnPriorityUpdateFrame(frame);
@@ -597,36 +583,6 @@
 }
 
 bool HttpDecoder::ParsePriorityUpdateFrame(QuicDataReader* reader,
-                                           PriorityUpdateFrame* frame) {
-  uint8_t prioritized_element_type;
-  if (!reader->ReadUInt8(&prioritized_element_type)) {
-    RaiseError(QUIC_HTTP_FRAME_ERROR,
-               "Unable to read prioritized element type.");
-    return false;
-  }
-
-  if (prioritized_element_type != REQUEST_STREAM &&
-      prioritized_element_type != PUSH_STREAM) {
-    RaiseError(QUIC_HTTP_FRAME_ERROR, "Invalid prioritized element type.");
-    return false;
-  }
-
-  frame->prioritized_element_type =
-      static_cast<PrioritizedElementType>(prioritized_element_type);
-
-  if (!reader->ReadVarInt62(&frame->prioritized_element_id)) {
-    RaiseError(QUIC_HTTP_FRAME_ERROR, "Unable to read prioritized element id.");
-    return false;
-  }
-
-  absl::string_view priority_field_value = reader->ReadRemainingPayload();
-  frame->priority_field_value =
-      std::string(priority_field_value.data(), priority_field_value.size());
-
-  return true;
-}
-
-bool HttpDecoder::ParseNewPriorityUpdateFrame(QuicDataReader* reader,
                                               PriorityUpdateFrame* frame) {
   frame->prioritized_element_type = REQUEST_STREAM;
 
diff --git a/quic/core/http/http_decoder.h b/quic/core/http/http_decoder.h
index 7cbf205..3743788 100644
--- a/quic/core/http/http_decoder.h
+++ b/quic/core/http/http_decoder.h
@@ -188,9 +188,6 @@
   // false if it should be paused.
   bool HandleUnknownFramePayload(QuicDataReader* reader);
 
-  // Discards any remaining frame payload from |reader|.
-  void DiscardFramePayload(QuicDataReader* reader);
-
   // Buffers any remaining frame payload from |*reader| into |buffer_| if
   // necessary.  Parses the frame payload if complete.  Parses out of |*reader|
   // without unnecessary copy if |*reader| has entire payload.
@@ -215,17 +212,10 @@
   // Parses the payload of a SETTINGS frame from |reader| into |frame|.
   bool ParseSettingsFrame(QuicDataReader* reader, SettingsFrame* frame);
 
-  // Parses the payload of a PRIORITY_UPDATE frame (draft-01, type 0x0f)
-  // from |reader| into |frame|.
-  // TODO(b/147306124): Remove.
-  bool ParsePriorityUpdateFrame(QuicDataReader* reader,
-                                PriorityUpdateFrame* frame);
-
   // Parses the payload of a PRIORITY_UPDATE frame (draft-02, type 0xf0700)
   // from |reader| into |frame|.
-  // TODO(b/147306124): Rename to ParsePriorityUpdateFrame().
-  bool ParseNewPriorityUpdateFrame(QuicDataReader* reader,
-                                   PriorityUpdateFrame* frame);
+  bool ParsePriorityUpdateFrame(QuicDataReader* reader,
+                                PriorityUpdateFrame* frame);
 
   // Parses the payload of an ACCEPT_CH frame from |reader| into |frame|.
   bool ParseAcceptChFrame(QuicDataReader* reader, AcceptChFrame* frame);
