diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 4961ac76f09..9abbc4d421b 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -4488,7 +4488,7 @@ Vector Parser::parse_font_face_src(TokenStream // Format-name table: https://www.w3.org/TR/css-fonts-4/#font-format-definitions auto font_format_is_supported = [](StringView name) { // The spec requires us to treat opentype and truetype as synonymous. - if (name.is_one_of_ignoring_case("opentype"sv, "truetype"sv)) + if (name.is_one_of_ignoring_case("opentype"sv, "truetype"sv, "woff"sv)) return true; return false; }; diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index b6ee53a3481..9d7441c2b93 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -52,7 +53,7 @@ public: virtual void resource_did_load() override { - auto result = TTF::Font::try_load_from_externally_owned_memory(resource()->encoded_data()); + auto result = try_load_font(); if (result.is_error()) return; m_vector_font = result.release_value(); @@ -71,6 +72,23 @@ public: } private: + ErrorOr> try_load_font() + { + // FIXME: This could maybe use the format() provided in @font-face as well, since often the mime type is just application/octet-stream and we have to try every format + auto mime_type = resource()->mime_type(); + if (mime_type == "font/ttf"sv || mime_type == "application/x-font-ttf"sv) + return TRY(TTF::Font::try_load_from_externally_owned_memory(resource()->encoded_data())); + if (mime_type == "font/woff"sv) + return TRY(WOFF::Font::try_load_from_externally_owned_memory(resource()->encoded_data())); + auto ttf = TTF::Font::try_load_from_externally_owned_memory(resource()->encoded_data()); + if (!ttf.is_error()) + return ttf.release_value(); + auto woff = WOFF::Font::try_load_from_externally_owned_memory(resource()->encoded_data()); + if (!woff.is_error()) + return woff.release_value(); + return ttf.release_error(); + } + StyleComputer& m_style_computer; FlyString m_family_name; RefPtr m_vector_font;