Support multiple default font families

Change-Id: I79da6b47bad97968b54f8b0288c65c037998d19b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/375316
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Jason Simmons <jsimmons@google.com>
diff --git a/modules/skparagraph/include/FontCollection.h b/modules/skparagraph/include/FontCollection.h
index 3336c35..e654858 100644
--- a/modules/skparagraph/include/FontCollection.h
+++ b/modules/skparagraph/include/FontCollection.h
@@ -26,6 +26,7 @@
     void setTestFontManager(sk_sp<SkFontMgr> fontManager);
     void setDefaultFontManager(sk_sp<SkFontMgr> fontManager);
     void setDefaultFontManager(sk_sp<SkFontMgr> fontManager, const char defaultFamilyName[]);
+    void setDefaultFontManager(sk_sp<SkFontMgr> fontManager, const std::vector<SkString>& defaultFamilyNames);
 
     sk_sp<SkFontMgr> getFallbackManager() const { return fDefaultFontManager; }
 
@@ -70,7 +71,7 @@
     sk_sp<SkFontMgr> fDynamicFontManager;
     sk_sp<SkFontMgr> fTestFontManager;
 
-    SkString fDefaultFamilyName;
+    std::vector<SkString> fDefaultFamilyNames;
     ParagraphCache fParagraphCache;
 };
 }  // namespace textlayout
diff --git a/modules/skparagraph/src/FontCollection.cpp b/modules/skparagraph/src/FontCollection.cpp
index 73fffae..9571afb 100644
--- a/modules/skparagraph/src/FontCollection.cpp
+++ b/modules/skparagraph/src/FontCollection.cpp
@@ -24,7 +24,7 @@
 
 FontCollection::FontCollection()
         : fEnableFontFallback(true)
-        , fDefaultFamilyName(DEFAULT_FONT_FAMILY) { }
+        , fDefaultFamilyNames({SkString(DEFAULT_FONT_FAMILY)}) { }
 
 size_t FontCollection::getFontManagersCount() const { return this->getFontManagerOrder().size(); }
 
@@ -43,7 +43,13 @@
 void FontCollection::setDefaultFontManager(sk_sp<SkFontMgr> fontManager,
                                            const char defaultFamilyName[]) {
     fDefaultFontManager = std::move(fontManager);
-    fDefaultFamilyName = defaultFamilyName;
+    fDefaultFamilyNames.emplace_back(defaultFamilyName);
+}
+
+void FontCollection::setDefaultFontManager(sk_sp<SkFontMgr> fontManager,
+                                           const std::vector<SkString>& defaultFamilyNames) {
+    fDefaultFontManager = std::move(fontManager);
+    fDefaultFamilyNames = defaultFamilyNames;
 }
 
 void FontCollection::setDefaultFontManager(sk_sp<SkFontMgr> fontManager) {
@@ -85,7 +91,13 @@
     }
 
     if (typefaces.empty()) {
-        sk_sp<SkTypeface> match = matchTypeface(fDefaultFamilyName, fontStyle);
+        sk_sp<SkTypeface> match;
+        for (const SkString& familyName : fDefaultFamilyNames) {
+            match = matchTypeface(familyName, fontStyle);
+            if (match) {
+                break;
+            }
+        }
         if (!match) {
             for (const auto& manager : this->getFontManagerOrder()) {
                 match = manager->legacyMakeTypeface(nullptr, fontStyle);
@@ -140,8 +152,14 @@
     if (fDefaultFontManager == nullptr) {
         return nullptr;
     }
-    return sk_sp<SkTypeface>(fDefaultFontManager->matchFamilyStyle(fDefaultFamilyName.c_str(),
-                                                                   SkFontStyle()));
+    for (const SkString& familyName : fDefaultFamilyNames) {
+        SkTypeface* match = fDefaultFontManager->matchFamilyStyle(familyName.c_str(),
+                                                                  SkFontStyle());
+        if (match) {
+            return sk_sp<SkTypeface>(match);
+        }
+    }
+    return nullptr;
 }