Explorar o código

LibWeb: Don't invalidate style when adding/removing empty style sheet

For whatever reason, web pages sometimes add and/or remove a completely
empty style sheet. When this happens, we don't need to invalidate the
document's style, since the outcome will be the same as before.
Andreas Kling %!s(int64=2) %!d(string=hai) anos
pai
achega
14d4f227f2
Modificáronse 1 ficheiros con 10 adicións e 0 borrados
  1. 10 0
      Userland/Libraries/LibWeb/CSS/StyleSheetList.cpp

+ 10 - 0
Userland/Libraries/LibWeb/CSS/StyleSheetList.cpp

@@ -19,6 +19,11 @@ void StyleSheetList::add_sheet(CSSStyleSheet& sheet)
 
 
     sort_sheets();
     sort_sheets();
 
 
+    if (sheet.rules().length() == 0) {
+        // NOTE: If the added sheet has no rules, we don't have to invalidate anything.
+        return;
+    }
+
     m_document.style_computer().invalidate_rule_cache();
     m_document.style_computer().invalidate_rule_cache();
     m_document.style_computer().load_fonts_from_sheet(sheet);
     m_document.style_computer().load_fonts_from_sheet(sheet);
     m_document.invalidate_style();
     m_document.invalidate_style();
@@ -29,6 +34,11 @@ void StyleSheetList::remove_sheet(CSSStyleSheet& sheet)
     sheet.set_style_sheet_list({}, nullptr);
     sheet.set_style_sheet_list({}, nullptr);
     m_sheets.remove_first_matching([&](auto& entry) { return entry.ptr() == &sheet; });
     m_sheets.remove_first_matching([&](auto& entry) { return entry.ptr() == &sheet; });
 
 
+    if (sheet.rules().length() == 0) {
+        // NOTE: If the removed sheet had no rules, we don't have to invalidate anything.
+        return;
+    }
+
     sort_sheets();
     sort_sheets();
 
 
     m_document.style_computer().invalidate_rule_cache();
     m_document.style_computer().invalidate_rule_cache();