Do not return from QuicSpdyClientStream::OnBodyAvailable() if visitor is null.

Fleet-wide count of quic_spdy_client_stream_visitor_null_on_body_available is
zero, implying that it is safe to skip this return. It is a leftover of
previously removed server push implementation.

Protected by FLAGS_quic_reloadable_flag_quic_skip_return_on_null_visitor.

PiperOrigin-RevId: 582332350
diff --git a/quiche/quic/core/http/quic_spdy_client_stream.cc b/quiche/quic/core/http/quic_spdy_client_stream.cc
index 438639b..816f21c 100644
--- a/quiche/quic/core/http/quic_spdy_client_stream.cc
+++ b/quiche/quic/core/http/quic_spdy_client_stream.cc
@@ -12,6 +12,7 @@
 #include "quiche/quic/core/http/spdy_utils.h"
 #include "quiche/quic/core/http/web_transport_http3.h"
 #include "quiche/quic/core/quic_alarm.h"
+#include "quiche/quic/platform/api/quic_flags.h"
 #include "quiche/quic/platform/api/quic_logging.h"
 #include "quiche/common/platform/api/quiche_flag_utils.h"
 #include "quiche/common/quiche_text_utils.h"
@@ -129,10 +130,16 @@
 }
 
 void QuicSpdyClientStream::OnBodyAvailable() {
+  const bool skip_return_on_null_visitor =
+      GetQuicReloadableFlag(quic_skip_return_on_null_visitor);
+  if (skip_return_on_null_visitor) {
+    QUICHE_RELOADABLE_FLAG_COUNT(quic_skip_return_on_null_visitor);
+  }
   if (visitor() == nullptr) {
-    // TODO(b/171463363): Remove this early return if safe.
     QUICHE_CODE_COUNT(quic_spdy_client_stream_visitor_null_on_body_available);
-    return;
+    if (!skip_return_on_null_visitor) {
+      return;
+    }
   }
 
   while (HasBytesToRead()) {
diff --git a/quiche/quic/core/quic_flags_list.h b/quiche/quic/core/quic_flags_list.h
index 6e5ed09..a7265cd 100644
--- a/quiche/quic/core/quic_flags_list.h
+++ b/quiche/quic/core/quic_flags_list.h
@@ -69,6 +69,8 @@
 QUIC_FLAG(quic_reloadable_flag_quic_discard_initial_packet_with_key_dropped, true)
 // If true, dispatcher sends error code QUIC_HANDSHAKE_FAILED_PACKETS_BUFFERED_TOO_LONG when handshake fails due to packets buffered for too long.
 QUIC_FLAG(quic_reloadable_flag_quic_new_error_code_when_packets_buffered_too_long, true)
+// If true, do not return from QuicSpdyClientStream::OnBodyAvailable() if visitor is nullptr.
+QUIC_FLAG(quic_reloadable_flag_quic_skip_return_on_null_visitor, true)
 // If true, do not send MAX_STREAM frames if there are already 2 outstanding.
 QUIC_FLAG(quic_reloadable_flag_quic_limit_sending_max_streams2, false)
 // If true, enable server retransmittable on wire PING.