diff --git a/quic/core/crypto/aead_base_decrypter.cc b/quic/core/crypto/aead_base_decrypter.cc
index 3753635..f31720a 100644
--- a/quic/core/crypto/aead_base_decrypter.cc
+++ b/quic/core/crypto/aead_base_decrypter.cc
@@ -7,6 +7,7 @@
 #include <cstdint>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/crypto.h"
 #include "third_party/boringssl/src/include/openssl/err.h"
@@ -14,7 +15,6 @@
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 
 namespace quic {
 
@@ -34,7 +34,7 @@
 #else
   while (uint32_t error = ERR_get_error()) {
     char buf[120];
-    ERR_error_string_n(error, buf, QUICHE_ARRAYSIZE(buf));
+    ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf));
     QUIC_DLOG(ERROR) << "OpenSSL error: " << buf;
   }
 #endif
diff --git a/quic/core/crypto/aead_base_encrypter.cc b/quic/core/crypto/aead_base_encrypter.cc
index d6360f4..3b82755 100644
--- a/quic/core/crypto/aead_base_encrypter.cc
+++ b/quic/core/crypto/aead_base_encrypter.cc
@@ -4,6 +4,7 @@
 
 #include "net/third_party/quiche/src/quic/core/crypto/aead_base_encrypter.h"
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/crypto.h"
 #include "third_party/boringssl/src/include/openssl/err.h"
@@ -12,7 +13,6 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_aligned.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 
 namespace quic {
 
@@ -27,7 +27,7 @@
 #else
   while (unsigned long error = ERR_get_error()) {
     char buf[120];
-    ERR_error_string_n(error, buf, QUICHE_ARRAYSIZE(buf));
+    ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf));
     QUIC_DLOG(ERROR) << "OpenSSL error: " << buf;
   }
 #endif
diff --git a/quic/core/crypto/aes_128_gcm_12_decrypter_test.cc b/quic/core/crypto/aes_128_gcm_12_decrypter_test.cc
index 52a099e..5b25250 100644
--- a/quic/core/crypto/aes_128_gcm_12_decrypter_test.cc
+++ b/quic/core/crypto/aes_128_gcm_12_decrypter_test.cc
@@ -7,11 +7,11 @@
 #include <memory>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
@@ -225,7 +225,7 @@
 class Aes128Gcm12DecrypterTest : public QuicTest {};
 
 TEST_F(Aes128Gcm12DecrypterTest, Decrypt) {
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(test_group_array); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(test_group_array); i++) {
     SCOPED_TRACE(i);
     const TestVector* test_vectors = test_group_array[i];
     const TestGroupInfo& test_info = test_group_info[i];
diff --git a/quic/core/crypto/aes_128_gcm_12_encrypter_test.cc b/quic/core/crypto/aes_128_gcm_12_encrypter_test.cc
index 9e395cc..1216f95 100644
--- a/quic/core/crypto/aes_128_gcm_12_encrypter_test.cc
+++ b/quic/core/crypto/aes_128_gcm_12_encrypter_test.cc
@@ -7,11 +7,11 @@
 #include <memory>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
@@ -177,7 +177,7 @@
 class Aes128Gcm12EncrypterTest : public QuicTest {};
 
 TEST_F(Aes128Gcm12EncrypterTest, Encrypt) {
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(test_group_array); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(test_group_array); i++) {
     SCOPED_TRACE(i);
     const TestVector* test_vectors = test_group_array[i];
     const TestGroupInfo& test_info = test_group_info[i];
diff --git a/quic/core/crypto/aes_128_gcm_decrypter_test.cc b/quic/core/crypto/aes_128_gcm_decrypter_test.cc
index 33c3781..7625f7a 100644
--- a/quic/core/crypto/aes_128_gcm_decrypter_test.cc
+++ b/quic/core/crypto/aes_128_gcm_decrypter_test.cc
@@ -7,10 +7,10 @@
 #include <memory>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
@@ -219,7 +219,7 @@
 class Aes128GcmDecrypterTest : public QuicTest {};
 
 TEST_F(Aes128GcmDecrypterTest, Decrypt) {
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(test_group_array); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(test_group_array); i++) {
     SCOPED_TRACE(i);
     const TestVector* test_vectors = test_group_array[i];
     const TestGroupInfo& test_info = test_group_info[i];
diff --git a/quic/core/crypto/aes_128_gcm_encrypter_test.cc b/quic/core/crypto/aes_128_gcm_encrypter_test.cc
index b163689..462c2e4 100644
--- a/quic/core/crypto/aes_128_gcm_encrypter_test.cc
+++ b/quic/core/crypto/aes_128_gcm_encrypter_test.cc
@@ -7,10 +7,10 @@
 #include <memory>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
@@ -176,7 +176,7 @@
 class Aes128GcmEncrypterTest : public QuicTest {};
 
 TEST_F(Aes128GcmEncrypterTest, Encrypt) {
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(test_group_array); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(test_group_array); i++) {
     SCOPED_TRACE(i);
     const TestVector* test_vectors = test_group_array[i];
     const TestGroupInfo& test_info = test_group_info[i];
diff --git a/quic/core/crypto/aes_256_gcm_decrypter_test.cc b/quic/core/crypto/aes_256_gcm_decrypter_test.cc
index e244f4a..ef7bb95 100644
--- a/quic/core/crypto/aes_256_gcm_decrypter_test.cc
+++ b/quic/core/crypto/aes_256_gcm_decrypter_test.cc
@@ -7,11 +7,11 @@
 #include <memory>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
@@ -224,7 +224,7 @@
 class Aes256GcmDecrypterTest : public QuicTest {};
 
 TEST_F(Aes256GcmDecrypterTest, Decrypt) {
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(test_group_array); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(test_group_array); i++) {
     SCOPED_TRACE(i);
     const TestVector* test_vectors = test_group_array[i];
     const TestGroupInfo& test_info = test_group_info[i];
diff --git a/quic/core/crypto/aes_256_gcm_encrypter_test.cc b/quic/core/crypto/aes_256_gcm_encrypter_test.cc
index bdebfca..c6bb294 100644
--- a/quic/core/crypto/aes_256_gcm_encrypter_test.cc
+++ b/quic/core/crypto/aes_256_gcm_encrypter_test.cc
@@ -7,11 +7,11 @@
 #include <memory>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
@@ -184,7 +184,7 @@
 class Aes256GcmEncrypterTest : public QuicTest {};
 
 TEST_F(Aes256GcmEncrypterTest, Encrypt) {
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(test_group_array); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(test_group_array); i++) {
     SCOPED_TRACE(i);
     const TestVector* test_vectors = test_group_array[i];
     const TestGroupInfo& test_info = test_group_info[i];
diff --git a/quic/core/crypto/chacha20_poly1305_encrypter_test.cc b/quic/core/crypto/chacha20_poly1305_encrypter_test.cc
index 3672f75..ec6b887 100644
--- a/quic/core/crypto/chacha20_poly1305_encrypter_test.cc
+++ b/quic/core/crypto/chacha20_poly1305_encrypter_test.cc
@@ -7,12 +7,12 @@
 #include <memory>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/crypto/chacha20_poly1305_decrypter.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
@@ -105,12 +105,12 @@
   size_t len;
   ASSERT_TRUE(encrypter.EncryptPacket(packet_number, associated_data, plaintext,
                                       encrypted, &len,
-                                      QUICHE_ARRAYSIZE(encrypted)));
+                                      ABSL_ARRAYSIZE(encrypted)));
   absl::string_view ciphertext(encrypted, len);
   char decrypted[1024];
   ASSERT_TRUE(decrypter.DecryptPacket(packet_number, associated_data,
                                       ciphertext, decrypted, &len,
-                                      QUICHE_ARRAYSIZE(decrypted)));
+                                      ABSL_ARRAYSIZE(decrypted)));
 }
 
 TEST_F(ChaCha20Poly1305EncrypterTest, Encrypt) {
diff --git a/quic/core/crypto/chacha20_poly1305_tls_encrypter_test.cc b/quic/core/crypto/chacha20_poly1305_tls_encrypter_test.cc
index 9191768..276a413 100644
--- a/quic/core/crypto/chacha20_poly1305_tls_encrypter_test.cc
+++ b/quic/core/crypto/chacha20_poly1305_tls_encrypter_test.cc
@@ -7,12 +7,12 @@
 #include <memory>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/crypto/chacha20_poly1305_tls_decrypter.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
@@ -105,12 +105,12 @@
   size_t len;
   ASSERT_TRUE(encrypter.EncryptPacket(packet_number, associated_data, plaintext,
                                       encrypted, &len,
-                                      QUICHE_ARRAYSIZE(encrypted)));
+                                      ABSL_ARRAYSIZE(encrypted)));
   absl::string_view ciphertext(encrypted, len);
   char decrypted[1024];
   ASSERT_TRUE(decrypter.DecryptPacket(packet_number, associated_data,
                                       ciphertext, decrypted, &len,
-                                      QUICHE_ARRAYSIZE(decrypted)));
+                                      ABSL_ARRAYSIZE(decrypted)));
 }
 
 TEST_F(ChaCha20Poly1305TlsEncrypterTest, Encrypt) {
diff --git a/quic/core/crypto/chacha_base_decrypter.cc b/quic/core/crypto/chacha_base_decrypter.cc
index e3da36f..1fccc5d 100644
--- a/quic/core/crypto/chacha_base_decrypter.cc
+++ b/quic/core/crypto/chacha_base_decrypter.cc
@@ -6,11 +6,11 @@
 
 #include <cstdint>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/chacha.h"
 #include "net/third_party/quiche/src/quic/core/quic_data_reader.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/quiche_endian.h"
 
 namespace quic {
@@ -35,9 +35,9 @@
   QuicDataReader(sample.data(), 4, quiche::HOST_BYTE_ORDER)
       .ReadUInt32(&counter);
   const uint8_t zeroes[] = {0, 0, 0, 0, 0};
-  std::string out(QUICHE_ARRAYSIZE(zeroes), 0);
+  std::string out(ABSL_ARRAYSIZE(zeroes), 0);
   CRYPTO_chacha_20(reinterpret_cast<uint8_t*>(const_cast<char*>(out.data())),
-                   zeroes, QUICHE_ARRAYSIZE(zeroes), pne_key_, nonce, counter);
+                   zeroes, ABSL_ARRAYSIZE(zeroes), pne_key_, nonce, counter);
   return out;
 }
 
diff --git a/quic/core/crypto/chacha_base_encrypter.cc b/quic/core/crypto/chacha_base_encrypter.cc
index 80b45cc..0b9d344 100644
--- a/quic/core/crypto/chacha_base_encrypter.cc
+++ b/quic/core/crypto/chacha_base_encrypter.cc
@@ -4,11 +4,11 @@
 
 #include "net/third_party/quiche/src/quic/core/crypto/chacha_base_encrypter.h"
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/chacha.h"
 #include "net/third_party/quiche/src/quic/core/quic_data_reader.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/quiche_endian.h"
 
 namespace quic {
@@ -32,9 +32,9 @@
   QuicDataReader(sample.data(), 4, quiche::HOST_BYTE_ORDER)
       .ReadUInt32(&counter);
   const uint8_t zeroes[] = {0, 0, 0, 0, 0};
-  std::string out(QUICHE_ARRAYSIZE(zeroes), 0);
+  std::string out(ABSL_ARRAYSIZE(zeroes), 0);
   CRYPTO_chacha_20(reinterpret_cast<uint8_t*>(const_cast<char*>(out.data())),
-                   zeroes, QUICHE_ARRAYSIZE(zeroes), pne_key_, nonce, counter);
+                   zeroes, ABSL_ARRAYSIZE(zeroes), pne_key_, nonce, counter);
   return out;
 }
 
diff --git a/quic/core/crypto/common_cert_set.cc b/quic/core/crypto/common_cert_set.cc
index 7894037..fa66c72 100644
--- a/quic/core/crypto/common_cert_set.cc
+++ b/quic/core/crypto/common_cert_set.cc
@@ -6,9 +6,9 @@
 
 #include <cstddef>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 
 namespace quic {
 
@@ -81,11 +81,11 @@
   // CommonCertSets interface.
   absl::string_view GetCommonHashes() const override {
     return absl::string_view(reinterpret_cast<const char*>(kSetHashes),
-                             sizeof(uint64_t) * QUICHE_ARRAYSIZE(kSetHashes));
+                             sizeof(uint64_t) * ABSL_ARRAYSIZE(kSetHashes));
   }
 
   absl::string_view GetCert(uint64_t hash, uint32_t index) const override {
-    for (size_t i = 0; i < QUICHE_ARRAYSIZE(kSets); i++) {
+    for (size_t i = 0; i < ABSL_ARRAYSIZE(kSets); i++) {
       if (kSets[i].hash == hash) {
         if (index < kSets[i].num_certs) {
           return absl::string_view(
@@ -112,7 +112,7 @@
       memcpy(&hash, common_set_hashes.data() + i * sizeof(uint64_t),
              sizeof(uint64_t));
 
-      for (size_t j = 0; j < QUICHE_ARRAYSIZE(kSets); j++) {
+      for (size_t j = 0; j < ABSL_ARRAYSIZE(kSets); j++) {
         if (kSets[j].hash != hash) {
           continue;
         }
diff --git a/quic/core/crypto/common_cert_set_empty.cc b/quic/core/crypto/common_cert_set_empty.cc
index 603624d..8c9a67b 100644
--- a/quic/core/crypto/common_cert_set_empty.cc
+++ b/quic/core/crypto/common_cert_set_empty.cc
@@ -6,9 +6,9 @@
 
 #include <cstddef>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 
 namespace quic {
 
diff --git a/quic/core/crypto/crypto_framer_test.cc b/quic/core/crypto/crypto_framer_test.cc
index c1f558f..033e624 100644
--- a/quic/core/crypto/crypto_framer_test.cc
+++ b/quic/core/crypto/crypto_framer_test.cc
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/crypto/crypto_handshake.h"
 #include "net/third_party/quiche/src/quic/core/crypto/crypto_protocol.h"
@@ -16,7 +17,6 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/crypto_test_utils.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
 namespace quic {
@@ -85,7 +85,7 @@
   ASSERT_TRUE(data != nullptr);
   quiche::test::CompareCharArraysWithHexError(
       "constructed packet", data->data(), data->length(), AsChars(packet),
-      QUICHE_ARRAYSIZE(packet));
+      ABSL_ARRAYSIZE(packet));
 }
 
 TEST(CryptoFramerTest, ConstructHandshakeMessageWithTwoKeys) {
@@ -121,7 +121,7 @@
 
   quiche::test::CompareCharArraysWithHexError(
       "constructed packet", data->data(), data->length(), AsChars(packet),
-      QUICHE_ARRAYSIZE(packet));
+      ABSL_ARRAYSIZE(packet));
 }
 
 TEST(CryptoFramerTest, ConstructHandshakeMessageZeroLength) {
@@ -148,7 +148,7 @@
 
   quiche::test::CompareCharArraysWithHexError(
       "constructed packet", data->data(), data->length(), AsChars(packet),
-      QUICHE_ARRAYSIZE(packet));
+      ABSL_ARRAYSIZE(packet));
 }
 
 TEST(CryptoFramerTest, ConstructHandshakeMessageTooManyEntries) {
@@ -198,7 +198,7 @@
 
   quiche::test::CompareCharArraysWithHexError(
       "constructed packet", data->data(), data->length(), AsChars(packet),
-      QUICHE_ARRAYSIZE(packet));
+      ABSL_ARRAYSIZE(packet));
 }
 
 TEST(CryptoFramerTest, ConstructHandshakeMessageMinimumSizePadLast) {
@@ -234,7 +234,7 @@
 
   quiche::test::CompareCharArraysWithHexError(
       "constructed packet", data->data(), data->length(), AsChars(packet),
-      QUICHE_ARRAYSIZE(packet));
+      ABSL_ARRAYSIZE(packet));
 }
 
 TEST(CryptoFramerTest, ProcessInput) {
@@ -264,7 +264,7 @@
   };
 
   EXPECT_TRUE(framer.ProcessInput(
-      absl::string_view(AsChars(input), QUICHE_ARRAYSIZE(input))));
+      absl::string_view(AsChars(input), ABSL_ARRAYSIZE(input))));
   EXPECT_EQ(0u, framer.InputBytesRemaining());
   EXPECT_EQ(0, visitor.error_count_);
   ASSERT_EQ(1u, visitor.messages_.size());
@@ -308,7 +308,7 @@
   };
 
   EXPECT_TRUE(framer.ProcessInput(
-      absl::string_view(AsChars(input), QUICHE_ARRAYSIZE(input))));
+      absl::string_view(AsChars(input), ABSL_ARRAYSIZE(input))));
   EXPECT_EQ(0u, framer.InputBytesRemaining());
   EXPECT_EQ(0, visitor.error_count_);
   ASSERT_EQ(1u, visitor.messages_.size());
@@ -346,7 +346,7 @@
       'g', 'h', 'i', 'j', 'k',
   };
 
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(input); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(input); i++) {
     EXPECT_TRUE(framer.ProcessInput(absl::string_view(AsChars(input) + i, 1)));
   }
   EXPECT_EQ(0u, framer.InputBytesRemaining());
@@ -381,7 +381,7 @@
   };
 
   EXPECT_FALSE(framer.ProcessInput(
-      absl::string_view(AsChars(input), QUICHE_ARRAYSIZE(input))));
+      absl::string_view(AsChars(input), ABSL_ARRAYSIZE(input))));
   EXPECT_THAT(framer.error(), IsError(QUIC_CRYPTO_TAGS_OUT_OF_ORDER));
   EXPECT_EQ(1, visitor.error_count_);
 }
@@ -409,7 +409,7 @@
   };
 
   EXPECT_FALSE(framer.ProcessInput(
-      absl::string_view(AsChars(input), QUICHE_ARRAYSIZE(input))));
+      absl::string_view(AsChars(input), ABSL_ARRAYSIZE(input))));
   EXPECT_THAT(framer.error(), IsError(QUIC_CRYPTO_TAGS_OUT_OF_ORDER));
   EXPECT_EQ(1, visitor.error_count_);
 }
@@ -429,7 +429,7 @@
   };
 
   EXPECT_FALSE(framer.ProcessInput(
-      absl::string_view(AsChars(input), QUICHE_ARRAYSIZE(input))));
+      absl::string_view(AsChars(input), ABSL_ARRAYSIZE(input))));
   EXPECT_THAT(framer.error(), IsError(QUIC_CRYPTO_TOO_MANY_ENTRIES));
   EXPECT_EQ(1, visitor.error_count_);
 }
@@ -457,7 +457,7 @@
   };
 
   EXPECT_TRUE(framer.ProcessInput(
-      absl::string_view(AsChars(input), QUICHE_ARRAYSIZE(input))));
+      absl::string_view(AsChars(input), ABSL_ARRAYSIZE(input))));
   EXPECT_EQ(0, visitor.error_count_);
 }
 
diff --git a/quic/core/crypto/crypto_server_test.cc b/quic/core/crypto/crypto_server_test.cc
index acf1817..c68fcc2 100644
--- a/quic/core/crypto/crypto_server_test.cc
+++ b/quic/core/crypto/crypto_server_test.cc
@@ -10,6 +10,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/sha.h"
 #include "net/third_party/quiche/src/quic/core/crypto/cert_compressor.h"
@@ -30,7 +31,6 @@
 #include "net/third_party/quiche/src/quic/test_tools/mock_random.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_crypto_server_config_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/quiche_endian.h"
 
@@ -154,7 +154,7 @@
     CheckRejectTag();
     const HandshakeFailureReason kRejectReasons[] = {
         SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-    CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+    CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 
     absl::string_view srct;
     ASSERT_TRUE(out_.GetStringPiece(kSourceAddressTokenTag, &srct));
@@ -386,7 +386,7 @@
   };
   // clang-format on
 
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(kBadSNIs); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(kBadSNIs); i++) {
     CryptoHandshakeMessage msg =
         crypto_test_utils::CreateCHLO({{"PDMD", "X509"},
                                        {"SNI", kBadSNIs[i]},
@@ -395,7 +395,7 @@
     ShouldFailMentioning("SNI", msg);
     const HandshakeFailureReason kRejectReasons[] = {
         SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-    CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+    CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
   }
 }
 
@@ -421,7 +421,7 @@
   EXPECT_NE(0u, proof.size());
   const HandshakeFailureReason kRejectReasons[] = {
       SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
   EXPECT_LT(0u, cert_sct.size());
 }
 
@@ -448,7 +448,7 @@
   EXPECT_FALSE(out_.GetStringPiece(kCertificateSCTTag, &cert_sct));
   const HandshakeFailureReason kRejectReasons[] = {
       SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 TEST_P(CryptoServerTest, RejectNotTooLarge) {
@@ -475,7 +475,7 @@
   EXPECT_TRUE(out_.GetStringPiece(kCertificateSCTTag, &cert_sct));
   const HandshakeFailureReason kRejectReasons[] = {
       SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 TEST_P(CryptoServerTest, RejectTooLargeButValidSTK) {
@@ -504,7 +504,7 @@
   EXPECT_NE(0u, proof.size());
   const HandshakeFailureReason kRejectReasons[] = {
       SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 TEST_P(CryptoServerTest, BadSourceAddressToken) {
@@ -518,7 +518,7 @@
   };
   // clang-format on
 
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(kBadSourceAddressTokens); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(kBadSourceAddressTokens); i++) {
     CryptoHandshakeMessage msg =
         crypto_test_utils::CreateCHLO({{"PDMD", "X509"},
                                        {"STK", kBadSourceAddressTokens[i]},
@@ -527,7 +527,7 @@
     ShouldSucceed(msg);
     const HandshakeFailureReason kRejectReasons[] = {
         SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-    CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+    CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
   }
 }
 
@@ -540,7 +540,7 @@
   };
   // clang-format on
 
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(kBadNonces); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(kBadNonces); i++) {
     // Invalid nonces should be ignored, in an inchoate CHLO.
 
     CryptoHandshakeMessage msg =
@@ -552,7 +552,7 @@
     ShouldSucceed(msg);
     const HandshakeFailureReason kRejectReasons[] = {
         SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-    CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+    CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 
     // Invalid nonces should result in CLIENT_NONCE_INVALID_FAILURE.
     CryptoHandshakeMessage msg1 =
@@ -573,7 +573,7 @@
     CheckRejectTag();
     const HandshakeFailureReason kRejectReasons1[] = {
         CLIENT_NONCE_INVALID_FAILURE};
-    CheckRejectReasons(kRejectReasons1, QUICHE_ARRAYSIZE(kRejectReasons1));
+    CheckRejectReasons(kRejectReasons1, ABSL_ARRAYSIZE(kRejectReasons1));
   }
 }
 
@@ -587,7 +587,7 @@
   ShouldSucceed(msg);
   const HandshakeFailureReason kRejectReasons[] = {
       SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 
   CryptoHandshakeMessage msg1 =
       crypto_test_utils::CreateCHLO({{"PDMD", "X509"},
@@ -604,7 +604,7 @@
   CheckRejectTag();
   const HandshakeFailureReason kRejectReasons1[] = {
       SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-  CheckRejectReasons(kRejectReasons1, QUICHE_ARRAYSIZE(kRejectReasons1));
+  CheckRejectReasons(kRejectReasons1, ABSL_ARRAYSIZE(kRejectReasons1));
 }
 
 TEST_P(CryptoServerTest, DowngradeAttack) {
@@ -623,7 +623,7 @@
   ShouldFailMentioning("Downgrade", msg);
   const HandshakeFailureReason kRejectReasons[] = {
       SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 TEST_P(CryptoServerTest, CorruptServerConfig) {
@@ -643,7 +643,7 @@
   CheckRejectTag();
   const HandshakeFailureReason kRejectReasons[] = {
       SERVER_CONFIG_UNKNOWN_CONFIG_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 TEST_P(CryptoServerTest, CorruptSourceAddressToken) {
@@ -664,7 +664,7 @@
   CheckRejectTag();
   const HandshakeFailureReason kRejectReasons[] = {
       SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 TEST_P(CryptoServerTest, CorruptSourceAddressTokenIsStillAccepted) {
@@ -705,7 +705,7 @@
   CheckRejectTag();
   const HandshakeFailureReason kRejectReasons[] = {
       SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, CLIENT_NONCE_INVALID_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 TEST_P(CryptoServerTest, CorruptMultipleTags) {
@@ -729,7 +729,7 @@
 
   const HandshakeFailureReason kRejectReasons[] = {
       SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, CLIENT_NONCE_INVALID_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 TEST_P(CryptoServerTest, NoServerNonce) {
@@ -778,7 +778,7 @@
   CheckRejectTag();
   const HandshakeFailureReason kRejectReasons[] = {
       SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 
   absl::string_view cert, proof, scfg_str;
   EXPECT_TRUE(out_.GetStringPiece(kCertificateTag, &cert));
@@ -840,7 +840,7 @@
   const HandshakeFailureReason kRejectReasons[] = {
       INVALID_EXPECTED_LEAF_CERTIFICATE};
 
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 TEST_P(CryptoServerTest, ValidXlct) {
@@ -1064,7 +1064,7 @@
 
   const HandshakeFailureReason kRejectReasons[] = {
       SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
-  CheckRejectReasons(kRejectReasons, QUICHE_ARRAYSIZE(kRejectReasons));
+  CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
 }
 
 class CryptoServerTestOldVersion : public CryptoServerTest {
diff --git a/quic/core/crypto/crypto_utils.cc b/quic/core/crypto/crypto_utils.cc
index 014e920..8445a6c 100644
--- a/quic/core/crypto/crypto_utils.cc
+++ b/quic/core/crypto/crypto_utils.cc
@@ -8,6 +8,7 @@
 #include <string>
 #include <utility>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/bytestring.h"
 #include "third_party/boringssl/src/include/openssl/hkdf.h"
@@ -33,7 +34,6 @@
 #include "net/third_party/quiche/src/quic/core/quic_versions.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/quiche_endian.h"
 
@@ -74,7 +74,7 @@
       !CBB_add_u8_length_prefixed(quic_hkdf_label.get(), &inner_label) ||
       !CBB_add_bytes(&inner_label,
                      reinterpret_cast<const uint8_t*>(label_prefix),
-                     QUICHE_ARRAYSIZE(label_prefix) - 1) ||
+                     ABSL_ARRAYSIZE(label_prefix) - 1) ||
       !CBB_add_bytes(&inner_label,
                      reinterpret_cast<const uint8_t*>(label.data()),
                      label.size()) ||
@@ -172,26 +172,26 @@
   static_assert(SupportedVersions().size() == 7u,
                 "Supported versions out of sync with initial encryption salts");
   if (version == ParsedQuicVersion::Draft29()) {
-    *out_len = QUICHE_ARRAYSIZE(kDraft29InitialSalt);
+    *out_len = ABSL_ARRAYSIZE(kDraft29InitialSalt);
     return kDraft29InitialSalt;
   } else if (version == ParsedQuicVersion::Draft27()) {
-    *out_len = QUICHE_ARRAYSIZE(kDraft27InitialSalt);
+    *out_len = ABSL_ARRAYSIZE(kDraft27InitialSalt);
     return kDraft27InitialSalt;
   } else if (version == ParsedQuicVersion::T051()) {
-    *out_len = QUICHE_ARRAYSIZE(kT051Salt);
+    *out_len = ABSL_ARRAYSIZE(kT051Salt);
     return kT051Salt;
   } else if (version == ParsedQuicVersion::T050()) {
-    *out_len = QUICHE_ARRAYSIZE(kT050Salt);
+    *out_len = ABSL_ARRAYSIZE(kT050Salt);
     return kT050Salt;
   } else if (version == ParsedQuicVersion::Q050()) {
-    *out_len = QUICHE_ARRAYSIZE(kQ050Salt);
+    *out_len = ABSL_ARRAYSIZE(kQ050Salt);
     return kQ050Salt;
   } else if (version == ParsedQuicVersion::ReservedForNegotiation()) {
-    *out_len = QUICHE_ARRAYSIZE(kReservedForNegotiationSalt);
+    *out_len = ABSL_ARRAYSIZE(kReservedForNegotiationSalt);
     return kReservedForNegotiationSalt;
   }
   QUIC_BUG << "No initial obfuscation salt for version " << version;
-  *out_len = QUICHE_ARRAYSIZE(kDraft27InitialSalt);
+  *out_len = ABSL_ARRAYSIZE(kDraft27InitialSalt);
   return kDraft27InitialSalt;
 }
 
@@ -246,43 +246,43 @@
   } else if (version == ParsedQuicVersion::Draft29()) {
     *key = absl::string_view(
         reinterpret_cast<const char*>(kDraft29RetryIntegrityKey),
-        QUICHE_ARRAYSIZE(kDraft29RetryIntegrityKey));
+        ABSL_ARRAYSIZE(kDraft29RetryIntegrityKey));
     *nonce = absl::string_view(
         reinterpret_cast<const char*>(kDraft29RetryIntegrityNonce),
-        QUICHE_ARRAYSIZE(kDraft29RetryIntegrityNonce));
+        ABSL_ARRAYSIZE(kDraft29RetryIntegrityNonce));
     return true;
   } else if (version == ParsedQuicVersion::Draft27()) {
     *key = absl::string_view(
         reinterpret_cast<const char*>(kDraft27RetryIntegrityKey),
-        QUICHE_ARRAYSIZE(kDraft27RetryIntegrityKey));
+        ABSL_ARRAYSIZE(kDraft27RetryIntegrityKey));
     *nonce = absl::string_view(
         reinterpret_cast<const char*>(kDraft27RetryIntegrityNonce),
-        QUICHE_ARRAYSIZE(kDraft27RetryIntegrityNonce));
+        ABSL_ARRAYSIZE(kDraft27RetryIntegrityNonce));
     return true;
   } else if (version == ParsedQuicVersion::T051()) {
     *key =
         absl::string_view(reinterpret_cast<const char*>(kT051RetryIntegrityKey),
-                          QUICHE_ARRAYSIZE(kT051RetryIntegrityKey));
+                          ABSL_ARRAYSIZE(kT051RetryIntegrityKey));
     *nonce = absl::string_view(
         reinterpret_cast<const char*>(kT051RetryIntegrityNonce),
-        QUICHE_ARRAYSIZE(kT051RetryIntegrityNonce));
+        ABSL_ARRAYSIZE(kT051RetryIntegrityNonce));
     return true;
   } else if (version == ParsedQuicVersion::T050()) {
     *key =
         absl::string_view(reinterpret_cast<const char*>(kT050RetryIntegrityKey),
-                          QUICHE_ARRAYSIZE(kT050RetryIntegrityKey));
+                          ABSL_ARRAYSIZE(kT050RetryIntegrityKey));
     *nonce = absl::string_view(
         reinterpret_cast<const char*>(kT050RetryIntegrityNonce),
-        QUICHE_ARRAYSIZE(kT050RetryIntegrityNonce));
+        ABSL_ARRAYSIZE(kT050RetryIntegrityNonce));
     return true;
   } else if (version == ParsedQuicVersion::ReservedForNegotiation()) {
     *key = absl::string_view(
         reinterpret_cast<const char*>(kReservedForNegotiationRetryIntegrityKey),
-        QUICHE_ARRAYSIZE(kReservedForNegotiationRetryIntegrityKey));
+        ABSL_ARRAYSIZE(kReservedForNegotiationRetryIntegrityKey));
     *nonce = absl::string_view(
         reinterpret_cast<const char*>(
             kReservedForNegotiationRetryIntegrityNonce),
-        QUICHE_ARRAYSIZE(kReservedForNegotiationRetryIntegrityNonce));
+        ABSL_ARRAYSIZE(kReservedForNegotiationRetryIntegrityNonce));
     return true;
   }
   QUIC_BUG << "Attempted to get retry integrity keys for version " << version;
@@ -353,12 +353,12 @@
     absl::string_view retry_without_tag,
     absl::string_view integrity_tag) {
   unsigned char computed_integrity_tag[kRetryIntegrityTagLength];
-  if (integrity_tag.length() != QUICHE_ARRAYSIZE(computed_integrity_tag)) {
+  if (integrity_tag.length() != ABSL_ARRAYSIZE(computed_integrity_tag)) {
     QUIC_BUG << "Invalid retry integrity tag length " << integrity_tag.length();
     return false;
   }
   char retry_pseudo_packet[kMaxIncomingPacketSize + 256];
-  QuicDataWriter writer(QUICHE_ARRAYSIZE(retry_pseudo_packet),
+  QuicDataWriter writer(ABSL_ARRAYSIZE(retry_pseudo_packet),
                         retry_pseudo_packet);
   if (!writer.WriteLengthPrefixedConnectionId(original_connection_id)) {
     QUIC_BUG << "Failed to write original connection ID in retry pseudo packet";
@@ -384,7 +384,7 @@
     return false;
   }
   if (CRYPTO_memcmp(computed_integrity_tag, integrity_tag.data(),
-                    QUICHE_ARRAYSIZE(computed_integrity_tag)) != 0) {
+                    ABSL_ARRAYSIZE(computed_integrity_tag)) != 0) {
     QUIC_DLOG(ERROR) << "Failed to validate retry integrity tag";
     return false;
   }
diff --git a/quic/core/crypto/crypto_utils_test.cc b/quic/core/crypto/crypto_utils_test.cc
index edf8051..1c67cc8 100644
--- a/quic/core/crypto/crypto_utils_test.cc
+++ b/quic/core/crypto/crypto_utils_test.cc
@@ -6,10 +6,10 @@
 
 #include <string>
 
+#include "absl/base/macros.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
@@ -50,7 +50,7 @@
        "c9a46ed0757bd1812f1f21b4d41e62125fec8364a21db7"},
   };
 
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(test_vector); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(test_vector); i++) {
     // Decode the test vector.
     std::string subkey_secret =
         quiche::QuicheTextUtils::HexDecode(test_vector[i].subkey_secret);
diff --git a/quic/core/crypto/null_decrypter_test.cc b/quic/core/crypto/null_decrypter_test.cc
index 63b715b..b8b7268 100644
--- a/quic/core/crypto/null_decrypter_test.cc
+++ b/quic/core/crypto/null_decrypter_test.cc
@@ -3,9 +3,9 @@
 // found in the LICENSE file.
 
 #include "net/third_party/quiche/src/quic/core/crypto/null_decrypter.h"
+#include "absl/base/macros.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 
 namespace quic {
 namespace test {
@@ -38,7 +38,7 @@
       '!',
   };
   const char* data = reinterpret_cast<const char*>(expected);
-  size_t len = QUICHE_ARRAYSIZE(expected);
+  size_t len = ABSL_ARRAYSIZE(expected);
   NullDecrypter decrypter(Perspective::IS_SERVER);
   char buffer[256];
   size_t length = 0;
@@ -74,7 +74,7 @@
       '!',
   };
   const char* data = reinterpret_cast<const char*>(expected);
-  size_t len = QUICHE_ARRAYSIZE(expected);
+  size_t len = ABSL_ARRAYSIZE(expected);
   NullDecrypter decrypter(Perspective::IS_CLIENT);
   char buffer[256];
   size_t length = 0;
@@ -110,7 +110,7 @@
       '!',
   };
   const char* data = reinterpret_cast<const char*>(expected);
-  size_t len = QUICHE_ARRAYSIZE(expected);
+  size_t len = ABSL_ARRAYSIZE(expected);
   NullDecrypter decrypter(Perspective::IS_CLIENT);
   char buffer[256];
   size_t length = 0;
@@ -124,7 +124,7 @@
       0x46, 0x11, 0xea, 0x5f, 0xcf, 0x1d, 0x66, 0x5b, 0xba, 0xf0, 0xbc,
   };
   const char* data = reinterpret_cast<const char*>(expected);
-  size_t len = QUICHE_ARRAYSIZE(expected);
+  size_t len = ABSL_ARRAYSIZE(expected);
   NullDecrypter decrypter(Perspective::IS_CLIENT);
   char buffer[256];
   size_t length = 0;
diff --git a/quic/core/crypto/null_encrypter_test.cc b/quic/core/crypto/null_encrypter_test.cc
index c9b00d4..1bc5932 100644
--- a/quic/core/crypto/null_encrypter_test.cc
+++ b/quic/core/crypto/null_encrypter_test.cc
@@ -3,9 +3,9 @@
 // found in the LICENSE file.
 
 #include "net/third_party/quiche/src/quic/core/crypto/null_encrypter.h"
+#include "absl/base/macros.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/test_tools/quiche_test_utils.h"
 
 namespace quic {
@@ -45,7 +45,7 @@
                                       &encrypted_len, 256));
   quiche::test::CompareCharArraysWithHexError(
       "encrypted data", encrypted, encrypted_len,
-      reinterpret_cast<const char*>(expected), QUICHE_ARRAYSIZE(expected));
+      reinterpret_cast<const char*>(expected), ABSL_ARRAYSIZE(expected));
 }
 
 TEST_F(NullEncrypterTest, EncryptServer) {
@@ -80,7 +80,7 @@
                                       &encrypted_len, 256));
   quiche::test::CompareCharArraysWithHexError(
       "encrypted data", encrypted, encrypted_len,
-      reinterpret_cast<const char*>(expected), QUICHE_ARRAYSIZE(expected));
+      reinterpret_cast<const char*>(expected), ABSL_ARRAYSIZE(expected));
 }
 
 TEST_F(NullEncrypterTest, GetMaxPlaintextSize) {
diff --git a/quic/core/crypto/quic_crypto_client_config.cc b/quic/core/crypto/quic_crypto_client_config.cc
index a74e16f..a7e4f49 100644
--- a/quic/core/crypto/quic_crypto_client_config.cc
+++ b/quic/core/crypto/quic_crypto_client_config.cc
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/ssl.h"
 #include "net/third_party/quiche/src/quic/core/crypto/cert_compressor.h"
@@ -32,7 +33,6 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_map_util.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_ptr_util.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 
 namespace quic {
@@ -454,9 +454,9 @@
   }
 
   char proof_nonce[32];
-  rand->RandBytes(proof_nonce, QUICHE_ARRAYSIZE(proof_nonce));
+  rand->RandBytes(proof_nonce, ABSL_ARRAYSIZE(proof_nonce));
   out->SetStringPiece(
-      kNONP, absl::string_view(proof_nonce, QUICHE_ARRAYSIZE(proof_nonce)));
+      kNONP, absl::string_view(proof_nonce, ABSL_ARRAYSIZE(proof_nonce)));
 
   out->SetVector(kPDMD, QuicTagVector{kX509});
 
diff --git a/quic/core/crypto/quic_hkdf_test.cc b/quic/core/crypto/quic_hkdf_test.cc
index 8b74f63..bee3540 100644
--- a/quic/core/crypto/quic_hkdf_test.cc
+++ b/quic/core/crypto/quic_hkdf_test.cc
@@ -6,8 +6,8 @@
 
 #include <string>
 
+#include "absl/base/macros.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 
 namespace quic {
@@ -67,7 +67,7 @@
 class QuicHKDFTest : public QuicTest {};
 
 TEST_F(QuicHKDFTest, HKDF) {
-  for (size_t i = 0; i < QUICHE_ARRAYSIZE(kHKDFInputs); i++) {
+  for (size_t i = 0; i < ABSL_ARRAYSIZE(kHKDFInputs); i++) {
     const HKDFInput& test(kHKDFInputs[i]);
     SCOPED_TRACE(i);
 
diff --git a/quic/core/crypto/transport_parameters_test.cc b/quic/core/crypto/transport_parameters_test.cc
index 65ade06..ab8360e 100644
--- a/quic/core/crypto/transport_parameters_test.cc
+++ b/quic/core/crypto/transport_parameters_test.cc
@@ -7,6 +7,7 @@
 #include <cstring>
 #include <utility>
 
+#include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/crypto/crypto_protocol.h"
 #include "net/third_party/quiche/src/quic/core/quic_connection_id.h"
@@ -17,7 +18,6 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_ip_address.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
 
 namespace quic {
 namespace test {
@@ -627,10 +627,10 @@
   // clang-format on
   const uint8_t* client_params =
       reinterpret_cast<const uint8_t*>(kClientParams);
-  size_t client_params_length = QUICHE_ARRAYSIZE(kClientParams);
+  size_t client_params_length = ABSL_ARRAYSIZE(kClientParams);
   if (!version_.HasVarIntTransportParams()) {
     client_params = reinterpret_cast<const uint8_t*>(kClientParamsOld);
-    client_params_length = QUICHE_ARRAYSIZE(kClientParamsOld);
+    client_params_length = ABSL_ARRAYSIZE(kClientParamsOld);
   }
   TransportParameters new_params;
   std::string error_details;
@@ -724,11 +724,11 @@
   // clang-format on
   const uint8_t* client_params =
       reinterpret_cast<const uint8_t*>(kClientParamsWithFullToken);
-  size_t client_params_length = QUICHE_ARRAYSIZE(kClientParamsWithFullToken);
+  size_t client_params_length = ABSL_ARRAYSIZE(kClientParamsWithFullToken);
   if (!version_.HasVarIntTransportParams()) {
     client_params =
         reinterpret_cast<const uint8_t*>(kClientParamsWithFullTokenOld);
-    client_params_length = QUICHE_ARRAYSIZE(kClientParamsWithFullTokenOld);
+    client_params_length = ABSL_ARRAYSIZE(kClientParamsWithFullTokenOld);
   }
   TransportParameters out_params;
   std::string error_details;
@@ -779,11 +779,11 @@
   // clang-format on
   const uint8_t* client_params =
       reinterpret_cast<const uint8_t*>(kClientParamsWithEmptyToken);
-  size_t client_params_length = QUICHE_ARRAYSIZE(kClientParamsWithEmptyToken);
+  size_t client_params_length = ABSL_ARRAYSIZE(kClientParamsWithEmptyToken);
   if (!version_.HasVarIntTransportParams()) {
     client_params =
         reinterpret_cast<const uint8_t*>(kClientParamsWithEmptyTokenOld);
-    client_params_length = QUICHE_ARRAYSIZE(kClientParamsWithEmptyTokenOld);
+    client_params_length = ABSL_ARRAYSIZE(kClientParamsWithEmptyTokenOld);
   }
   TransportParameters out_params;
   std::string error_details;
@@ -828,10 +828,10 @@
   // clang-format on
   const uint8_t* client_params =
       reinterpret_cast<const uint8_t*>(kClientParamsRepeated);
-  size_t client_params_length = QUICHE_ARRAYSIZE(kClientParamsRepeated);
+  size_t client_params_length = ABSL_ARRAYSIZE(kClientParamsRepeated);
   if (!version_.HasVarIntTransportParams()) {
     client_params = reinterpret_cast<const uint8_t*>(kClientParamsRepeatedOld);
-    client_params_length = QUICHE_ARRAYSIZE(kClientParamsRepeatedOld);
+    client_params_length = ABSL_ARRAYSIZE(kClientParamsRepeatedOld);
   }
   TransportParameters out_params;
   std::string error_details;
@@ -1049,10 +1049,10 @@
   // clang-format on
   const uint8_t* server_params =
       reinterpret_cast<const uint8_t*>(kServerParams);
-  size_t server_params_length = QUICHE_ARRAYSIZE(kServerParams);
+  size_t server_params_length = ABSL_ARRAYSIZE(kServerParams);
   if (!version_.HasVarIntTransportParams()) {
     server_params = reinterpret_cast<const uint8_t*>(kServerParamsOld);
-    server_params_length = QUICHE_ARRAYSIZE(kServerParamsOld);
+    server_params_length = ABSL_ARRAYSIZE(kServerParamsOld);
   }
   TransportParameters new_params;
   std::string error_details;
@@ -1158,10 +1158,10 @@
   // clang-format on
   const uint8_t* server_params =
       reinterpret_cast<const uint8_t*>(kServerParamsRepeated);
-  size_t server_params_length = QUICHE_ARRAYSIZE(kServerParamsRepeated);
+  size_t server_params_length = ABSL_ARRAYSIZE(kServerParamsRepeated);
   if (!version_.HasVarIntTransportParams()) {
     server_params = reinterpret_cast<const uint8_t*>(kServerParamsRepeatedOld);
-    server_params_length = QUICHE_ARRAYSIZE(kServerParamsRepeatedOld);
+    server_params_length = ABSL_ARRAYSIZE(kServerParamsRepeatedOld);
   }
   TransportParameters out_params;
   std::string error_details;
@@ -1207,12 +1207,12 @@
   const uint8_t* server_params =
       reinterpret_cast<const uint8_t*>(kServerParamsEmptyOriginalConnectionId);
   size_t server_params_length =
-      QUICHE_ARRAYSIZE(kServerParamsEmptyOriginalConnectionId);
+      ABSL_ARRAYSIZE(kServerParamsEmptyOriginalConnectionId);
   if (!version_.HasVarIntTransportParams()) {
     server_params = reinterpret_cast<const uint8_t*>(
         kServerParamsEmptyOriginalConnectionIdOld);
     server_params_length =
-        QUICHE_ARRAYSIZE(kServerParamsEmptyOriginalConnectionIdOld);
+        ABSL_ARRAYSIZE(kServerParamsEmptyOriginalConnectionIdOld);
   }
   TransportParameters out_params;
   std::string error_details;
