Make SkFontMgr_New_Custom_Data public

Surface SkFontMgr_New_Custom_Data in include/ports/SkFontMgr_data.h,
similar to SkFontMgr_directory.h etc.

While at it, update the API to use SkSpan instead of rawptr + count.

Change-Id: Id340762d0787d726f917b14af9bbf688de5d1486
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/656217
Commit-Queue: Florin Malita <fmalita@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
Reviewed-by: Florin Malita <fmalita@google.com>
diff --git a/include/ports/BUILD.bazel b/include/ports/BUILD.bazel
index 62871c5..d3d8e7b 100644
--- a/include/ports/BUILD.bazel
+++ b/include/ports/BUILD.bazel
@@ -10,6 +10,7 @@
         {
             "//bazel/common_config_settings:uses_android_fontmgr": ["SkFontMgr_android.h"],
             "//bazel/common_config_settings:uses_custom_directory_fontmgr": ["SkFontMgr_directory.h"],
+            "//bazel/common_config_settings:uses_custom_embedded_fontmgr": ["SkFontMgr_data.h"],
             "//bazel/common_config_settings:uses_custom_empty_fontmgr": ["SkFontMgr_empty.h"],
             "//bazel/common_config_settings:uses_fontconfig_fontmgr": ["SkFontMgr_fontconfig.h"],
             "//bazel/common_config_settings:uses_fci_fontmgr": [
diff --git a/include/ports/SkFontMgr_data.h b/include/ports/SkFontMgr_data.h
new file mode 100644
index 0000000..6a22365
--- /dev/null
+++ b/include/ports/SkFontMgr_data.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2023 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#ifndef SkFontMgr_data_DEFINED
+#define SkFontMgr_data_DEFINED
+
+#include "include/core/SkData.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSpan.h"
+#include "include/core/SkTypes.h"
+
+class SkFontMgr;
+
+/** Create a custom font manager which wraps a collection of SkData-stored fonts.
+ *  This font manager uses FreeType for rendering.
+ */
+SK_API sk_sp<SkFontMgr> SkFontMgr_New_Custom_Data(SkSpan<sk_sp<SkData>>);
+
+#endif // SkFontMgr_data_DEFINED
diff --git a/modules/canvaskit/canvaskit_bindings.cpp b/modules/canvaskit/canvaskit_bindings.cpp
index 8a613c3..14a9429 100644
--- a/modules/canvaskit/canvaskit_bindings.cpp
+++ b/modules/canvaskit/canvaskit_bindings.cpp
@@ -112,7 +112,7 @@
 #endif
 
 #ifndef CK_NO_FONTS
-sk_sp<SkFontMgr> SkFontMgr_New_Custom_Data(sk_sp<SkData>* datas, int n);
+#include "include/ports/SkFontMgr_data.h"
 #endif
 
 struct OptionalMatrix : SkMatrix {
@@ -1446,7 +1446,7 @@
                 skdatas[i] = SkData::MakeFromMalloc(datas[i], sizes[i]);
             }
 
-            return SkFontMgr_New_Custom_Data(skdatas.get(), numFonts);
+            return SkFontMgr_New_Custom_Data(SkSpan(skdatas.get(), numFonts));
         }), allow_raw_pointers())
         .function("countFamilies", &SkFontMgr::countFamilies)
         .function("getFamilyName", optional_override([](SkFontMgr& self, int index)->JSString {
diff --git a/public.bzl b/public.bzl
index 08596db..7182ce6 100644
--- a/public.bzl
+++ b/public.bzl
@@ -178,6 +178,7 @@
     "include/ports/SkCFObject.h",
     "include/ports/SkFontConfigInterface.h",
     "include/ports/SkFontMgr_android.h",
+    "include/ports/SkFontMgr_data.h",
     "include/ports/SkFontMgr_directory.h",
     "include/ports/SkFontMgr_empty.h",
     "include/ports/SkFontMgr_fontconfig.h",
@@ -1925,6 +1926,7 @@
     "src/ports/SkFontHost_FreeType.cpp",
     "src/ports/SkFontMgr_custom.cpp",
     "src/ports/SkFontMgr_custom.h",
+    "src/ports/SkFontMgr_custom_embedded.cpp",
     "src/ports/SkFontMgr_empty_factory.cpp",
     "src/ports/SkGlobalInitialization_default.cpp",
     "src/ports/SkImageGenerator_skia.cpp",
diff --git a/src/ports/SkFontMgr_custom_embedded.cpp b/src/ports/SkFontMgr_custom_embedded.cpp
index bd74c27..aae51d0 100644
--- a/src/ports/SkFontMgr_custom_embedded.cpp
+++ b/src/ports/SkFontMgr_custom_embedded.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "include/core/SkStream.h"
+#include "include/ports/SkFontMgr_data.h"
 #include "src/core/SkFontDescriptor.h"
 #include "src/ports/SkFontMgr_custom.h"
 
@@ -110,9 +111,7 @@
     return sk_make_sp<SkFontMgr_Custom>(EmbeddedSystemFontLoader(header));
 }
 
-// SkFontMgr_New_Custom_Data expects to be called with the data for n font files.
-sk_sp<SkFontMgr> SkFontMgr_New_Custom_Data(sk_sp<SkData>* datas, int n) {
-    SkASSERT(datas != nullptr);
-    SkASSERT(n > 0);
-    return sk_make_sp<SkFontMgr_Custom>(DataFontLoader(datas, n));
+sk_sp<SkFontMgr> SkFontMgr_New_Custom_Data(SkSpan<sk_sp<SkData>> datas) {
+    SkASSERT(!datas.empty());
+    return sk_make_sp<SkFontMgr_Custom>(DataFontLoader(datas.data(), datas.size()));
 }