Commit 6c679a1f authored by Anders Hartvoll Ruud's avatar Anders Hartvoll Ruud Committed by Chromium LUCI CQ

[@container] Add placeholder StyleRecalcContext to ElementRuleCollector

We need to propagate container size information down to style
resolution of elements that depend on a container queries.
The StyleRecalcContext class will (eventually) transport that
information.

This CL is the first in a chain of CLs which does the necessary
refactoring to propagate a StyleRecalcContext all the way from
StyleEngine::UpdateStyleAndLayoutTreeForContainer to descendants
ElementRuleCollector instances.

Longer term I expect StyleRecalcContext to also setup/manage the
SelectorFilter (or otherwise merge with that functionality), but this
problem is out of scope at the moment.

Bug: 1145970
Change-Id: Ia30b796e0e95c83e5f04d971a593644ec18bc8eb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2626433
Commit-Queue: Anders Hartvoll Ruud <andruud@chromium.org>
Reviewed-by: default avatarRune Lillesveen <futhark@chromium.org>
Reviewed-by: default avatarXiaocheng Hu <xiaochengh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#843535}
parent d7b61c15
...@@ -60,12 +60,15 @@ unsigned AdjustLinkMatchType(EInsideLink inside_link, ...@@ -60,12 +60,15 @@ unsigned AdjustLinkMatchType(EInsideLink inside_link,
} // namespace } // namespace
ElementRuleCollector::ElementRuleCollector(const ElementResolveContext& context, ElementRuleCollector::ElementRuleCollector(
const ElementResolveContext& context,
const StyleRecalcContext& style_recalc_context,
const SelectorFilter& filter, const SelectorFilter& filter,
MatchResult& result, MatchResult& result,
ComputedStyle* style, ComputedStyle* style,
EInsideLink inside_link) EInsideLink inside_link)
: context_(context), : context_(context),
style_recalc_context_(style_recalc_context),
selector_filter_(filter), selector_filter_(filter),
style_(style), style_(style),
pseudo_style_request_(kPseudoIdNone), pseudo_style_request_(kPseudoIdNone),
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "third_party/blink/renderer/core/css/resolver/match_request.h" #include "third_party/blink/renderer/core/css/resolver/match_request.h"
#include "third_party/blink/renderer/core/css/resolver/match_result.h" #include "third_party/blink/renderer/core/css/resolver/match_result.h"
#include "third_party/blink/renderer/core/css/selector_checker.h" #include "third_party/blink/renderer/core/css/selector_checker.h"
#include "third_party/blink/renderer/core/css/style_recalc.h"
#include "third_party/blink/renderer/core/style/computed_style_base_constants.h" #include "third_party/blink/renderer/core/style/computed_style_base_constants.h"
#include "third_party/blink/renderer/platform/wtf/ref_counted.h" #include "third_party/blink/renderer/platform/wtf/ref_counted.h"
#include "third_party/blink/renderer/platform/wtf/vector.h" #include "third_party/blink/renderer/platform/wtf/vector.h"
...@@ -99,6 +100,7 @@ class CORE_EXPORT ElementRuleCollector { ...@@ -99,6 +100,7 @@ class CORE_EXPORT ElementRuleCollector {
public: public:
ElementRuleCollector(const ElementResolveContext&, ElementRuleCollector(const ElementResolveContext&,
const StyleRecalcContext&,
const SelectorFilter&, const SelectorFilter&,
MatchResult&, MatchResult&,
ComputedStyle*, ComputedStyle*,
...@@ -177,6 +179,7 @@ class CORE_EXPORT ElementRuleCollector { ...@@ -177,6 +179,7 @@ class CORE_EXPORT ElementRuleCollector {
private: private:
const ElementResolveContext& context_; const ElementResolveContext& context_;
StyleRecalcContext style_recalc_context_;
const SelectorFilter& selector_filter_; const SelectorFilter& selector_filter_;
scoped_refptr<ComputedStyle> scoped_refptr<ComputedStyle>
style_; // FIXME: This can be mutated during matching! style_; // FIXME: This can be mutated during matching!
......
...@@ -39,8 +39,8 @@ class ElementRuleCollectorTest : public PageTestBase { ...@@ -39,8 +39,8 @@ class ElementRuleCollectorTest : public PageTestBase {
SelectorFilter filter; SelectorFilter filter;
MatchResult result; MatchResult result;
auto style = ComputedStyle::Create(); auto style = ComputedStyle::Create();
ElementRuleCollector collector(context, filter, result, style.get(), ElementRuleCollector collector(context, StyleRecalcContext(), filter,
InsideLink(element)); result, style.get(), InsideLink(element));
String rule = selector + " { color: green }"; String rule = selector + " { color: green }";
auto* style_rule = auto* style_rule =
......
...@@ -851,9 +851,11 @@ void StyleResolver::ApplyBaseStyle( ...@@ -851,9 +851,11 @@ void StyleResolver::ApplyBaseStyle(
DocumentElementUserAgentDeclarations()); DocumentElementUserAgentDeclarations());
} }
ElementRuleCollector collector(state.ElementContext(), selector_filter_, // TODO(crbug.com/1145970): Use actual StyleRecalcContext.
match_result, state.Style(), StyleRecalcContext style_recalc_context;
state.Style()->InsideLink()); ElementRuleCollector collector(state.ElementContext(), style_recalc_context,
selector_filter_, match_result,
state.Style(), state.Style()->InsideLink());
MatchAllRules(state, collector, MatchAllRules(state, collector,
matching_behavior != kMatchAllRulesExcludingSMIL); matching_behavior != kMatchAllRulesExcludingSMIL);
...@@ -972,8 +974,11 @@ scoped_refptr<ComputedStyle> StyleResolver::PseudoStyleForElement( ...@@ -972,8 +974,11 @@ scoped_refptr<ComputedStyle> StyleResolver::PseudoStyleForElement(
} }
state.Style()->SetStyleType(pseudo_style_request.pseudo_id); state.Style()->SetStyleType(pseudo_style_request.pseudo_id);
// TODO(crbug.com/1145970): Use actual StyleRecalcContext.
StyleRecalcContext style_recalc_context;
// Check UA, user and author rules. // Check UA, user and author rules.
ElementRuleCollector collector(state.ElementContext(), selector_filter_, ElementRuleCollector collector(state.ElementContext(), style_recalc_context,
selector_filter_,
cascade.MutableMatchResult(), state.Style(), cascade.MutableMatchResult(), state.Style(),
state.Style()->InsideLink()); state.Style()->InsideLink());
collector.SetPseudoElementStyleRequest(pseudo_style_request); collector.SetPseudoElementStyleRequest(pseudo_style_request);
...@@ -1138,8 +1143,10 @@ StyleRuleList* StyleResolver::StyleRulesForElement(Element* element, ...@@ -1138,8 +1143,10 @@ StyleRuleList* StyleResolver::StyleRulesForElement(Element* element,
DCHECK(element); DCHECK(element);
StyleResolverState state(GetDocument(), *element); StyleResolverState state(GetDocument(), *element);
MatchResult match_result; MatchResult match_result;
ElementRuleCollector collector(state.ElementContext(), selector_filter_, // TODO(crbug.com/1145970): Use actual StyleRecalcContext.
match_result, state.Style(), StyleRecalcContext style_recalc_context;
ElementRuleCollector collector(state.ElementContext(), style_recalc_context,
selector_filter_, match_result, state.Style(),
EInsideLink::kNotInsideLink); EInsideLink::kNotInsideLink);
collector.SetMode(SelectorChecker::kCollectingStyleRules); collector.SetMode(SelectorChecker::kCollectingStyleRules);
CollectPseudoRulesForElement(*element, collector, kPseudoIdNone, CollectPseudoRulesForElement(*element, collector, kPseudoIdNone,
...@@ -1153,9 +1160,11 @@ StyleResolver::CascadedValuesForElement(Element* element, PseudoId pseudo_id) { ...@@ -1153,9 +1160,11 @@ StyleResolver::CascadedValuesForElement(Element* element, PseudoId pseudo_id) {
state.SetStyle(ComputedStyle::Create()); state.SetStyle(ComputedStyle::Create());
STACK_UNINITIALIZED StyleCascade cascade(state); STACK_UNINITIALIZED StyleCascade cascade(state);
ElementRuleCollector collector(state.ElementContext(), selector_filter_, // TODO(crbug.com/1145970): Use actual StyleRecalcContext.
cascade.MutableMatchResult(), state.Style(), StyleRecalcContext style_recalc_context;
EInsideLink::kNotInsideLink); ElementRuleCollector collector(state.ElementContext(), style_recalc_context,
selector_filter_, cascade.MutableMatchResult(),
state.Style(), EInsideLink::kNotInsideLink);
collector.SetPseudoElementStyleRequest(PseudoElementStyleRequest(pseudo_id)); collector.SetPseudoElementStyleRequest(PseudoElementStyleRequest(pseudo_id));
MatchAllRules(state, collector, false /* include_smil_properties */); MatchAllRules(state, collector, false /* include_smil_properties */);
...@@ -1170,8 +1179,10 @@ RuleIndexList* StyleResolver::PseudoCSSRulesForElement( ...@@ -1170,8 +1179,10 @@ RuleIndexList* StyleResolver::PseudoCSSRulesForElement(
DCHECK(element); DCHECK(element);
StyleResolverState state(GetDocument(), *element); StyleResolverState state(GetDocument(), *element);
MatchResult match_result; MatchResult match_result;
ElementRuleCollector collector(state.ElementContext(), selector_filter_, // TODO(crbug.com/1145970): Use actual StyleRecalcContext.
match_result, state.Style(), StyleRecalcContext style_recalc_context;
ElementRuleCollector collector(state.ElementContext(), style_recalc_context,
selector_filter_, match_result, state.Style(),
EInsideLink::kNotInsideLink); EInsideLink::kNotInsideLink);
collector.SetMode(SelectorChecker::kCollectingCSSRules); collector.SetMode(SelectorChecker::kCollectingCSSRules);
// TODO(obrufau): support collecting rules for nested ::marker // TODO(obrufau): support collecting rules for nested ::marker
...@@ -1587,9 +1598,11 @@ void StyleResolver::ApplyCallbackSelectors(StyleResolverState& state) { ...@@ -1587,9 +1598,11 @@ void StyleResolver::ApplyCallbackSelectors(StyleResolverState& state) {
if (!watched_selectors_rule_set) if (!watched_selectors_rule_set)
return; return;
// TODO(crbug.com/1145970): Use actual StyleRecalcContext.
StyleRecalcContext style_recalc_context;
MatchResult match_result; MatchResult match_result;
ElementRuleCollector collector(state.ElementContext(), selector_filter_, ElementRuleCollector collector(state.ElementContext(), style_recalc_context,
match_result, state.Style(), selector_filter_, match_result, state.Style(),
state.Style()->InsideLink()); state.Style()->InsideLink());
collector.SetMode(SelectorChecker::kCollectingStyleRules); collector.SetMode(SelectorChecker::kCollectingStyleRules);
collector.SetIncludeEmptyRules(true); collector.SetIncludeEmptyRules(true);
......
...@@ -956,8 +956,9 @@ TEST_F(StyleResolverTest, TreeScopedReferences) { ...@@ -956,8 +956,9 @@ TEST_F(StyleResolverTest, TreeScopedReferences) {
StyleResolverState state(GetDocument(), *host); StyleResolverState state(GetDocument(), *host);
SelectorFilter filter; SelectorFilter filter;
MatchResult match_result; MatchResult match_result;
ElementRuleCollector collector(state.ElementContext(), filter, match_result, ElementRuleCollector collector(state.ElementContext(), StyleRecalcContext(),
state.Style(), EInsideLink::kNotInsideLink); filter, match_result, state.Style(),
EInsideLink::kNotInsideLink);
GetDocument().GetStyleEngine().GetStyleResolver().MatchAllRules( GetDocument().GetStyleEngine().GetStyleResolver().MatchAllRules(
state, collector, false /* include_smil_properties */); state, collector, false /* include_smil_properties */);
const auto& properties = match_result.GetMatchedProperties(); const auto& properties = match_result.GetMatchedProperties();
...@@ -982,8 +983,9 @@ TEST_F(StyleResolverTest, TreeScopedReferences) { ...@@ -982,8 +983,9 @@ TEST_F(StyleResolverTest, TreeScopedReferences) {
StyleResolverState state(GetDocument(), *span); StyleResolverState state(GetDocument(), *span);
SelectorFilter filter; SelectorFilter filter;
MatchResult match_result; MatchResult match_result;
ElementRuleCollector collector(state.ElementContext(), filter, match_result, ElementRuleCollector collector(state.ElementContext(), StyleRecalcContext(),
state.Style(), EInsideLink::kNotInsideLink); filter, match_result, state.Style(),
EInsideLink::kNotInsideLink);
GetDocument().GetStyleEngine().GetStyleResolver().MatchAllRules( GetDocument().GetStyleEngine().GetStyleResolver().MatchAllRules(
state, collector, false /* include_smil_properties */); state, collector, false /* include_smil_properties */);
const auto& properties = match_result.GetMatchedProperties(); const auto& properties = match_result.GetMatchedProperties();
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_STYLE_RECALC_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_STYLE_RECALC_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_STYLE_RECALC_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_STYLE_RECALC_H_
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
namespace blink { namespace blink {
class Element; class Element;
...@@ -96,6 +98,17 @@ class StyleRecalcChange { ...@@ -96,6 +98,17 @@ class StyleRecalcChange {
bool recalc_container_query_dependent_ = false; bool recalc_container_query_dependent_ = false;
}; };
// StyleRecalcContext is an object that is passed on the stack during
// the style recalc process.
//
// In the future, it will contain data which makes it possible to
// evaluate Container Queries, but for now it's an empty placeholder.
//
// TODO(crbug.com/1145970): Populate this class.
class StyleRecalcContext {
STACK_ALLOCATED();
};
} // namespace blink } // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_STYLE_RECALC_H_ #endif // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_STYLE_RECALC_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment