Deprecate gfe2_reloadable_flag_quic_h3_datagram

The functionality behind this flag is disabled by default, and is enabled in WebTransport by an override which ignores the flag. This CL cleans up our MASQUE and test-only code to also use overrides instead of the flag.

PiperOrigin-RevId: 379503542
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 8efba88..626166f 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -363,7 +363,6 @@
 
   bool Initialize() {
     if (enable_web_transport_) {
-      SetQuicReloadableFlag(quic_h3_datagram, true);
       memory_cache_backend_.set_enable_webtransport(true);
     }
 
@@ -6043,6 +6042,7 @@
 
   WebTransportHttp3* web_transport =
       CreateWebTransportSession("/echo", /*wait_for_server_response=*/true);
+  ASSERT_NE(web_transport, nullptr);
 
   server_thread_->Pause();
   QuicSpdySession* server_session = GetServerSession();
@@ -6064,6 +6064,7 @@
 
   WebTransportHttp3* web_transport =
       CreateWebTransportSession("/echo", /*wait_for_server_response=*/true);
+  ASSERT_NE(web_transport, nullptr);
 
   server_thread_->Pause();
   QuicSpdySession* server_session = GetServerSession();
diff --git a/quic/core/http/quic_send_control_stream_test.cc b/quic/core/http/quic_send_control_stream_test.cc
index c5af1dc..3066cb3 100644
--- a/quic/core/http/quic_send_control_stream_test.cc
+++ b/quic/core/http/quic_send_control_stream_test.cc
@@ -133,7 +133,7 @@
       "4040"  // 0x40 as the reserved frame type
       "01"    // 1 byte frame length
       "61");  //  payload "a"
-  if (GetQuicReloadableFlag(quic_h3_datagram)) {
+  if (QuicSpdySessionPeer::ShouldNegotiateHttp3Datagram(&session_)) {
     expected_write_data = absl::HexStringToBytes(
         "00"    // stream type: control stream
         "04"    // frame type: SETTINGS frame
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index 2867d52..0ea2452 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -553,7 +553,6 @@
   settings_.values[SETTINGS_MAX_FIELD_SECTION_SIZE] =
       max_inbound_header_list_size_;
   if (ShouldNegotiateHttp3Datagram() && version().UsesHttp3()) {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_h3_datagram);
     settings_.values[SETTINGS_H3_DATAGRAM] = 1;
   }
   if (WillNegotiateWebTransport()) {
@@ -1850,7 +1849,7 @@
 }
 
 bool QuicSpdySession::ShouldNegotiateHttp3Datagram() {
-  return GetQuicReloadableFlag(quic_h3_datagram);
+  return false;
 }
 
 #undef ENDPOINT  // undef for jumbo builds
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index 163377b..9221937 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -355,6 +355,13 @@
   bool ShouldNegotiateWebTransport() override { return supports_webtransport_; }
   void set_supports_webtransport(bool value) { supports_webtransport_ = value; }
 
+  bool ShouldNegotiateHttp3Datagram() override {
+    return should_negotiate_h3_datagram_;
+  }
+  void set_should_negotiate_h3_datagram(bool value) {
+    should_negotiate_h3_datagram_ = value;
+  }
+
   MOCK_METHOD(void, OnAcceptChFrame, (const AcceptChFrame&), (override));
 
   using QuicSession::closed_streams;
@@ -367,6 +374,7 @@
 
   bool writev_consumes_all_data_;
   bool supports_webtransport_ = false;
+  bool should_negotiate_h3_datagram_ = false;
 };
 
 class QuicSpdySessionTestBase : public QuicTestWithParam<ParsedQuicVersion> {
@@ -3486,7 +3494,7 @@
   if (!version().UsesHttp3()) {
     return;
   }
-  SetQuicReloadableFlag(quic_h3_datagram, true);
+  session_.set_should_negotiate_h3_datagram(true);
   // HTTP/3 datagrams aren't supported before SETTINGS are received.
   EXPECT_FALSE(session_.h3_datagram_supported());
   // Receive SETTINGS.
@@ -3510,7 +3518,7 @@
     return;
   }
   CompleteHandshake();
-  SetQuicReloadableFlag(quic_h3_datagram, true);
+  session_.set_should_negotiate_h3_datagram(true);
   QuicSpdySessionPeer::SetH3DatagramSupported(&session_, true);
   SavingHttp3DatagramVisitor h3_datagram_visitor;
   QuicDatagramFlowId flow_id = session_.GetNextDatagramFlowId();
@@ -3536,7 +3544,7 @@
     return;
   }
   CompleteHandshake();
-  SetQuicReloadableFlag(quic_h3_datagram, true);
+  session_.set_should_negotiate_h3_datagram(true);
   QuicSpdySessionPeer::SetH3DatagramSupported(&session_, true);
   QuicDatagramFlowId flow_id = session_.GetNextDatagramFlowId();
   std::string h3_datagram_payload = {1, 2, 3, 4, 5, 6};
@@ -3550,7 +3558,7 @@
   if (!version().UsesHttp3()) {
     return;
   }
-  SetQuicReloadableFlag(quic_h3_datagram, true);
+  session_.set_should_negotiate_h3_datagram(true);
   session_.set_supports_webtransport(true);
 
   EXPECT_FALSE(session_.SupportsWebTransport());
@@ -3580,7 +3588,7 @@
   if (!version().UsesHttp3()) {
     return;
   }
-  SetQuicReloadableFlag(quic_h3_datagram, true);
+  session_.set_should_negotiate_h3_datagram(true);
   session_.set_supports_webtransport(true);
 
   EXPECT_FALSE(session_.SupportsWebTransport());
@@ -3610,7 +3618,7 @@
   if (!version().UsesHttp3()) {
     return;
   }
-  SetQuicReloadableFlag(quic_h3_datagram, true);
+  session_.set_should_negotiate_h3_datagram(true);
   session_.set_supports_webtransport(true);
 
   EXPECT_FALSE(session_.SupportsWebTransport());
@@ -3627,7 +3635,7 @@
   if (!version().UsesHttp3()) {
     return;
   }
-  SetQuicReloadableFlag(quic_h3_datagram, true);
+  session_.set_should_negotiate_h3_datagram(true);
   session_.set_supports_webtransport(true);
 
   CompleteHandshake();
@@ -3660,7 +3668,7 @@
   if (!version().UsesHttp3()) {
     return;
   }
-  SetQuicReloadableFlag(quic_h3_datagram, true);
+  session_.set_should_negotiate_h3_datagram(true);
   session_.set_supports_webtransport(true);
 
   CompleteHandshake();
@@ -3701,7 +3709,7 @@
   if (!version().UsesHttp3()) {
     return;
   }
-  SetQuicReloadableFlag(quic_h3_datagram, true);
+  session_.set_should_negotiate_h3_datagram(true);
   session_.set_supports_webtransport(true);
 
   CompleteHandshake();
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index 18526a5..7648277 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -259,8 +259,16 @@
   bool ShouldNegotiateWebTransport() override { return enable_webtransport_; }
   void EnableWebTransport() { enable_webtransport_ = true; }
 
+  bool ShouldNegotiateHttp3Datagram() override {
+    return should_negotiate_h3_datagram_;
+  }
+  void set_should_negotiate_h3_datagram(bool value) {
+    should_negotiate_h3_datagram_ = value;
+  }
+
  private:
   bool enable_webtransport_ = false;
+  bool should_negotiate_h3_datagram_ = false;
   StrictMock<TestCryptoStream> crypto_stream_;
 };
 
@@ -3107,6 +3115,7 @@
   }
 
   InitializeWithPerspective(kShouldProcessData, Perspective::IS_CLIENT);
+  session_->set_should_negotiate_h3_datagram(true);
   session_->EnableWebTransport();
   QuicSpdySessionPeer::EnableWebTransport(*session_);
 
@@ -3129,6 +3138,7 @@
   }
 
   Initialize(kShouldProcessData);
+  session_->set_should_negotiate_h3_datagram(true);
   session_->EnableWebTransport();
   QuicSpdySessionPeer::EnableWebTransport(*session_);
 
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 8048bc7..02e19b4 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -123,8 +123,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_deprecate_incoming_connection_ids, true)
 // When the STMP connection option is sent by the client, timestamps in the QUIC ACK frame are sent and processed.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_send_timestamps, false)
-// When true, QuicSpdySession supports draft-ietf-masque-h3-datagram.
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_h3_datagram, false)
 // When true, defaults to BBR congestion control instead of Cubic.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_default_to_bbr, false)
 // When true, prevents QUIC\'s PacingSender from generating bursts when the congestion controller is CWND limited and not pacing limited.
diff --git a/quic/masque/masque_client_bin.cc b/quic/masque/masque_client_bin.cc
index 9203725..bb9964e 100644
--- a/quic/masque/masque_client_bin.cc
+++ b/quic/masque/masque_client_bin.cc
@@ -50,8 +50,6 @@
     return 1;
   }
 
-  SetQuicReloadableFlag(quic_h3_datagram, true);
-
   const bool disable_certificate_verification =
       GetQuicFlag(FLAGS_disable_certificate_verification);
   QuicEpollServer epoll_server;
diff --git a/quic/masque/masque_client_session.h b/quic/masque/masque_client_session.h
index e055a76..c32a961 100644
--- a/quic/masque/masque_client_session.h
+++ b/quic/masque/masque_client_session.h
@@ -144,6 +144,8 @@
     QuicSocketAddress target_server_address_;
   };
 
+  bool ShouldNegotiateHttp3Datagram() override { return true; }
+
   const ConnectUdpClientState* GetOrCreateConnectUdpClientState(
       const QuicSocketAddress& target_server_address,
       EncapsulatedClientSession* encapsulated_client_session);
diff --git a/quic/masque/masque_server_bin.cc b/quic/masque/masque_server_bin.cc
index d5a5d9f..aaccda3 100644
--- a/quic/masque/masque_server_bin.cc
+++ b/quic/masque/masque_server_bin.cc
@@ -52,8 +52,6 @@
     return 0;
   }
 
-  SetQuicReloadableFlag(quic_h3_datagram, true);
-
   quic::MasqueMode masque_mode = quic::MasqueMode::kOpen;
   std::string mode_string = GetQuicFlag(FLAGS_masque_mode);
   if (mode_string == "legacy") {
diff --git a/quic/masque/masque_server_session.h b/quic/masque/masque_server_session.h
index 14b8293..ebf0d21 100644
--- a/quic/masque/masque_server_session.h
+++ b/quic/masque/masque_server_session.h
@@ -129,6 +129,8 @@
     MasqueServerSession* masque_session_;  // Unowned.
   };
 
+  bool ShouldNegotiateHttp3Datagram() override { return true; }
+
   MasqueServerBackend* masque_server_backend_;  // Unowned.
   Visitor* owner_;                              // Unowned.
   QuicEpollServer* epoll_server_;               // Unowned.
diff --git a/quic/test_tools/quic_spdy_session_peer.cc b/quic/test_tools/quic_spdy_session_peer.cc
index c547ac2..a27f073 100644
--- a/quic/test_tools/quic_spdy_session_peer.cc
+++ b/quic/test_tools/quic_spdy_session_peer.cc
@@ -106,8 +106,13 @@
 }
 
 // static
+bool QuicSpdySessionPeer::ShouldNegotiateHttp3Datagram(
+    QuicSpdySession* session) {
+  return session->ShouldNegotiateHttp3Datagram();
+}
+
+// static
 void QuicSpdySessionPeer::EnableWebTransport(QuicSpdySession& session) {
-  SetQuicReloadableFlag(quic_h3_datagram, true);
   QUICHE_DCHECK(session.WillNegotiateWebTransport());
   session.h3_datagram_supported_ = true;
   session.peer_supports_webtransport_ = true;
diff --git a/quic/test_tools/quic_spdy_session_peer.h b/quic/test_tools/quic_spdy_session_peer.h
index 9ba5497..0d06c4d 100644
--- a/quic/test_tools/quic_spdy_session_peer.h
+++ b/quic/test_tools/quic_spdy_session_peer.h
@@ -52,6 +52,7 @@
       QuicSpdySession* session);
   static void SetH3DatagramSupported(QuicSpdySession* session,
                                      bool h3_datagram_supported);
+  static bool ShouldNegotiateHttp3Datagram(QuicSpdySession* session);
   static void EnableWebTransport(QuicSpdySession& session);
 };
 
diff --git a/quic/tools/quic_simple_client_session.cc b/quic/tools/quic_simple_client_session.cc
index d1efcba..07c4628 100644
--- a/quic/tools/quic_simple_client_session.cc
+++ b/quic/tools/quic_simple_client_session.cc
@@ -54,4 +54,8 @@
   return enable_web_transport_;
 }
 
+bool QuicSimpleClientSession::ShouldNegotiateHttp3Datagram() {
+  return enable_web_transport_;
+}
+
 }  // namespace quic
diff --git a/quic/tools/quic_simple_client_session.h b/quic/tools/quic_simple_client_session.h
index aa86d9a..124e56f 100644
--- a/quic/tools/quic_simple_client_session.h
+++ b/quic/tools/quic_simple_client_session.h
@@ -30,6 +30,7 @@
 
   std::unique_ptr<QuicSpdyClientStream> CreateClientStream() override;
   bool ShouldNegotiateWebTransport() override;
+  bool ShouldNegotiateHttp3Datagram() override;
 
  private:
   const bool drop_response_body_;