diff --git a/runtime/asset_font_selector.cc b/runtime/asset_font_selector.cc index eaa86e3ab9308..ad49fde46563d 100644 --- a/runtime/asset_font_selector.cc +++ b/runtime/asset_font_selector.cc @@ -88,10 +88,20 @@ void AssetFontSelector::Install( UIDartState::Current()->set_font_selector(font_selector); } +void AssetFontSelector::Install(fxl::RefPtr asset_store) { + RefPtr font_selector = + adoptRef(new AssetFontSelector(std::move(asset_store))); + font_selector->parseFontManifest(); + UIDartState::Current()->set_font_selector(font_selector); +} + AssetFontSelector::AssetFontSelector( fxl::RefPtr directory_asset_bundle) : directory_asset_bundle_(std::move(directory_asset_bundle)) {} +AssetFontSelector::AssetFontSelector(fxl::RefPtr asset_store) + : asset_store_(std::move(asset_store)) {} + AssetFontSelector::~AssetFontSelector() {} AssetFontSelector::TypefaceAsset::TypefaceAsset() {} @@ -108,9 +118,13 @@ AssetFontSelector::FlutterFontAttributes::~FlutterFontAttributes() {} void AssetFontSelector::parseFontManifest() { std::vector font_manifest_data; - if (!directory_asset_bundle_->GetAsBuffer(kFontManifestAssetPath, - &font_manifest_data)) - return; + if (!directory_asset_bundle_ || + !directory_asset_bundle_->GetAsBuffer(kFontManifestAssetPath, + &font_manifest_data)) { + if (!asset_store_ || + !asset_store_->GetAsBuffer(kFontManifestAssetPath, &font_manifest_data)) + return; + } rapidjson::Document document; document.Parse(reinterpret_cast(font_manifest_data.data()), @@ -225,10 +239,13 @@ sk_sp AssetFontSelector::getTypefaceAsset( } std::unique_ptr typeface_asset(new TypefaceAsset); - if (!directory_asset_bundle_->GetAsBuffer(asset_path, - &typeface_asset->data)) { - typeface_cache_.insert(std::make_pair(asset_path, nullptr)); - return nullptr; + if (!directory_asset_bundle_ || !directory_asset_bundle_->GetAsBuffer( + asset_path, &typeface_asset->data)) { + if (!asset_store_ || + !asset_store_->GetAsBuffer(asset_path, &typeface_asset->data)) { + typeface_cache_.insert(std::make_pair(asset_path, nullptr)); + return nullptr; + } } sk_sp font_mgr(SkFontMgr::RefDefault()); diff --git a/runtime/asset_font_selector.h b/runtime/asset_font_selector.h index ad6144071e370..ced5ebc595041 100644 --- a/runtime/asset_font_selector.h +++ b/runtime/asset_font_selector.h @@ -9,6 +9,7 @@ #include #include "flutter/assets/directory_asset_bundle.h" +#include "flutter/assets/zip_asset_store.h" #include "flutter/sky/engine/platform/fonts/FontCacheKey.h" #include "flutter/sky/engine/platform/fonts/FontSelector.h" #include "flutter/sky/engine/platform/fonts/SimpleFontData.h" @@ -25,6 +26,10 @@ class AssetFontSelector : public FontSelector { static void Install(fxl::RefPtr directory_asset_bundle); + // TODO(zarah): Remove this and related code using asset_store once flx is + // removed. + static void Install(fxl::RefPtr asset_store); + PassRefPtr getFontData(const FontDescription& font_description, const AtomicString& family_name) override; @@ -42,6 +47,8 @@ class AssetFontSelector : public FontSelector { explicit AssetFontSelector( fxl::RefPtr directory_asset_bundle); + explicit AssetFontSelector(fxl::RefPtr asset_store); + void parseFontManifest(); sk_sp getTypefaceAsset(const FontDescription& font_description, @@ -49,6 +56,8 @@ class AssetFontSelector : public FontSelector { fxl::RefPtr directory_asset_bundle_; + fxl::RefPtr asset_store_; + HashMap> font_family_map_; std::unordered_map>