diff --git a/ash/ambient/managed/screensaver_image_downloader.cc b/ash/ambient/managed/screensaver_image_downloader.cc
index eb46b2c..44f0014c 100644
--- a/ash/ambient/managed/screensaver_image_downloader.cc
+++ b/ash/ambient/managed/screensaver_image_downloader.cc
@@ -116,7 +116,7 @@
 }
 
 std::string GetHashedFileNameForUrl(const std::string& url) {
-  auto hash = base::SHA1HashSpan(base::as_bytes(base::make_span(url)));
+  auto hash = base::SHA1HashSpan(base::as_byte_span(url));
   return base::HexEncode(hash) + kCacheFileExt;
 }
 
diff --git a/ash/ambient/managed/screensaver_image_downloader_unittest.cc b/ash/ambient/managed/screensaver_image_downloader_unittest.cc
index 45429c4..2b3b308 100644
--- a/ash/ambient/managed/screensaver_image_downloader_unittest.cc
+++ b/ash/ambient/managed/screensaver_image_downloader_unittest.cc
@@ -91,7 +91,7 @@
   }
 
   base::FilePath GetExpectedFilePath(const std::string url) {
-    auto hash = base::SHA1HashSpan(base::as_bytes(base::make_span(url)));
+    auto hash = base::SHA1HashSpan(base::as_byte_span(url));
     const std::string encoded_hash = base::HexEncode(hash);
     return test_download_folder_.AppendASCII(encoded_hash + kCacheFileExt);
   }
diff --git a/ash/ambient/managed/screensaver_images_policy_handler_unittest.cc b/ash/ambient/managed/screensaver_images_policy_handler_unittest.cc
index 0c11c3bf..7649f7ea 100644
--- a/ash/ambient/managed/screensaver_images_policy_handler_unittest.cc
+++ b/ash/ambient/managed/screensaver_images_policy_handler_unittest.cc
@@ -266,7 +266,7 @@
   void ResetScreensaverImagesPolicyHandler() { policy_handler_.reset(); }
 
   base::FilePath GetExpectedFilePath(const std::string url) {
-    auto hash = base::SHA1HashSpan(base::as_bytes(base::make_span(url)));
+    auto hash = base::SHA1HashSpan(base::as_byte_span(url));
     return temp_dir_.GetPath()
         .AppendASCII(GetParam().base_directory)
         .AppendASCII(base::HexEncode(hash) + kCacheFileExt);
diff --git a/ash/ambient/resources/ambient_animation_static_resources_impl.cc b/ash/ambient/resources/ambient_animation_static_resources_impl.cc
index ae9bd4e78..7dbdefc 100644
--- a/ash/ambient/resources/ambient_animation_static_resources_impl.cc
+++ b/ash/ambient/resources/ambient_animation_static_resources_impl.cc
@@ -102,7 +102,7 @@
           lottie_json_resource_id);
   DCHECK(!animation_json.empty());
   base::span<const uint8_t> lottie_data_bytes =
-      base::as_bytes(base::make_span(animation_json));
+      base::as_byte_span(animation_json);
   scoped_refptr<cc::SkottieWrapper> animation;
   if (serializable) {
     // Create a serializable SkottieWrapper since the SkottieWrapper may have to
diff --git a/ash/public/cpp/image_util.cc b/ash/public/cpp/image_util.cc
index 06fba05..3d1d262 100644
--- a/ash/public/cpp/image_util.cc
+++ b/ash/public/cpp/image_util.cc
@@ -149,7 +149,7 @@
     return;
   }
   data_decoder::DecodeImageIsolated(
-      base::as_bytes(base::make_span(data)), codec,
+      base::as_byte_span(data), codec,
       /*shrink_to_fit=*/true, kMaxImageSizeInBytes,
       /*desired_image_frame_size=*/gfx::Size(),
       base::BindOnce(&ToImageSkia, std::move(callback)));
@@ -165,8 +165,8 @@
   // `kMaxImageSizeInBytes` will have their resolution downscaled instead of
   // simply failing to decode.
   data_decoder::DecodeAnimationIsolated(
-      base::as_bytes(base::make_span(data)), /*shrink_to_fit=*/true,
-      kMaxImageSizeInBytes, base::BindOnce(&ToFrames, std::move(callback)));
+      base::as_byte_span(data), /*shrink_to_fit=*/true, kMaxImageSizeInBytes,
+      base::BindOnce(&ToFrames, std::move(callback)));
 }
 
 }  // namespace image_util
diff --git a/ash/quick_pair/repository/fast_pair/fake_footprints_fetcher.cc b/ash/quick_pair/repository/fast_pair/fake_footprints_fetcher.cc
index 037c83e..ce30352 100644
--- a/ash/quick_pair/repository/fast_pair/fake_footprints_fetcher.cc
+++ b/ash/quick_pair/repository/fast_pair/fake_footprints_fetcher.cc
@@ -51,7 +51,7 @@
   }
 
   account_key_to_info_map_[base::HexEncode(
-      base::as_bytes(base::make_span(info.device().account_key())))] = info;
+      base::as_byte_span(info.device().account_key()))] = info;
   std::move(callback).Run(add_user_result_);
 }
 
diff --git a/chrome/browser/ash/arc/enterprise/cert_store/arc_cert_installer_unittest.cc b/chrome/browser/ash/arc/enterprise/cert_store/arc_cert_installer_unittest.cc
index d74a1df..4116e695 100644
--- a/chrome/browser/ash/arc/enterprise/cert_store/arc_cert_installer_unittest.cc
+++ b/chrome/browser/ash/arc/enterprise/cert_store/arc_cert_installer_unittest.cc
@@ -84,7 +84,7 @@
       key->key(), net::x509_util::DIGEST_SHA256, cn, 1, base::Time::UnixEpoch(),
       base::Time::UnixEpoch(), {}, &der_cert));
   cert = net::x509_util::CreateCERTCertificateFromBytes(
-      base::as_bytes(base::make_span(der_cert)));
+      base::as_byte_span(der_cert));
   ASSERT_TRUE(cert);
   certs->emplace_back(key.release(), cert.release(),
                       keymanagement::mojom::ChapsSlot::kUser, kLabel, kId);
diff --git a/chrome/browser/ash/attestation/certificate_util.cc b/chrome/browser/ash/attestation/certificate_util.cc
index 6a9f2f2..cf007c41 100644
--- a/chrome/browser/ash/attestation/certificate_util.cc
+++ b/chrome/browser/ash/attestation/certificate_util.cc
@@ -26,7 +26,7 @@
     any_certificate_found = true;
     scoped_refptr<net::X509Certificate> x509 =
         net::X509Certificate::CreateFromBytes(
-            base::as_bytes(base::make_span(pem_tokenizer.data())));
+            base::as_byte_span(pem_tokenizer.data()));
     if (!x509.get() || x509->valid_expiry().is_null()) {
       // In theory this should not happen but in practice parsing X.509 can be
       // brittle and there are a lot of factors including which underlying
diff --git a/chrome/browser/ash/attestation/soft_bind_attestation_flow_impl.cc b/chrome/browser/ash/attestation/soft_bind_attestation_flow_impl.cc
index 0247a2ba..9b00cda 100644
--- a/chrome/browser/ash/attestation/soft_bind_attestation_flow_impl.cc
+++ b/chrome/browser/ash/attestation/soft_bind_attestation_flow_impl.cc
@@ -393,7 +393,7 @@
     ++num_certificates;
     scoped_refptr<net::X509Certificate> x509 =
         net::X509Certificate::CreateFromBytes(
-            base::as_bytes(base::make_span(pem_tokenizer.data())));
+            base::as_byte_span(pem_tokenizer.data()));
     if (!x509.get() || x509->valid_expiry().is_null()) {
       // This logic intentionally fails open. In theory this should not happen
       // but in practice parsing X.509 can be brittle and there are a lot of
diff --git a/chrome/browser/ash/dbus/cryptohome_key_delegate_service_provider.cc b/chrome/browser/ash/dbus/cryptohome_key_delegate_service_provider.cc
index 08f3492..4d1b99e 100644
--- a/chrome/browser/ash/dbus/cryptohome_key_delegate_service_provider.cc
+++ b/chrome/browser/ash/dbus/cryptohome_key_delegate_service_provider.cc
@@ -159,8 +159,7 @@
 
   certificate_provider_service->RequestSignatureBySpki(
       challenge_request_data.public_key_spki_der(), ssl_algorithm,
-      base::as_bytes(base::make_span(challenge_request_data.data_to_sign())),
-      account_id,
+      base::as_byte_span(challenge_request_data.data_to_sign()), account_id,
       base::BindOnce(&CompleteSignatureKeyChallenge,
                      base::Unretained(method_call),
                      std::move(response_sender)));
diff --git a/chrome/browser/ash/dbus/cryptohome_key_delegate_service_provider_browsertest.cc b/chrome/browser/ash/dbus/cryptohome_key_delegate_service_provider_browsertest.cc
index 67dc3c8..b4be6cc 100644
--- a/chrome/browser/ash/dbus/cryptohome_key_delegate_service_provider_browsertest.cc
+++ b/chrome/browser/ash/dbus/cryptohome_key_delegate_service_provider_browsertest.cc
@@ -179,11 +179,10 @@
     const std::string spki =
         certificate_provider_extension()->GetCertificateSpki();
     crypto::SignatureVerifier verifier;
-    if (!verifier.VerifyInit(algorithm, signature,
-                             base::as_bytes(base::make_span(spki)))) {
+    if (!verifier.VerifyInit(algorithm, signature, base::as_byte_span(spki))) {
       return false;
     }
-    verifier.VerifyUpdate(base::as_bytes(base::make_span(kDataToSign)));
+    verifier.VerifyUpdate(base::as_byte_span(kDataToSign));
     return verifier.VerifyFinal();
   }
 
diff --git a/chrome/browser/ash/file_system_provider/operations/read_file_unittest.cc b/chrome/browser/ash/file_system_provider/operations/read_file_unittest.cc
index e7bd55c..356c1eb 100644
--- a/chrome/browser/ash/file_system_provider/operations/read_file_unittest.cc
+++ b/chrome/browser/ash/file_system_provider/operations/read_file_unittest.cc
@@ -161,7 +161,7 @@
   base::Value::List list;
   list.Append(kFileSystemId);
   list.Append(kRequestId);
-  list.Append(base::Value(base::as_bytes(base::make_span(data))));
+  list.Append(base::Value(base::as_byte_span(data)));
   list.Append(has_more);
   list.Append(execution_time);
 
diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/qr_code.cc b/chrome/browser/ash/login/oobe_quick_start/connectivity/qr_code.cc
index 73e91ed..3253811e 100644
--- a/chrome/browser/ash/login/oobe_quick_start/connectivity/qr_code.cc
+++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/qr_code.cc
@@ -36,8 +36,7 @@
 void QRCode::GeneratePixelData() {
   std::vector<uint8_t> blob = GetQRCodeData();
   qr_code_generator::QRCodeGenerator qr_generator;
-  auto generated_code = qr_generator.Generate(
-      base::as_bytes(base::make_span(blob.data(), blob.size())));
+  auto generated_code = qr_generator.Generate(blob);
   CHECK(generated_code.has_value());
   auto res =
       PixelData{generated_code->data.begin(), generated_code->data.end()};
diff --git a/chrome/browser/ash/login/saml/fake_saml_idp_mixin.cc b/chrome/browser/ash/login/saml/fake_saml_idp_mixin.cc
index d25633b..76691b66 100644
--- a/chrome/browser/ash/login/saml/fake_saml_idp_mixin.cc
+++ b/chrome/browser/ash/login/saml/fake_saml_idp_mixin.cc
@@ -78,7 +78,7 @@
 
 std::string GetTpmResponseBase64() {
   const std::string response = GetTpmResponse();
-  return base::Base64Encode(base::as_bytes(base::make_span(response)));
+  return base::Base64Encode(base::as_byte_span(response));
 }
 
 // Returns relay state from http get/post requests.
diff --git a/chrome/browser/ash/login/session/user_session_manager.cc b/chrome/browser/ash/login/session/user_session_manager.cc
index 1d3a5e7..2253e0a 100644
--- a/chrome/browser/ash/login/session/user_session_manager.cc
+++ b/chrome/browser/ash/login/session/user_session_manager.cc
@@ -577,9 +577,7 @@
 
 // Returns a Base16 encoded SHA1 digest of `data`.
 std::string Sha1Digest(const std::string& data) {
-  const base::SHA1Digest hash =
-      base::SHA1HashSpan(base::as_bytes(base::make_span(data)));
-  return base::HexEncode(hash);
+  return base::HexEncode(base::SHA1HashSpan(base::as_byte_span(data)));
 }
 
 }  // namespace
diff --git a/chrome/browser/ash/login/users/avatar/user_image_loader.cc b/chrome/browser/ash/login/users/avatar/user_image_loader.cc
index d55ac49..689be13 100644
--- a/chrome/browser/ash/login/users/avatar/user_image_loader.cc
+++ b/chrome/browser/ash/login/users/avatar/user_image_loader.cc
@@ -367,7 +367,7 @@
     return;
   }
 
-  auto bytes = base::as_bytes(base::make_span(*data));
+  auto bytes = base::as_byte_span(*data);
   data_decoder::DecodeAnimationIsolated(
       bytes, /*shrink_to_fit=*/true, kMaxImageSizeInBytes,
       base::BindOnce(&OnAnimationDecoded, std::move(loaded_cb), require_encode,
diff --git a/chrome/browser/ash/passkeys/passkey_authenticator_service_ash.cc b/chrome/browser/ash/passkeys/passkey_authenticator_service_ash.cc
index 1efd2b1b..e4bc8d18 100644
--- a/chrome/browser/ash/passkeys/passkey_authenticator_service_ash.cc
+++ b/chrome/browser/ash/passkeys/passkey_authenticator_service_ash.cc
@@ -283,8 +283,7 @@
                           ctx.request->client_data_hash.begin(),
                           ctx.request->client_data_hash.end());
   std::optional<std::vector<uint8_t>> assertion_signature = GenerateEcSignature(
-      base::as_bytes(base::make_span(credential_secrets.private_key())),
-      signed_over_data);
+      base::as_byte_span(credential_secrets.private_key()), signed_over_data);
   if (!assertion_signature) {
     FinishAssert(std::move(ctx),
                  crosapi::mojom::PasskeyAssertionResult::NewError(
diff --git a/chrome/browser/ash/policy/core/file_util.cc b/chrome/browser/ash/policy/core/file_util.cc
index ac16571..11d94e20 100644
--- a/chrome/browser/ash/policy/core/file_util.cc
+++ b/chrome/browser/ash/policy/core/file_util.cc
@@ -31,8 +31,7 @@
 }  // namespace
 
 std::string GetUniqueSubDirectoryForAccountID(const std::string& account_id) {
-  std::string sub_directory =
-      base::HexEncode(base::as_bytes(base::make_span(account_id)));
+  std::string sub_directory = base::HexEncode(base::as_byte_span(account_id));
   if (ExceedsMaximumPathComponentLength(sub_directory)) {
     // Originally the hex encoded account id was used as sub-directory name,
     // so we must keep on using that to guarantee backwards compatibility.
