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, ®ular_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}, ®ular_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, ®ular_headers, crumble_cookies = crumble_cookies_]( + absl::string_view name, absl::string_view value) { + if (name == "cookie") { + if (crumble_cookies) { + CookieToCrumbs({name, value}, ®ular_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, ®ular_headers); + } else if (!name.empty() && name[0] == kPseudoHeaderPrefix) { + pseudo_headers.push_back({name, value}); } else { - DecomposeRepresentation(header, ®ular_headers); + regular_headers.push_back({name, value}); } - } else if (!header.first.empty() && - header.first[0] == kPseudoHeaderPrefix) { - DecomposeRepresentation(header, &pseudo_headers); - } else { - DecomposeRepresentation(header, ®ular_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}, ®ular_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}, ®ular_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, ®ular_headers_); - } else { - DecomposeRepresentation(header, ®ular_headers_); - } - } else if (!header.first.empty() && - header.first[0] == kPseudoHeaderPrefix) { - DecomposeRepresentation(header, &pseudo_headers_); - } else { - DecomposeRepresentation(header, ®ular_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_);