Convert HttpValidationPolicy to a struct.

Envoy needs a policy different from `enforce_all_ == true` or
`enforce_all_ == false`.  A struct allows for more explicit customization.

Also remove quiche::HttpValidationPolicy::CreateDefault() for brevity.

PiperOrigin-RevId: 505193270
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 4d0a1fd..e8b4451 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -408,7 +408,6 @@
     "balsa/balsa_frame.cc",
     "balsa/balsa_headers.cc",
     "balsa/header_properties.cc",
-    "balsa/http_validation_policy.cc",
     "balsa/simple_buffer.cc",
     "balsa/standard_header_map.cc",
     "common/capsule.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 445844a..da3d5f0 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -408,7 +408,6 @@
     "src/quiche/balsa/balsa_frame.cc",
     "src/quiche/balsa/balsa_headers.cc",
     "src/quiche/balsa/header_properties.cc",
-    "src/quiche/balsa/http_validation_policy.cc",
     "src/quiche/balsa/simple_buffer.cc",
     "src/quiche/balsa/standard_header_map.cc",
     "src/quiche/common/capsule.cc",
diff --git a/build/source_list.json b/build/source_list.json
index d03d722..04319c6 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -407,7 +407,6 @@
     "quiche/balsa/balsa_frame.cc",
     "quiche/balsa/balsa_headers.cc",
     "quiche/balsa/header_properties.cc",
-    "quiche/balsa/http_validation_policy.cc",
     "quiche/balsa/simple_buffer.cc",
     "quiche/balsa/standard_header_map.cc",
     "quiche/common/capsule.cc",
diff --git a/quiche/balsa/balsa_frame.cc b/quiche/balsa/balsa_frame.cc
index 8e693cb..5219bf3 100644
--- a/quiche/balsa/balsa_frame.cc
+++ b/quiche/balsa/balsa_frame.cc
@@ -350,7 +350,7 @@
       // https://tools.ietf.org/html/rfc7230#section-3.2.4 says that a proxy
       // can choose to reject or normalize continuation lines.
       if ((c != ' ' && c != '\t') ||
-          http_validation_policy().disallow_header_continuation_lines()) {
+          http_validation_policy().disallow_header_continuation_lines) {
         HandleError(is_trailer ? BalsaFrameEnums::INVALID_TRAILER_FORMAT
                                : BalsaFrameEnums::INVALID_HEADER_FORMAT);
         return false;
@@ -384,7 +384,7 @@
         line_begin - stream_begin, line_end - stream_begin,
         line_end - stream_begin, line_end - stream_begin, 0));
     if (current >= line_end) {
-      if (http_validation_policy().require_header_colon()) {
+      if (http_validation_policy().require_header_colon) {
         HandleError(is_trailer ? BalsaFrameEnums::TRAILER_MISSING_COLON
                                : BalsaFrameEnums::HEADER_MISSING_COLON);
         return false;
@@ -424,7 +424,7 @@
       // construct which is technically not allowed by the spec.
 
       // In strict mode, we do treat this invalid value-less key as an error.
-      if (http_validation_policy().require_header_colon()) {
+      if (http_validation_policy().require_header_colon) {
         HandleError(is_trailer ? BalsaFrameEnums::TRAILER_MISSING_COLON
                                : BalsaFrameEnums::HEADER_MISSING_COLON);
         return false;
@@ -624,7 +624,7 @@
       if ((headers->content_length_status_ != content_length_status) ||
           ((headers->content_length_status_ ==
             BalsaHeadersEnums::VALID_CONTENT_LENGTH) &&
-           (http_validation_policy().disallow_multiple_content_length() ||
+           (http_validation_policy().disallow_multiple_content_length ||
             length != headers->content_length_))) {
         HandleError(BalsaFrameEnums::MULTIPLE_CONTENT_LENGTH_KEYS);
         return;
@@ -642,7 +642,7 @@
 
   if (!is_trailer) {
     if (http_validation_policy()
-            .disallow_transfer_encoding_with_content_length() &&
+            .disallow_transfer_encoding_with_content_length &&
         content_length_idx != 0 && transfer_encoding_idx != 0) {
       HandleError(BalsaFrameEnums::BOTH_TRANSFER_ENCODING_AND_CONTENT_LENGTH);
       return;
diff --git a/quiche/balsa/balsa_frame.h b/quiche/balsa/balsa_frame.h
index a698298..7dd3214 100644
--- a/quiche/balsa/balsa_frame.h
+++ b/quiche/balsa/balsa_frame.h
@@ -68,8 +68,7 @@
         start_of_trailer_line_(0),
         trailer_length_(0),
         trailer_(nullptr),
-        invalid_chars_level_(InvalidCharsLevel::kOff),
-        http_validation_policy_(HttpValidationPolicy::CreateDefault()) {}
+        invalid_chars_level_(InvalidCharsLevel::kOff) {}
 
   ~BalsaFrame() override {}
 
diff --git a/quiche/balsa/balsa_frame_test.cc b/quiche/balsa/balsa_frame_test.cc
index 4b8f365..d89816b 100644
--- a/quiche/balsa/balsa_frame_test.cc
+++ b/quiche/balsa/balsa_frame_test.cc
@@ -576,8 +576,6 @@
 class HTTPBalsaFrameTest : public QuicheTest {
  protected:
   void SetUp() override {
-    balsa_frame_.set_http_validation_policy(
-        HttpValidationPolicy::CreateDefault());
     balsa_frame_.set_balsa_headers(&headers_);
     balsa_frame_.set_balsa_trailer(&trailer_);
     balsa_frame_.set_balsa_visitor(&visitor_mock_);
@@ -2464,8 +2462,6 @@
 class BalsaFrameParsingTest : public QuicheTest {
  protected:
   void SetUp() override {
-    balsa_frame_.set_http_validation_policy(
-        HttpValidationPolicy::CreateDefault());
     balsa_frame_.set_is_request(true);
     balsa_frame_.set_balsa_headers(&headers_);
     balsa_frame_.set_balsa_visitor(&visitor_mock_);
diff --git a/quiche/balsa/http_validation_policy.cc b/quiche/balsa/http_validation_policy.cc
deleted file mode 100644
index 5aab23b..0000000
--- a/quiche/balsa/http_validation_policy.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "quiche/balsa/http_validation_policy.h"
-
-#include <tuple>
-
-#include "quiche/common/platform/api/quiche_logging.h"
-
-namespace quiche {
-
-HttpValidationPolicy::HttpValidationPolicy(bool enforce_all)
-    : enforce_all_(enforce_all) {}
-
-HttpValidationPolicy HttpValidationPolicy::CreateDefault() {
-  return HttpValidationPolicy(false);
-}
-
-bool HttpValidationPolicy::operator==(const HttpValidationPolicy& other) const {
-  return enforce_all_ == other.enforce_all_;
-}
-
-}  // namespace quiche
diff --git a/quiche/balsa/http_validation_policy.h b/quiche/balsa/http_validation_policy.h
index 89926c6..725f48e 100644
--- a/quiche/balsa/http_validation_policy.h
+++ b/quiche/balsa/http_validation_policy.h
@@ -12,42 +12,23 @@
 namespace quiche {
 
 // An HttpValidationPolicy captures policy choices affecting parsing of HTTP
-// requests.  It offers individual Boolean member functions to be consulted
-// during the parsing of an HTTP request.
-class QUICHE_EXPORT HttpValidationPolicy {
- public:
-  HttpValidationPolicy(bool enforce_all);
-
-  static HttpValidationPolicy CreateDefault();
-
+// requests.  It offers individual Boolean members to be consulted during the
+// parsing of an HTTP request.
+struct QUICHE_EXPORT HttpValidationPolicy {
   // https://tools.ietf.org/html/rfc7230#section-3.2.4 deprecates "folding"
   // of long header lines onto continuation lines.
-  bool disallow_header_continuation_lines() const { return enforce_all_; }
+  bool disallow_header_continuation_lines = false;
 
   // A valid header line requires a header name and a colon.
-  bool require_header_colon() const { return enforce_all_; }
+  bool require_header_colon = false;
 
   // https://tools.ietf.org/html/rfc7230#section-3.3.2 disallows multiple
   // Content-Length header fields with the same value.
-  bool disallow_multiple_content_length() const { return enforce_all_; }
+  bool disallow_multiple_content_length = false;
 
   // https://tools.ietf.org/html/rfc7230#section-3.3.2 disallows
   // Transfer-Encoding and Content-Length header fields together.
-  bool disallow_transfer_encoding_with_content_length() const {
-    return enforce_all_;
-  }
-
-  bool operator==(const HttpValidationPolicy& other) const;
-
-  friend QUICHE_EXPORT std::ostream& operator<<(
-      std::ostream& os, const HttpValidationPolicy& policy) {
-    os << "HttpValidationPolicy(enforce_all_=" << policy.enforce_all_ << ")";
-    return os;
-  }
-
- private:
-  // Enforce "everything": set for strictest possible parsing.
-  bool enforce_all_;
+  bool disallow_transfer_encoding_with_content_length = false;
 };
 
 }  // namespace quiche