diff options
author | Andreas Kling <kling@serenityos.org> | 2023-04-02 08:35:03 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-04-02 15:00:06 +0200 |
commit | 620a34a4637654c2c7b518fddb087451aecb58f4 (patch) | |
tree | 258a71ddfbd9d992ee191366beea834b8ac34855 /Userland | |
parent | eed956b473e86b88da146b9f7356d4064736f626 (diff) | |
download | serenity-620a34a4637654c2c7b518fddb087451aecb58f4.zip |
LibWeb: Don't apply element inline style to associated pseudo elements
An element's inline style, if present, should not leak into any pseudo
elements generated by that element.
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/Libraries/LibWeb/CSS/StyleComputer.cpp | 12 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/CSS/StyleComputer.h | 2 |
2 files changed, 7 insertions, 7 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index 22969ff8ff..61aea66ad2 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -821,7 +821,7 @@ RefPtr<StyleValue> StyleComputer::resolve_unresolved_style_value(DOM::Element& e return {}; } -void StyleComputer::cascade_declarations(StyleProperties& style, DOM::Element& element, Vector<MatchingRule> const& matching_rules, CascadeOrigin cascade_origin, Important important) const +void StyleComputer::cascade_declarations(StyleProperties& style, DOM::Element& element, Optional<CSS::Selector::PseudoElement> pseudo_element, Vector<MatchingRule> const& matching_rules, CascadeOrigin cascade_origin, Important important) const { for (auto const& match : matching_rules) { for (auto const& property : verify_cast<PropertyOwningCSSStyleDeclaration>(match.rule->declaration()).properties()) { @@ -837,7 +837,7 @@ void StyleComputer::cascade_declarations(StyleProperties& style, DOM::Element& e } } - if (cascade_origin == CascadeOrigin::Author) { + if (cascade_origin == CascadeOrigin::Author && !pseudo_element.has_value()) { if (auto const* inline_style = verify_cast<ElementInlineCSSStyleDeclaration>(element.inline_style())) { for (auto const& property : inline_style->properties()) { if (important != property.important) @@ -907,7 +907,7 @@ ErrorOr<void> StyleComputer::compute_cascaded_values(StyleProperties& style, DOM // Then we apply the declarations from the matched rules in cascade order: // Normal user agent declarations - cascade_declarations(style, element, matching_rule_set.user_agent_rules, CascadeOrigin::UserAgent, Important::No); + cascade_declarations(style, element, pseudo_element, matching_rule_set.user_agent_rules, CascadeOrigin::UserAgent, Important::No); // FIXME: Normal user declarations @@ -915,17 +915,17 @@ ErrorOr<void> StyleComputer::compute_cascaded_values(StyleProperties& style, DOM element.apply_presentational_hints(style); // Normal author declarations - cascade_declarations(style, element, matching_rule_set.author_rules, CascadeOrigin::Author, Important::No); + cascade_declarations(style, element, pseudo_element, matching_rule_set.author_rules, CascadeOrigin::Author, Important::No); // FIXME: Animation declarations [css-animations-1] // Important author declarations - cascade_declarations(style, element, matching_rule_set.author_rules, CascadeOrigin::Author, Important::Yes); + cascade_declarations(style, element, pseudo_element, matching_rule_set.author_rules, CascadeOrigin::Author, Important::Yes); // FIXME: Important user declarations // Important user agent declarations - cascade_declarations(style, element, matching_rule_set.user_agent_rules, CascadeOrigin::UserAgent, Important::Yes); + cascade_declarations(style, element, pseudo_element, matching_rule_set.user_agent_rules, CascadeOrigin::UserAgent, Important::Yes); // FIXME: Transition declarations [css-transitions-1] diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.h b/Userland/Libraries/LibWeb/CSS/StyleComputer.h index 71d09e1a40..02778bd73d 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.h +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.h @@ -111,7 +111,7 @@ private: Vector<MatchingRule> author_rules; }; - void cascade_declarations(StyleProperties&, DOM::Element&, Vector<MatchingRule> const&, CascadeOrigin, Important important) const; + void cascade_declarations(StyleProperties&, DOM::Element&, Optional<CSS::Selector::PseudoElement>, Vector<MatchingRule> const&, CascadeOrigin, Important) const; void build_rule_cache(); void build_rule_cache_if_needed() const; |