LibWeb: Remove all font loaders linked to a StyleSheet when it's deleted

When a style sheet is removed, all font loaders created from that style
sheet should also be removed.
This commit is contained in:
Aliaksandr Kalenik 2024-09-22 18:10:46 +02:00 committed by Alexander Kalenik
commit 74588a0a16
Notes: github-actions[bot] 2024-09-22 18:11:26 +00:00
5 changed files with 35 additions and 3 deletions

View file

@ -2794,12 +2794,24 @@ Optional<FontLoader&> StyleComputer::load_font_face(ParsedFontFace const& font_f
return loader_ref;
}
void StyleComputer::load_fonts_from_sheet(CSSStyleSheet const& sheet)
void StyleComputer::load_fonts_from_sheet(CSSStyleSheet& sheet)
{
for (auto const& rule : sheet.rules()) {
if (!is<CSSFontFaceRule>(*rule))
continue;
(void)load_font_face(static_cast<CSSFontFaceRule const&>(*rule).font_face());
auto font_loader = load_font_face(static_cast<CSSFontFaceRule const&>(*rule).font_face());
if (font_loader.has_value()) {
sheet.add_associated_font_loader(font_loader.value());
}
}
}
void StyleComputer::unload_fonts_from_sheet(CSSStyleSheet& sheet)
{
for (auto& [_, font_loader_list] : m_loaded_fonts) {
font_loader_list.remove_all_matching([&](auto& font_loader) {
return sheet.has_associated_font_loader(*font_loader);
});
}
}