diff --git a/quic/core/crypto/quic_random_test.cc b/quic/core/crypto/quic_random_test.cc
index ab27918..67963ce 100644
--- a/quic/core/crypto/quic_random_test.cc
+++ b/quic/core/crypto/quic_random_test.cc
@@ -30,7 +30,8 @@
   EXPECT_NE(value1, value2);
 }
 
-TEST_F(QuicRandomTest, InsecureRandBytes) {
+// TODO(b/194177024): re-enable this test.
+TEST_F(QuicRandomTest, QUIC_TEST_DISABLED_IN_CHROME(InsecureRandBytes)) {
   unsigned char buf1[16];
   unsigned char buf2[16];
   memset(buf1, 0xaf, sizeof(buf1));
@@ -42,7 +43,8 @@
   EXPECT_NE(0, memcmp(buf1, buf2, sizeof(buf1)));
 }
 
-TEST_F(QuicRandomTest, InsecureRandUint64) {
+// TODO(b/194177024): re-enable this test.
+TEST_F(QuicRandomTest, QUIC_TEST_DISABLED_IN_CHROME(InsecureRandUint64)) {
   QuicRandom* rng = QuicRandom::GetInstance();
   uint64_t value1 = rng->InsecureRandUint64();
   uint64_t value2 = rng->InsecureRandUint64();
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 301639b..9aa3c2c 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -7026,7 +7026,8 @@
               IsError(QUIC_PUBLIC_RESET));
 }
 
-TEST_P(QuicConnectionTest, IetfStatelessReset) {
+// TODO(b/194177024): re-enable this test.
+TEST_P(QuicConnectionTest, QUIC_TEST_DISABLED_IN_CHROME(IetfStatelessReset)) {
   if (!GetParam().version.HasIetfInvariantHeader()) {
     return;
   }
@@ -12027,7 +12028,9 @@
   EXPECT_EQ(2u, writer_->packets_write_attempts());
 }
 
-TEST_P(QuicConnectionTest, PathValidationReceivesStatelessReset) {
+// TODO(b/194177024): re-enable this test.
+TEST_P(QuicConnectionTest,
+       QUIC_TEST_DISABLED_IN_CHROME(PathValidationReceivesStatelessReset)) {
   if (!VersionHasIetfQuicFrames(connection_.version().transport_version) ||
       !connection_.use_path_validator()) {
     return;
diff --git a/quic/core/quic_framer_test.cc b/quic/core/quic_framer_test.cc
index f36bf5c..6237bc6 100644
--- a/quic/core/quic_framer_test.cc
+++ b/quic/core/quic_framer_test.cc
@@ -9237,7 +9237,9 @@
   }
 }
 
-TEST_P(QuicFramerTest, BuildIetfStatelessResetPacket) {
+// TODO(b/194177024): re-enable this test.
+TEST_P(QuicFramerTest,
+       QUIC_TEST_DISABLED_IN_CHROME(BuildIetfStatelessResetPacket)) {
   if (GetQuicRestartFlag(quic_fix_stateless_reset2)) {
     // clang-format off
     unsigned char packet[] = {
diff --git a/quic/core/quic_time_wait_list_manager_test.cc b/quic/core/quic_time_wait_list_manager_test.cc
index 4e9f957..c31d289 100644
--- a/quic/core/quic_time_wait_list_manager_test.cc
+++ b/quic/core/quic_time_wait_list_manager_test.cc
@@ -204,13 +204,13 @@
 
 bool ValidPublicResetPacketPredicate(
     QuicConnectionId expected_connection_id,
-    const testing::tuple<const char*, int>& packet_buffer) {
+    const std::tuple<const char*, int>& packet_buffer) {
   FramerVisitorCapturingPublicReset visitor(expected_connection_id);
   QuicFramer framer(AllSupportedVersions(), QuicTime::Zero(),
                     Perspective::IS_CLIENT, kQuicDefaultConnectionIdLength);
   framer.set_visitor(&visitor);
-  QuicEncryptedPacket encrypted(testing::get<0>(packet_buffer),
-                                testing::get<1>(packet_buffer));
+  QuicEncryptedPacket encrypted(std::get<0>(packet_buffer),
+                                std::get<1>(packet_buffer));
   framer.ProcessPacket(encrypted);
   QuicPublicResetPacket packet = visitor.public_reset_packet();
   bool public_reset_is_valid =
@@ -230,10 +230,10 @@
   return public_reset_is_valid || stateless_reset_is_valid;
 }
 
-Matcher<const testing::tuple<const char*, int>> PublicResetPacketEq(
+Matcher<const std::tuple<const char*, int>> PublicResetPacketEq(
     QuicConnectionId connection_id) {
   return Truly(
-      [connection_id](const testing::tuple<const char*, int> packet_buffer) {
+      [connection_id](const std::tuple<const char*, int> packet_buffer) {
         return ValidPublicResetPacketPredicate(connection_id, packet_buffer);
       });
 }
@@ -358,7 +358,9 @@
   ProcessPacket(connection_id_);
 }
 
-TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) {
+// TODO(b/194177024): re-enable this test.
+TEST_F(QuicTimeWaitListManagerTest,
+       QUIC_TEST_DISABLED_IN_CHROME(SendPublicReset)) {
   EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
   AddConnectionId(connection_id_,
                   QuicTimeWaitListManager::SEND_STATELESS_RESET);
