In QUIC, do not test liveness if timeout is longer than half idle timeout. Client side only, not protected.

PiperOrigin-RevId: 326442623
Change-Id: I9705bf200cda45a9927d723f506885605303d707
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index b1c95b7..abc0be6 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -665,6 +665,11 @@
     return false;
   }
   const QuicTime::Delta timeout = idle_network_deadline - now;
+  if (2 * timeout > idle_network_detector_.idle_network_timeout()) {
+    // Do not test liveness if timeout is > half timeout. This is used to
+    // prevent an infinite loop for short idle timeout.
+    return false;
+  }
   if (!sent_packet_manager_.IsLessThanThreePTOs(timeout)) {
     return false;
   }
diff --git a/quic/tools/quic_spdy_client_base.cc b/quic/tools/quic_spdy_client_base.cc
index f7d86aa..09de813 100644
--- a/quic/tools/quic_spdy_client_base.cc
+++ b/quic/tools/quic_spdy_client_base.cc
@@ -180,9 +180,8 @@
     return nullptr;
   }
   if (VersionHasIetfQuicFrames(client_session()->transport_version())) {
-    // Process MAX_STREAMS from peer.
-    while (!client_session()->CanOpenNextOutgoingBidirectionalStream() &&
-           !client_session()->liveness_testing_in_progress()) {
+    // Process MAX_STREAMS from peer or wait for liveness testing succeeds.
+    while (!client_session()->CanOpenNextOutgoingBidirectionalStream()) {
       network_helper()->RunEventLoop();
     }
   }