mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-16 21:20:18 +00:00
LibWeb: Use document's viewport when resolving lengths in media queries
Previously we would always use the window's viewport which was incorrect if we were within an iframe. This is likely applicable to all uses of `Length::ResolutionContext::for_window`.
This commit is contained in:
parent
c33be71df9
commit
05c336ea4e
Notes:
github-actions[bot]
2025-10-07 09:34:36 +00:00
Author: https://github.com/Calme1709
Commit: 05c336ea4e
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6412
Reviewed-by: https://github.com/AtkinsSJ ✅
23 changed files with 198 additions and 83 deletions
|
@ -224,7 +224,7 @@ void CSSRuleList::for_each_effective_rule(TraversalOrder order, Function<void(We
|
|||
}
|
||||
}
|
||||
|
||||
bool CSSRuleList::evaluate_media_queries(HTML::Window const& window)
|
||||
bool CSSRuleList::evaluate_media_queries(DOM::Document const& document)
|
||||
{
|
||||
bool any_media_queries_changed_match_state = false;
|
||||
|
||||
|
@ -232,35 +232,35 @@ bool CSSRuleList::evaluate_media_queries(HTML::Window const& window)
|
|||
switch (rule->type()) {
|
||||
case CSSRule::Type::Import: {
|
||||
auto& import_rule = as<CSSImportRule>(*rule);
|
||||
if (import_rule.loaded_style_sheet() && import_rule.loaded_style_sheet()->evaluate_media_queries(window))
|
||||
if (import_rule.loaded_style_sheet() && import_rule.loaded_style_sheet()->evaluate_media_queries(document))
|
||||
any_media_queries_changed_match_state = true;
|
||||
break;
|
||||
}
|
||||
case CSSRule::Type::LayerBlock: {
|
||||
auto& layer_rule = as<CSSLayerBlockRule>(*rule);
|
||||
if (layer_rule.css_rules().evaluate_media_queries(window))
|
||||
if (layer_rule.css_rules().evaluate_media_queries(document))
|
||||
any_media_queries_changed_match_state = true;
|
||||
break;
|
||||
}
|
||||
case CSSRule::Type::Media: {
|
||||
auto& media_rule = as<CSSMediaRule>(*rule);
|
||||
bool did_match = media_rule.condition_matches();
|
||||
bool now_matches = media_rule.evaluate(window);
|
||||
bool now_matches = media_rule.evaluate(document);
|
||||
if (did_match != now_matches)
|
||||
any_media_queries_changed_match_state = true;
|
||||
if (now_matches && media_rule.css_rules().evaluate_media_queries(window))
|
||||
if (now_matches && media_rule.css_rules().evaluate_media_queries(document))
|
||||
any_media_queries_changed_match_state = true;
|
||||
break;
|
||||
}
|
||||
case CSSRule::Type::Supports: {
|
||||
auto& supports_rule = as<CSSSupportsRule>(*rule);
|
||||
if (supports_rule.condition_matches() && supports_rule.css_rules().evaluate_media_queries(window))
|
||||
if (supports_rule.condition_matches() && supports_rule.css_rules().evaluate_media_queries(document))
|
||||
any_media_queries_changed_match_state = true;
|
||||
break;
|
||||
}
|
||||
case CSSRule::Type::Style: {
|
||||
auto& style_rule = as<CSSStyleRule>(*rule);
|
||||
if (style_rule.css_rules().evaluate_media_queries(window))
|
||||
if (style_rule.css_rules().evaluate_media_queries(document))
|
||||
any_media_queries_changed_match_state = true;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue