Fix a bug where HTTP/3 client stack will treat any extended CONNECT request as WebTransport.

Patch by @wbpcode originally submitted via <https://github.com/google/quiche/pull/146>, adopted with slight modifications.

PiperOrigin-RevId: 933344786
diff --git a/quiche/quic/core/http/quic_spdy_stream.cc b/quiche/quic/core/http/quic_spdy_stream.cc
index 55f7824..e0d7f96 100644
--- a/quiche/quic/core/http/quic_spdy_stream.cc
+++ b/quiche/quic/core/http/quic_spdy_stream.cc
@@ -1462,7 +1462,7 @@
   if (method_it == headers.end() || protocol_it == headers.end()) {
     return;
   }
-  if (method_it->second != "CONNECT" && protocol_it->second != "webtransport") {
+  if (method_it->second != "CONNECT" || protocol_it->second != "webtransport") {
     return;
   }
 
diff --git a/quiche/quic/core/http/quic_spdy_stream_test.cc b/quiche/quic/core/http/quic_spdy_stream_test.cc
index d64b402..6bd56f1 100644
--- a/quiche/quic/core/http/quic_spdy_stream_test.cc
+++ b/quiche/quic/core/http/quic_spdy_stream_test.cc
@@ -3333,6 +3333,32 @@
   EXPECT_EQ(stream_->web_transport()->GetNegotiatedSubprotocol(), "moqt-01");
 }
 
+TEST_P(QuicSpdyStreamTest, DoNotProcessNonWebTransportExtendedConnectAsClient) {
+  if (!IsIetfQuic()) {
+    return;
+  }
+
+  InitializeWithPerspective(kShouldProcessData, Perspective::IS_CLIENT);
+  session_->set_local_http_datagram_support(HttpDatagramSupport::kRfc);
+  session_->EnableWebTransport();
+  session_->OnSetting(SETTINGS_ENABLE_CONNECT_PROTOCOL, 1);
+  QuicSpdySessionPeer::EnableWebTransport(session_.get());
+  QuicSpdySessionPeer::SetHttpDatagramSupport(session_.get(),
+                                              HttpDatagramSupport::kRfc);
+
+  EXPECT_CALL(*stream_, WriteHeadersMock(false));
+  EXPECT_CALL(*session_, WritevData(stream_->id(), _, _, _, _, _))
+      .Times(AnyNumber());
+
+  // Ensure that the client does not attempt to set up a WebTransport session if
+  // the `:protocol` value is not "webtransport".
+  quiche::HttpHeaderBlock request_headers;
+  request_headers[":method"] = "CONNECT";
+  request_headers[":protocol"] = "websocket";
+  stream_->WriteHeaders(std::move(request_headers), /*fin=*/false, nullptr);
+  EXPECT_EQ(stream_->web_transport(), nullptr);
+}
+
 TEST_P(QuicSpdyStreamTest, WebTransportIgnoreSubprotocolsThatWereNotOffered) {
   if (!IsIetfQuic()) {
     return;