Deprecates --gfe2_reloadable_flag_http2_avoid_decompose_representation

PiperOrigin-RevId: 884605241
diff --git a/quiche/common/quiche_feature_flags_list.h b/quiche/common/quiche_feature_flags_list.h
index 66751cf..8c58b90 100755
--- a/quiche/common/quiche_feature_flags_list.h
+++ b/quiche/common/quiche_feature_flags_list.h
@@ -9,7 +9,6 @@
 #if defined(QUICHE_FLAG)
 
 QUICHE_FLAG(bool, quiche_reloadable_flag_enable_h3_origin_frame, false, true, "If true, enables support for parsing HTTP/3 ORIGIN frames.")
-QUICHE_FLAG(bool, quiche_reloadable_flag_http2_avoid_decompose_representation, true, true, "If true, HPACK encoding will use a different iteration method that avoids unnecessary copies and string splitting.")
 QUICHE_FLAG(bool, quiche_reloadable_flag_quic_act_upon_invalid_header, true, true, "If true, reject or send error response code upon receiving invalid request or response headers.")
 QUICHE_FLAG(bool, quiche_reloadable_flag_quic_add_stream_info_to_idle_close_detail, false, true, "If true, include stream information in idle timeout connection close detail.")
 QUICHE_FLAG(bool, quiche_reloadable_flag_quic_bandwidth_sampler_guard_rtt_subtraction, false, false, "When true, BandwidthSampler::OnPacketAcknowledgedInner() will return early rather than compute a negative RTT.")
diff --git a/quiche/http2/adapter/oghttp2_adapter_test.cc b/quiche/http2/adapter/oghttp2_adapter_test.cc
index 97a9f80..c35e3e5 100644
--- a/quiche/http2/adapter/oghttp2_adapter_test.cc
+++ b/quiche/http2/adapter/oghttp2_adapter_test.cc
@@ -7292,13 +7292,8 @@
               OnHeaderForStream(1, ":authority", "example.com"));
   EXPECT_CALL(server_visitor,
               OnHeaderForStream(1, ":path", "/this/is/request/one"));
-  if (GetQuicheReloadableFlag(http2_avoid_decompose_representation)) {
-    EXPECT_CALL(server_visitor, OnHeaderForStream(1, "cookie", "a; b=2; c"));
-    EXPECT_CALL(server_visitor, OnHeaderForStream(1, "cookie", "d=e, f, g; h"));
-  } else {
-    EXPECT_CALL(server_visitor,
-                OnHeaderForStream(1, "cookie", "a; b=2; c; d=e, f, g; h"));
-  }
+  EXPECT_CALL(server_visitor, OnHeaderForStream(1, "cookie", "a; b=2; c"));
+  EXPECT_CALL(server_visitor, OnHeaderForStream(1, "cookie", "d=e, f, g; h"));
   EXPECT_CALL(server_visitor, OnEndHeadersForStream(1));
   EXPECT_CALL(server_visitor, OnEndStream(1));
 
diff --git a/quiche/http2/hpack/hpack_encoder.cc b/quiche/http2/hpack/hpack_encoder.cc
index e5ddb5f..b157b72 100644
--- a/quiche/http2/hpack/hpack_encoder.cc
+++ b/quiche/http2/hpack/hpack_encoder.cc
@@ -101,45 +101,21 @@
   // Separate header set into pseudo-headers and regular headers.
   Representations pseudo_headers;
   Representations regular_headers;
-  if (GetQuicheReloadableFlag(http2_avoid_decompose_representation)) {
-    QUICHE_RELOADABLE_FLAG_COUNT_N(http2_avoid_decompose_representation, 1, 4);
-    header_set.ForEach(
-        [&pseudo_headers, &regular_headers, crumble_cookies = crumble_cookies_](
-            absl::string_view name, absl::string_view value) {
-          QUICHE_RELOADABLE_FLAG_COUNT_N(http2_avoid_decompose_representation,
-                                         2, 4);
-          if (name == "cookie") {
-            if (crumble_cookies) {
-              CookieToCrumbs({name, value}, &regular_headers);
-            } else {
-              regular_headers.push_back({name, value});
-            }
-          } else if (!name.empty() && name[0] == kPseudoHeaderPrefix) {
-            pseudo_headers.push_back({name, value});
+  header_set.ForEach(
+      [&pseudo_headers, &regular_headers, crumble_cookies = crumble_cookies_](
+          absl::string_view name, absl::string_view value) {
+        if (name == "cookie") {
+          if (crumble_cookies) {
+            CookieToCrumbs({name, value}, &regular_headers);
           } else {
             regular_headers.push_back({name, value});
           }
-        });
-  } else {
-    bool found_cookie = false;
-    for (const auto& header : header_set) {
-      if (!found_cookie && header.first == "cookie") {
-        // Note that there can only be one "cookie" header, because header_set
-        // is a map.
-        found_cookie = true;
-        if (crumble_cookies_) {
-          CookieToCrumbs(header, &regular_headers);
+        } else if (!name.empty() && name[0] == kPseudoHeaderPrefix) {
+          pseudo_headers.push_back({name, value});
         } else {
-          DecomposeRepresentation(header, &regular_headers);
+          regular_headers.push_back({name, value});
         }
-      } else if (!header.first.empty() &&
-                 header.first[0] == kPseudoHeaderPrefix) {
-        DecomposeRepresentation(header, &pseudo_headers);
-      } else {
-        DecomposeRepresentation(header, &regular_headers);
-      }
-    }
-  }
+      });
 
   RepresentationIterator iter(pseudo_headers, regular_headers);
   return EncodeRepresentations(&iter);
@@ -344,45 +320,19 @@
 HpackEncoder::Encoderator::Encoderator(
     const quiche::HttpHeaderBlock& header_set, HpackEncoder* encoder)
     : encoder_(encoder), has_next_(true) {
-  if (GetQuicheReloadableFlag(http2_avoid_decompose_representation)) {
-    QUICHE_RELOADABLE_FLAG_COUNT_N(http2_avoid_decompose_representation, 3, 4);
-    header_set.ForEach([this](absl::string_view name, absl::string_view value) {
-      QUICHE_RELOADABLE_FLAG_COUNT_N(http2_avoid_decompose_representation, 4,
-                                     4);
-      if (name == "cookie") {
-        if (encoder_->crumble_cookies_) {
-          CookieToCrumbs({name, value}, &regular_headers_);
-        } else {
-          regular_headers_.push_back({name, value});
-        }
-      } else if (!name.empty() && name[0] == kPseudoHeaderPrefix) {
-        pseudo_headers_.push_back({name, value});
+  header_set.ForEach([this](absl::string_view name, absl::string_view value) {
+    if (name == "cookie") {
+      if (encoder_->crumble_cookies_) {
+        CookieToCrumbs({name, value}, &regular_headers_);
       } else {
         regular_headers_.push_back({name, value});
       }
-    });
-
-  } else {
-    // Separate header set into pseudo-headers and regular headers.
-    bool found_cookie = false;
-    for (const auto& header : header_set) {
-      if (!found_cookie && header.first == "cookie") {
-        // Note that there can only be one "cookie" header, because header_set
-        // is a map.
-        found_cookie = true;
-        if (encoder_->crumble_cookies_) {
-          CookieToCrumbs(header, &regular_headers_);
-        } else {
-          DecomposeRepresentation(header, &regular_headers_);
-        }
-      } else if (!header.first.empty() &&
-                 header.first[0] == kPseudoHeaderPrefix) {
-        DecomposeRepresentation(header, &pseudo_headers_);
-      } else {
-        DecomposeRepresentation(header, &regular_headers_);
-      }
+    } else if (!name.empty() && name[0] == kPseudoHeaderPrefix) {
+      pseudo_headers_.push_back({name, value});
+    } else {
+      regular_headers_.push_back({name, value});
     }
-  }
+  });
   header_it_ = std::make_unique<RepresentationIterator>(pseudo_headers_,
                                                         regular_headers_);