diff --git a/quic/core/http/http_decoder.cc b/quic/core/http/http_decoder.cc
index fe33a81..95f5079 100644
--- a/quic/core/http/http_decoder.cc
+++ b/quic/core/http/http_decoder.cc
@@ -238,13 +238,7 @@
       continue_processing = visitor_->OnPriorityUpdateFrameStart(header_length);
       break;
     case static_cast<uint64_t>(HttpFrameType::ACCEPT_CH):
-      if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
-        QUIC_RELOADABLE_FLAG_COUNT(quic_parse_accept_ch_frame);
-        continue_processing = visitor_->OnAcceptChFrameStart(header_length);
-      } else {
-        continue_processing = visitor_->OnUnknownFrameStart(
-            current_frame_type_, header_length, current_frame_length_);
-      }
+      continue_processing = visitor_->OnAcceptChFrameStart(header_length);
       break;
     default:
       continue_processing = visitor_->OnUnknownFrameStart(
@@ -381,13 +375,9 @@
       break;
     }
     case static_cast<uint64_t>(HttpFrameType::ACCEPT_CH): {
-      if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
-        // TODO(bnc): Avoid buffering if the entire frame is present, and
-        // instead parse directly out of |reader|.
-        BufferFramePayload(reader);
-      } else {
-        continue_processing = HandleUnknownFramePayload(reader);
-      }
+      // TODO(bnc): Avoid buffering if the entire frame is present, and
+      // instead parse directly out of |reader|.
+      BufferFramePayload(reader);
       break;
     }
     default: {
@@ -499,18 +489,14 @@
       break;
     }
     case static_cast<uint64_t>(HttpFrameType::ACCEPT_CH): {
-      if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
-        // TODO(bnc): Avoid buffering if the entire frame is present, and
-        // instead parse directly out of |reader|.
-        AcceptChFrame frame;
-        QuicDataReader reader(buffer_.data(), current_frame_length_);
-        if (!ParseAcceptChFrame(&reader, &frame)) {
-          return false;
-        }
-        continue_processing = visitor_->OnAcceptChFrame(frame);
-      } else {
-        continue_processing = visitor_->OnUnknownFrameEnd();
+      // TODO(bnc): Avoid buffering if the entire frame is present, and
+      // instead parse directly out of |reader|.
+      AcceptChFrame frame;
+      QuicDataReader reader(buffer_.data(), current_frame_length_);
+      if (!ParseAcceptChFrame(&reader, &frame)) {
+        return false;
       }
+      continue_processing = visitor_->OnAcceptChFrame(frame);
       break;
     }
     default:
diff --git a/quic/core/http/http_decoder_test.cc b/quic/core/http/http_decoder_test.cc
index 1be5084..4f518a4 100644
--- a/quic/core/http/http_decoder_test.cc
+++ b/quic/core/http/http_decoder_test.cc
@@ -867,11 +867,43 @@
                     "\x04"  // length
                     "\x05"  // valid stream id
                     "foo",  // superfluous data
-                    "Superfluous data in GOAWAY frame."}};
+                    "Superfluous data in GOAWAY frame."},
+                   {"\x40\x89"  // type (ACCEPT_CH)
+                    "\x01"      // length
+                    "\x40",     // first byte of two-byte varint origin length
+                    "Unable to read ACCEPT_CH origin."},
+                   {"\x40\x89"  // type (ACCEPT_CH)
+                    "\x01"      // length
+                    "\x05",     // valid origin length but no origin string
+                    "Unable to read ACCEPT_CH origin."},
+                   {"\x40\x89"  // type (ACCEPT_CH)
+                    "\x04"      // length
+                    "\x05"      // valid origin length
+                    "foo",      // payload ends before origin ends
+                    "Unable to read ACCEPT_CH origin."},
+                   {"\x40\x89"  // type (ACCEPT_CH)
+                    "\x04"      // length
+                    "\x03"      // valid origin length
+                    "foo",      // payload ends at end of origin: no value
+                    "Unable to read ACCEPT_CH value."},
+                   {"\x40\x89"  // type (ACCEPT_CH)
+                    "\x05"      // length
+                    "\x03"      // valid origin length
+                    "foo"       // payload ends at end of origin: no value
+                    "\x40",     // first byte of two-byte varint value length
+                    "Unable to read ACCEPT_CH value."},
+                   {"\x40\x89"  // type (ACCEPT_CH)
+                    "\x08"      // length
+                    "\x03"      // valid origin length
+                    "foo"       // origin
+                    "\x05"      // valid value length
+                    "bar",      // payload ends before value ends
+                    "Unable to read ACCEPT_CH value."}};
 
   for (const auto& test_data : kTestData) {
     {
       HttpDecoder decoder(&visitor_);
+      EXPECT_CALL(visitor_, OnAcceptChFrameStart(_)).Times(AnyNumber());
       EXPECT_CALL(visitor_, OnError(&decoder));
 
       absl::string_view input(test_data.input);
@@ -881,6 +913,7 @@
     }
     {
       HttpDecoder decoder(&visitor_);
+      EXPECT_CALL(visitor_, OnAcceptChFrameStart(_)).Times(AnyNumber());
       EXPECT_CALL(visitor_, OnError(&decoder));
 
       absl::string_view input(test_data.input);
@@ -1194,10 +1227,6 @@
 }
 
 TEST_F(HttpDecoderTest, AcceptChFrame) {
-  if (!GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
-    return;
-  }
-
   InSequence s;
   std::string input1 = absl::HexStringToBytes(
       "4089"  // type (ACCEPT_CH)
@@ -1272,74 +1301,6 @@
   EXPECT_EQ("", decoder_.error_detail());
 }
 
-TEST_F(HttpDecoderTest, CorruptAcceptChFrame) {
-  if (!GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
-    // TODO(bnc): merge this test into HttpDecoderTest.CorruptFrame when
-    // deprecating flag.
-    return;
-  }
-
-  EXPECT_CALL(visitor_, OnAcceptChFrameStart(_)).Times(AnyNumber());
-
-  struct {
-    const char* const input;
-    const char* const error_message;
-  } kTestData[] = {{"\x40\x89"  // type (ACCEPT_CH)
-                    "\x01"      // length
-                    "\x40",     // first byte of two-byte varint origin length
-                    "Unable to read ACCEPT_CH origin."},
-                   {"\x40\x89"  // type (ACCEPT_CH)
-                    "\x01"      // length
-                    "\x05",     // valid origin length but no origin string
-                    "Unable to read ACCEPT_CH origin."},
-                   {"\x40\x89"  // type (ACCEPT_CH)
-                    "\x04"      // length
-                    "\x05"      // valid origin length
-                    "foo",      // payload ends before origin ends
-                    "Unable to read ACCEPT_CH origin."},
-                   {"\x40\x89"  // type (ACCEPT_CH)
-                    "\x04"      // length
-                    "\x03"      // valid origin length
-                    "foo",      // payload ends at end of origin: no value
-                    "Unable to read ACCEPT_CH value."},
-                   {"\x40\x89"  // type (ACCEPT_CH)
-                    "\x05"      // length
-                    "\x03"      // valid origin length
-                    "foo"       // payload ends at end of origin: no value
-                    "\x40",     // first byte of two-byte varint value length
-                    "Unable to read ACCEPT_CH value."},
-                   {"\x40\x89"  // type (ACCEPT_CH)
-                    "\x08"      // length
-                    "\x03"      // valid origin length
-                    "foo"       // origin
-                    "\x05"      // valid value length
-                    "bar",      // payload ends before value ends
-                    "Unable to read ACCEPT_CH value."}};
-
-  for (const auto& test_data : kTestData) {
-    {
-      HttpDecoder decoder(&visitor_);
-      EXPECT_CALL(visitor_, OnError(&decoder));
-
-      absl::string_view input(test_data.input);
-      decoder.ProcessInput(input.data(), input.size());
-      EXPECT_THAT(decoder.error(), IsError(QUIC_HTTP_FRAME_ERROR));
-      EXPECT_EQ(test_data.error_message, decoder.error_detail());
-    }
-    {
-      HttpDecoder decoder(&visitor_);
-      EXPECT_CALL(visitor_, OnError(&decoder));
-
-      absl::string_view input(test_data.input);
-      for (auto c : input) {
-        decoder.ProcessInput(&c, 1);
-      }
-      EXPECT_THAT(decoder.error(), IsError(QUIC_HTTP_FRAME_ERROR));
-      EXPECT_EQ(test_data.error_message, decoder.error_detail());
-    }
-  }
-}
-
 TEST_F(HttpDecoderTest, DecodeSettings) {
   std::string input = absl::HexStringToBytes(
       "04"    // type (SETTINGS)
diff --git a/quic/core/http/quic_receive_control_stream.cc b/quic/core/http/quic_receive_control_stream.cc
index 35d5902..ffc38a0 100644
--- a/quic/core/http/quic_receive_control_stream.cc
+++ b/quic/core/http/quic_receive_control_stream.cc
@@ -263,8 +263,7 @@
        frame_type == HttpFrameType::PUSH_PROMISE) ||
       (spdy_session()->perspective() == Perspective::IS_CLIENT &&
        frame_type == HttpFrameType::MAX_PUSH_ID) ||
-      (GetQuicReloadableFlag(quic_parse_accept_ch_frame) &&
-       spdy_session()->perspective() == Perspective::IS_SERVER &&
+      (spdy_session()->perspective() == Perspective::IS_SERVER &&
        frame_type == HttpFrameType::ACCEPT_CH)) {
     stream_delegate()->OnStreamError(
         QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM,
diff --git a/quic/core/http/quic_receive_control_stream_test.cc b/quic/core/http/quic_receive_control_stream_test.cc
index 3e4532f..491255d 100644
--- a/quic/core/http/quic_receive_control_stream_test.cc
+++ b/quic/core/http/quic_receive_control_stream_test.cc
@@ -404,8 +404,7 @@
       "4089"  // type (ACCEPT_CH)
       "00");  // length
 
-  if (GetQuicReloadableFlag(quic_parse_accept_ch_frame) &&
-      perspective() == Perspective::IS_SERVER) {
+  if (perspective() == Perspective::IS_SERVER) {
     EXPECT_CALL(*connection_,
                 CloseConnection(
                     QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM,
@@ -449,23 +448,17 @@
       "4089"  // type (ACCEPT_CH)
       "00");  // length
 
-  if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
-    if (perspective() == Perspective::IS_CLIENT) {
-      EXPECT_CALL(debug_visitor, OnAcceptChFrameReceived(_));
-    } else {
-      EXPECT_CALL(*connection_,
-                  CloseConnection(
-                      QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM,
-                      "Invalid frame type 137 received on control stream.", _))
-          .WillOnce(
-              Invoke(connection_, &MockQuicConnection::ReallyCloseConnection));
-      EXPECT_CALL(*connection_, SendConnectionClosePacket(_, _, _));
-      EXPECT_CALL(session_, OnConnectionClosed(_, _));
-    }
+  if (perspective() == Perspective::IS_CLIENT) {
+    EXPECT_CALL(debug_visitor, OnAcceptChFrameReceived(_));
   } else {
-    EXPECT_CALL(debug_visitor,
-                OnUnknownFrameReceived(id, /* frame_type = */ 0x89,
-                                       /* payload_length = */ 0));
+    EXPECT_CALL(*connection_,
+                CloseConnection(
+                    QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM,
+                    "Invalid frame type 137 received on control stream.", _))
+        .WillOnce(
+            Invoke(connection_, &MockQuicConnection::ReallyCloseConnection));
+    EXPECT_CALL(*connection_, SendConnectionClosePacket(_, _, _));
+    EXPECT_CALL(session_, OnConnectionClosed(_, _));
   }
 
   receive_control_stream_->OnStreamFrame(
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index b266633..3985769 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -3203,10 +3203,6 @@
     return;
   }
 
-  if (!GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
-    return;
-  }
-
   StrictMock<MockHttp3DebugVisitor> debug_visitor;
   session_.set_debug_visitor(&debug_visitor);
 
@@ -3265,11 +3261,9 @@
       "03"        // length of value
       "626172");  // value "bar"
 
-  if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
-    AcceptChFrame expected_accept_ch_frame{{{"foo", "bar"}}};
-    EXPECT_CALL(debug_visitor,
-                OnAcceptChFrameReceivedViaAlps(expected_accept_ch_frame));
-  }
+  AcceptChFrame expected_accept_ch_frame{{{"foo", "bar"}}};
+  EXPECT_CALL(debug_visitor,
+              OnAcceptChFrameReceivedViaAlps(expected_accept_ch_frame));
 
   auto error = session_.OnAlpsData(
       reinterpret_cast<const uint8_t*>(serialized_accept_ch_frame.data()),
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 40f8502..d2a66e0 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -46,7 +46,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_on_stream_reset, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_willing_and_able_to_write2, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_h3_datagram, false)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_parse_accept_ch_frame, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_pass_path_response_to_validator, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_require_handshake_confirmation, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_send_goaway_with_connection_close, true)
