LibWeb: Don't apply disabled adopted style sheets to the document

Previously, we would apply any adopted style sheet to the document if
its alternate flag was not set. This meant that all adopted style
sheets would be applied, since constructed style sheets never have this
flag set.
This commit is contained in:
Tim Ledbetter 2024-04-28 16:21:25 +01:00 committed by Andreas Kling
parent 84193f2746
commit f4e0c5395a
3 changed files with 22 additions and 1 deletions

View file

@ -0,0 +1 @@
Disabled constructed style sheet applies to document: false

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<script src="../include.js"></script>
<script>
test(() => {
function constructedStyleSheetAppliesToDocument(options) {
const textDiv = document.createElement("div");
document.body.appendChild(textDiv);
const sheet = new CSSStyleSheet(options);
const newColor = "rgb(0, 128, 0)";
sheet.replaceSync(`div { color: ${newColor}; }`);
document.adoptedStyleSheets = [sheet];
const styleSheetAppliedToDocument = getComputedStyle(textDiv).color === newColor;
document.body.removeChild(textDiv);
document.adoptedStyleSheets = [];
return styleSheetAppliedToDocument;
}
println(`Disabled constructed style sheet applies to document: ${constructedStyleSheetAppliesToDocument({ disabled: true })}`);
});
</script>

View file

@ -4904,7 +4904,7 @@ void Document::for_each_css_style_sheet(Function<void(CSS::CSSStyleSheet&)>&& ca
if (m_adopted_style_sheets) {
m_adopted_style_sheets->for_each<CSS::CSSStyleSheet>([&](auto& style_sheet) {
if (!(style_sheet.is_alternate() && style_sheet.disabled()))
if (!style_sheet.disabled())
callback(style_sheet);
});
}