Quellcode durchsuchen

LibWeb: Invalidate font cache when web fonts are downloaded

In case we've looked up the family name before and cached the result of
font fallback, we now invalidate any cached entries with the same family
name so that the next lookup may consider the newly downloaded font.
Andreas Kling vor 1 Jahr
Ursprung
Commit
418f9ceadd

+ 2 - 1
Userland/Libraries/LibWeb/CSS/StyleComputer.cpp

@@ -2794,8 +2794,9 @@ CSSPixelRect StyleComputer::viewport_rect() const
     return {};
 }
 
-void StyleComputer::did_load_font([[maybe_unused]] FlyString const& family_name)
+void StyleComputer::did_load_font(FlyString const& family_name)
 {
+    m_font_cache.did_load_font({}, family_name);
     document().invalidate_style();
 }
 

+ 7 - 0
Userland/Libraries/LibWeb/FontCache.cpp

@@ -39,4 +39,11 @@ void FontCache::set(FontSelector const& font_selector, NonnullRefPtr<Gfx::Font c
     m_fonts.set(font_selector, move(font));
 }
 
+void FontCache::did_load_font(Badge<CSS::StyleComputer>, FlyString const& family_name)
+{
+    m_fonts.remove_all_matching([&family_name](auto& key, auto&) -> bool {
+        return key.family == family_name;
+    });
+}
+
 }

+ 2 - 0
Userland/Libraries/LibWeb/FontCache.h

@@ -35,6 +35,8 @@ public:
 
     NonnullRefPtr<Gfx::Font const> scaled_font(Gfx::Font const&, float scale_factor);
 
+    void did_load_font(Badge<CSS::StyleComputer>, FlyString const& family_name);
+
 private:
     mutable HashMap<FontSelector, NonnullRefPtr<Gfx::Font const>> m_fonts;
 };