diff --git a/http2/adapter/header_validator.cc b/http2/adapter/header_validator.cc
index 5e8ee97..321e958 100644
--- a/http2/adapter/header_validator.cc
+++ b/http2/adapter/header_validator.cc
@@ -59,20 +59,20 @@
 HeaderValidator::HeaderStatus HeaderValidator::ValidateSingleHeader(
     absl::string_view key, absl::string_view value) {
   if (key.empty()) {
-    return HEADER_NAME_EMPTY;
+    return HEADER_FIELD_INVALID;
   }
   const absl::string_view validated_key = key[0] == ':' ? key.substr(1) : key;
   if (validated_key.find_first_not_of(kHttp2HeaderNameAllowedChars) !=
       absl::string_view::npos) {
     QUICHE_VLOG(2) << "invalid chars in header name: ["
                    << absl::CEscape(validated_key) << "]";
-    return HEADER_NAME_INVALID_CHAR;
+    return HEADER_FIELD_INVALID;
   }
   if (value.find_first_not_of(kHttp2HeaderValueAllowedChars) !=
       absl::string_view::npos) {
     QUICHE_VLOG(2) << "invalid chars in header value: [" << absl::CEscape(value)
                    << "]";
-    return HEADER_VALUE_INVALID_CHAR;
+    return HEADER_FIELD_INVALID;
   }
   if (key[0] == ':') {
     if (key == ":status") {
@@ -81,11 +81,11 @@
               absl::string_view::npos) {
         QUICHE_VLOG(2) << "malformed status value: [" << absl::CEscape(value)
                        << "]";
-        return HEADER_VALUE_INVALID_CHAR;
+        return HEADER_FIELD_INVALID;
       }
       if (value == "101") {
         // Switching protocols is not allowed on a HTTP/2 stream.
-        return HEADER_VALUE_INVALID_STATUS;
+        return HEADER_FIELD_INVALID;
       }
       status_ = std::string(value);
     } else if (key == ":method") {
diff --git a/http2/adapter/header_validator.h b/http2/adapter/header_validator.h
index ecde204..a1d27bb 100644
--- a/http2/adapter/header_validator.h
+++ b/http2/adapter/header_validator.h
@@ -30,10 +30,7 @@
 
   enum HeaderStatus {
     HEADER_OK,
-    HEADER_NAME_EMPTY,
-    HEADER_NAME_INVALID_CHAR,
-    HEADER_VALUE_INVALID_CHAR,
-    HEADER_VALUE_INVALID_STATUS,
+    HEADER_FIELD_INVALID,
   };
   HeaderStatus ValidateSingleHeader(absl::string_view key,
                                     absl::string_view value);
diff --git a/http2/adapter/header_validator_test.cc b/http2/adapter/header_validator_test.cc
index dcd92e1..35750d3 100644
--- a/http2/adapter/header_validator_test.cc
+++ b/http2/adapter/header_validator_test.cc
@@ -10,7 +10,7 @@
 TEST(HeaderValidatorTest, HeaderNameEmpty) {
   HeaderValidator v;
   HeaderValidator::HeaderStatus status = v.ValidateSingleHeader("", "value");
-  EXPECT_EQ(HeaderValidator::HEADER_NAME_EMPTY, status);
+  EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID, status);
 }
 
 TEST(HeaderValidatorTest, HeaderValueEmpty) {
@@ -37,13 +37,13 @@
                                                 : absl::StrCat("na", c, "me");
       HeaderValidator::HeaderStatus status =
           v.ValidateSingleHeader(name, "value");
-      EXPECT_EQ(HeaderValidator::HEADER_NAME_INVALID_CHAR, status);
+      EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID, status);
     }
     // Uppercase characters in header names should not be allowed.
     const std::string uc_name = is_pseudo_header ? ":Method" : "Name";
     HeaderValidator::HeaderStatus status =
         v.ValidateSingleHeader(uc_name, "value");
-    EXPECT_EQ(HeaderValidator::HEADER_NAME_INVALID_CHAR, status);
+    EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID, status);
   }
 }
 
@@ -60,7 +60,7 @@
   for (const char* c : {"\r", "\n"}) {
     HeaderValidator::HeaderStatus status =
         v.ValidateSingleHeader("name", absl::StrCat("val", c, "ue"));
-    EXPECT_EQ(HeaderValidator::HEADER_VALUE_INVALID_CHAR, status);
+    EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID, status);
   }
 }
 
@@ -70,19 +70,19 @@
   for (HeaderType type : {HeaderType::RESPONSE, HeaderType::RESPONSE_100}) {
     // When `:status` has a non-digit value, validation will fail.
     v.StartHeaderBlock();
-    EXPECT_EQ(HeaderValidator::HEADER_VALUE_INVALID_CHAR,
+    EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID,
               v.ValidateSingleHeader(":status", "bar"));
     EXPECT_FALSE(v.FinishHeaderBlock(type));
 
     // When `:status` is too short, validation will fail.
     v.StartHeaderBlock();
-    EXPECT_EQ(HeaderValidator::HEADER_VALUE_INVALID_CHAR,
+    EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID,
               v.ValidateSingleHeader(":status", "10"));
     EXPECT_FALSE(v.FinishHeaderBlock(type));
 
     // When `:status` is too long, validation will fail.
     v.StartHeaderBlock();
-    EXPECT_EQ(HeaderValidator::HEADER_VALUE_INVALID_CHAR,
+    EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID,
               v.ValidateSingleHeader(":status", "9000"));
     EXPECT_FALSE(v.FinishHeaderBlock(type));
 
