@@ -0,0 +1,278 @@
+--- a/components/cbor/BUILD.gn
++++ b/components/cbor/BUILD.gn
+@@ -12,7 +12,7 @@
+ # TODO(crbug.com/535682335): Remove `USE_CBOR_RUST` buildflag entirely,
+ # unconditionally enable Rust CBOR parser, and drop `is_cronet_build` check
+ # once Cronet supports Crubit dependencies.
+- flags = [ "USE_CBOR_RUST=!$is_cronet_build" ]
++ flags = [ "USE_CBOR_RUST=$enable_cpp_api_from_rust" ]
+ }
+
+ component("cbor") {
+@@ -37,7 +37,7 @@
+ "//base",
+ ]
+
+- if (!is_cronet_build) {
++ if (enable_cpp_api_from_rust) {
+ public_deps = [
+ "//build/rust/crubit",
+ "//components/cbor/rust:cbor_rust_bindings",
+@@ -63,7 +63,7 @@
+ "//testing/gtest",
+ "//third_party/fuzztest",
+ ]
+- if (!is_cronet_build) {
++ if (enable_cpp_api_from_rust) {
+ deps += [ "//components/cbor/rust:cbor_rust_unittests" ]
+ }
+
+
+--- b/third_party/blink/renderer/platform/BUILD.gn
++++ a/third_party/blink/renderer/platform/BUILD.gn
+@@ -186,6 +186,18 @@
+ ]
+ }
+
++rust_static_library("font_format_check") {
++ allow_unsafe = true # Needed for FFI that underpins the `cxx` crate.
++ crate_root = "fonts/opentype/format_check.rs"
++ sources = [ crate_root ]
++ cxx_bindings = [ crate_root ]
++ deps = [
++ "//third_party/rust/font_types/v0_12:lib",
++ "//third_party/rust/read_fonts/v0_41:lib",
++ "//third_party/rust/skrifa/v0_44:lib",
++ ]
++}
++
+ rust_static_library("rustfft_ffi") {
+ allow_unsafe = true # Needed for FFI that underpins the `cxx` crate.
+ crate_root = "audio/rustfft_ffi.rs"
+@@ -1794,7 +1806,6 @@
+ ":allow_discouraged_type",
+ ":blink_platform_public_deps",
+ ":platform_export",
+- "//build/rust/crubit",
+ "//gpu/command_buffer/client:raster_interface",
+ "//media/capture:capture_lib",
+ "//mojo/public/cpp/base",
+@@ -1821,8 +1832,8 @@
+ "//ui/native_theme/features",
+ ]
+ deps = [
++ ":font_format_check",
+ ":rustfft_ffi",
+- "fonts:font_format_bindings",
+ "//base:base_static",
+ "//base/allocator:buildflags",
+ "//build:chromecast_buildflags",
+--- b/third_party/blink/renderer/platform/fonts/BUILD.gn
++++ /dev/null
+@@ -1,19 +0,0 @@
+-# Copyright 2026 The Chromium Authors
+-# Use of this source code is governed by a BSD-style license that can be
+-# found in the LICENSE file.
+-
+-import("//build/rust/rust_static_library.gni")
+-
+-rust_static_library("font_format") {
+- crate_root = "opentype/format_check.rs"
+- sources = [ crate_root ]
+- cpp_api_from_rust = {
+- target_name = "font_format_bindings"
+- cpp_namespace = "font_format"
+- }
+- deps = [
+- "//third_party/rust/font_types/v0_12:lib",
+- "//third_party/rust/read_fonts/v0_41:lib",
+- "//third_party/rust/skrifa/v0_44:lib",
+- ]
+-}
+--- b/third_party/blink/renderer/platform/fonts/opentype/font_format_check.cc
++++ a/third_party/blink/renderer/platform/fonts/opentype/font_format_check.cc
+@@ -7,6 +7,7 @@
+ #include "base/containers/span.h"
+ #include "base/containers/span_rust.h"
+ #include "base/numerics/byte_conversions.h"
++#include "third_party/blink/renderer/platform/fonts/opentype/format_check.rs.h"
+ #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+ #include "third_party/blink/renderer/platform/wtf/vector.h"
+ #include "third_party/skia/include/core/SkTypeface.h"
+@@ -14,37 +15,35 @@
+ namespace blink {
+
+ FontFormatCheck::FontFormatCheck(sk_sp<SkData> sk_data)
++ : format_info_(font_format_check::get_font_format_info(
+- : format_info_(font_format::get_font_format_info(
+ base::SpanToRustSlice(sk_data->byteSpan()))) {}
+
+-FontFormatCheck::~FontFormatCheck() = default;
+-
+ bool FontFormatCheck::IsVariableFont() const {
++ return font_format_check::is_variable(*format_info_);
+- return font_format::is_variable(format_info_);
+ }
+
+ bool FontFormatCheck::IsCbdtCblcColorFont() const {
++ return font_format_check::is_cbdt_cblc(*format_info_);
+- return font_format::is_cbdt_cblc(format_info_);
+ }
+
+ bool FontFormatCheck::IsEbdtEblcMonochromeFont() const {
++ return font_format_check::is_ebdt_eblc(*format_info_);
+- return font_format::is_ebdt_eblc(format_info_);
+ }
+
+ bool FontFormatCheck::IsColrCpalColorFontV0() const {
++ return font_format_check::is_colrv0(*format_info_);
+- return font_format::is_colrv0(format_info_);
+ }
+
+ bool FontFormatCheck::IsColrCpalColorFontV1() const {
++ return font_format_check::is_colrv1(*format_info_);
+- return font_format::is_colrv1(format_info_);
+ }
+
+ bool FontFormatCheck::IsSbixColorFont() const {
++ return font_format_check::is_sbix(*format_info_);
+- return font_format::is_sbix(format_info_);
+ }
+
+ bool FontFormatCheck::IsCff2OutlineFont() const {
++ return font_format_check::is_cff2(*format_info_);
+- return font_format::is_cff2(format_info_);
+ }
+
+ bool FontFormatCheck::IsVariableColrV0Font() const {
+@@ -58,7 +57,7 @@
+
+ bool FontFormatCheck::IsAvar2Font() const {
+ return RuntimeEnabledFeatures::FontFormatAvar2Enabled() &&
++ font_format_check::is_avar2(*format_info_);
+- font_format::is_avar2(format_info_);
+ }
+
+ FontFormatCheck::VariableFontSubType FontFormatCheck::ProbeVariableFont(
+--- b/third_party/blink/renderer/platform/fonts/opentype/font_format_check.h
++++ a/third_party/blink/renderer/platform/fonts/opentype/font_format_check.h
+@@ -5,7 +5,7 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_OPENTYPE_FONT_FORMAT_CHECK_H_
+ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_OPENTYPE_FONT_FORMAT_CHECK_H_
+
++#include "third_party/blink/renderer/platform/fonts/opentype/format_check.rs.h"
+-#include "third_party/blink/renderer/platform/fonts/font_format.h"
+ #include "third_party/blink/renderer/platform/platform_export.h"
+ #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
+ #include "third_party/skia/include/core/SkData.h"
+@@ -19,7 +19,7 @@
+
+ public:
+ explicit FontFormatCheck(sk_sp<SkData>);
++ virtual ~FontFormatCheck() = default;
+- virtual ~FontFormatCheck();
+ virtual bool IsVariableFont() const;
+ virtual bool IsCbdtCblcColorFont() const;
+ virtual bool IsEbdtEblcMonochromeFont() const;
+@@ -46,7 +46,7 @@
+ enum class COLRVersion { kCOLRV0, kCOLRV1, kNoCOLR };
+
+ private:
++ rust::Box<font_format_check::FontFormatInfo> format_info_;
+- font_format::FontFormatInfo format_info_;
+ };
+
+ } // namespace blink
+--- b/third_party/blink/renderer/platform/fonts/opentype/format_check.rs
++++ a/third_party/blink/renderer/platform/fonts/opentype/format_check.rs
+@@ -23,7 +23,7 @@
+ format_flags: Option<FontFormatFlags>,
+ }
+
++pub fn get_font_format_info(font_bytes: &[u8]) -> Box<FontFormatInfo> {
+-pub fn get_font_format_info(font_bytes: &[u8]) -> FontFormatInfo {
+ let file_ref = make_font_ref_internal(font_bytes, 0);
+
+ match file_ref {
+@@ -32,11 +32,11 @@
+ font.table_directory().table_records().iter().map(|e| e.tag()).collect();
+ let color_version = get_colr_version(&font);
+ let avar_version = get_avar_version(&font);
++ Box::new(FontFormatInfo {
+- FontFormatInfo {
+ format_flags: Some(FontFormatFlags { table_tags, color_version, avar_version }),
++ })
+- }
+ }
++ _ => Box::new(FontFormatInfo::default()),
+- _ => FontFormatInfo::default(),
+ }
+ }
+
+@@ -44,10 +44,10 @@
+ Some(font_ref.colr().ok()?.version())
+ }
+
++fn is_colrv1(format_info: &FontFormatInfo) -> bool {
+-pub fn is_colrv1(format_info: &FontFormatInfo) -> bool {
+ matches!(&format_info.format_flags, Some(FontFormatFlags { color_version: Some(1), .. }),)
+ }
++fn is_colrv0(format_info: &FontFormatInfo) -> bool {
+-pub fn is_colrv0(format_info: &FontFormatInfo) -> bool {
+ matches!(&format_info.format_flags, Some(FontFormatFlags { color_version: Some(0), .. }),)
+ }
+
+@@ -56,7 +56,7 @@
+ Some((version.major, version.minor))
+ }
+
++fn is_avar2(format_info: &FontFormatInfo) -> bool {
+-pub fn is_avar2(format_info: &FontFormatInfo) -> bool {
+ matches!(&format_info.format_flags, Some(FontFormatFlags { avar_version: Some((2, _)), .. }),)
+ }
+
+@@ -69,22 +69,39 @@
+ }
+ }
+
++fn is_variable(format_info: &FontFormatInfo) -> bool {
+-pub fn is_variable(format_info: &FontFormatInfo) -> bool {
+ has_tags(format_info, &[Tag::new(b"fvar")])
+ }
+
++fn is_sbix(format_info: &FontFormatInfo) -> bool {
+-pub fn is_sbix(format_info: &FontFormatInfo) -> bool {
+ has_tags(format_info, &[Tag::new(b"sbix")])
+ }
+
++fn is_cbdt_cblc(format_info: &FontFormatInfo) -> bool {
+-pub fn is_cbdt_cblc(format_info: &FontFormatInfo) -> bool {
+ has_tags(format_info, &[Tag::new(b"CBDT"), Tag::new(b"CBLC")])
+ }
+
++fn is_ebdt_eblc(format_info: &FontFormatInfo) -> bool {
+-pub fn is_ebdt_eblc(format_info: &FontFormatInfo) -> bool {
+ has_tags(format_info, &[Tag::new(b"EBDT"), Tag::new(b"EBLC")])
+ }
+
++fn is_cff2(format_info: &FontFormatInfo) -> bool {
+-pub fn is_cff2(format_info: &FontFormatInfo) -> bool {
+ has_tags(format_info, &[Tag::new(b"CFF2")])
+ }
++
++#[cxx::bridge(namespace = "font_format_check")]
++pub mod ffi {
++ extern "Rust" {
++ type FontFormatInfo;
++
++ fn get_font_format_info(font_bytes: &[u8]) -> Box<FontFormatInfo>;
++ fn is_colrv1(format_info: &FontFormatInfo) -> bool;
++ fn is_colrv0(format_info: &FontFormatInfo) -> bool;
++ fn is_cbdt_cblc(format_info: &FontFormatInfo) -> bool;
++ fn is_ebdt_eblc(format_info: &FontFormatInfo) -> bool;
++ fn is_variable(format_info: &FontFormatInfo) -> bool;
++ fn is_sbix(format_info: &FontFormatInfo) -> bool;
++ fn is_cff2(format_info: &FontFormatInfo) -> bool;
++ fn is_avar2(format_info: &FontFormatInfo) -> bool;
++ }
++}