diff --git a/quiche/http2/adapter/header_validator.cc b/quiche/http2/adapter/header_validator.cc
index e330375..23d4225 100644
--- a/quiche/http2/adapter/header_validator.cc
+++ b/quiche/http2/adapter/header_validator.cc
@@ -82,12 +82,12 @@
 
 bool ValidateRequestHeaders(const std::vector<std::string>& pseudo_headers,
                             absl::string_view method, absl::string_view path,
-                            bool allow_connect) {
+                            bool allow_extended_connect) {
   QUICHE_VLOG(2) << "Request pseudo-headers: ["
                  << absl::StrJoin(pseudo_headers, ", ")
-                 << "], allow_connect: " << allow_connect
+                 << "], allow_extended_connect: " << allow_extended_connect
                  << ", method: " << method << ", path: " << path;
-  if (allow_connect && method == "CONNECT") {
+  if (allow_extended_connect && method == "CONNECT") {
     static const std::vector<std::string>* kConnectHeaders =
         new std::vector<std::string>(
             {":authority", ":method", ":path", ":protocol", ":scheme"});
@@ -221,7 +221,7 @@
   switch (type) {
     case HeaderType::REQUEST:
       return ValidateRequestHeaders(pseudo_headers_, method_, path_,
-                                    allow_connect_);
+                                    allow_extended_connect_);
     case HeaderType::REQUEST_TRAILER:
       return ValidateRequestTrailers(pseudo_headers_);
     case HeaderType::RESPONSE_100:
diff --git a/quiche/http2/adapter/header_validator_base.h b/quiche/http2/adapter/header_validator_base.h
index 290be32..9a6787a 100644
--- a/quiche/http2/adapter/header_validator_base.h
+++ b/quiche/http2/adapter/header_validator_base.h
@@ -52,14 +52,15 @@
 
   void SetMaxFieldSize(uint32_t field_size) { max_field_size_ = field_size; }
   void SetObsTextOption(ObsTextOption option) { obs_text_option_ = option; }
-  void AllowConnect() { allow_connect_ = true; }
+  // Allows the "extended CONNECT" syntax described in RFC 8441.
+  void SetAllowExtendedConnect() { allow_extended_connect_ = true; }
 
  protected:
   std::string status_;
   absl::optional<size_t> max_field_size_;
   absl::optional<size_t> content_length_;
   ObsTextOption obs_text_option_ = ObsTextOption::kDisallow;
-  bool allow_connect_ = false;
+  bool allow_extended_connect_ = false;
 };
 
 }  // namespace adapter
diff --git a/quiche/http2/adapter/header_validator_test.cc b/quiche/http2/adapter/header_validator_test.cc
index d49566a..31ba369 100644
--- a/quiche/http2/adapter/header_validator_test.cc
+++ b/quiche/http2/adapter/header_validator_test.cc
@@ -280,7 +280,7 @@
 
   // Future header blocks may send the `:protocol` pseudo-header for CONNECT
   // requests.
-  v.AllowConnect();
+  v.SetAllowExtendedConnect();
 
   v.StartHeaderBlock();
   for (Header to_add : kSampleRequestPseudoheaders) {
diff --git a/quiche/http2/adapter/noop_header_validator_test.cc b/quiche/http2/adapter/noop_header_validator_test.cc
index 078a84b..6340c60 100644
--- a/quiche/http2/adapter/noop_header_validator_test.cc
+++ b/quiche/http2/adapter/noop_header_validator_test.cc
@@ -203,7 +203,7 @@
   EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
 
   // This is a no-op for NoopHeaderValidator.
-  v.AllowConnect();
+  v.SetAllowExtendedConnect();
 
   v.StartHeaderBlock();
   for (Header to_add : kSampleRequestPseudoheaders) {
diff --git a/quiche/http2/adapter/oghttp2_session.cc b/quiche/http2/adapter/oghttp2_session.cc
index c22f085..6cbe736 100644
--- a/quiche/http2/adapter/oghttp2_session.cc
+++ b/quiche/http2/adapter/oghttp2_session.cc
@@ -1599,7 +1599,7 @@
         if (value == 1u && IsServerSession()) {
           // Allow extended CONNECT semantics even before SETTINGS are acked, to
           // make things easier for clients.
-          headers_handler_.AllowConnect();
+          headers_handler_.SetAllowExtendedConnect();
         }
         break;
       case HEADER_TABLE_SIZE:
diff --git a/quiche/http2/adapter/oghttp2_session.h b/quiche/http2/adapter/oghttp2_session.h
index 678cc2f..b4d713b 100644
--- a/quiche/http2/adapter/oghttp2_session.h
+++ b/quiche/http2/adapter/oghttp2_session.h
@@ -271,7 +271,7 @@
     absl::optional<size_t> content_length() const {
       return validator_->content_length();
     }
-    void AllowConnect() { validator_->AllowConnect(); }
+    void SetAllowExtendedConnect() { validator_->SetAllowExtendedConnect(); }
     void SetMaxFieldSize(uint32_t field_size) {
       validator_->SetMaxFieldSize(field_size);
     }
