Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(545)

Unified Diff: sky/engine/core/css/resolver/ScopedStyleResolver.cpp

Issue 858423002: Don't store a RuleFeatureSet on ScopedStyleResolver. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: better test names. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/engine/core/css/resolver/ScopedStyleResolver.h ('k') | sky/engine/core/dom/Element.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/engine/core/css/resolver/ScopedStyleResolver.cpp
diff --git a/sky/engine/core/css/resolver/ScopedStyleResolver.cpp b/sky/engine/core/css/resolver/ScopedStyleResolver.cpp
index 6655bf3f023150b4190aef7b7468acfdf5c6882e..69c9f250da554d5e1b7e669cab5c2f034656487a 100644
--- a/sky/engine/core/css/resolver/ScopedStyleResolver.cpp
+++ b/sky/engine/core/css/resolver/ScopedStyleResolver.cpp
@@ -44,17 +44,6 @@ ScopedStyleResolver::ScopedStyleResolver(TreeScope& scope)
{
}
-void ScopedStyleResolver::appendStyleSheet(CSSStyleSheet& sheet)
-{
- MediaQueryEvaluator medium(m_scope.document().view());
-
- if (sheet.mediaQueries() && !medium.eval(sheet.mediaQueries()))
- return;
-
- const RuleSet& ruleSet = sheet.contents()->ensureRuleSet();
- m_features.add(ruleSet.features());
-}
-
void ScopedStyleResolver::updateActiveStyleSheets()
{
Vector<RefPtr<CSSStyleSheet>> candidateSheets;
@@ -71,11 +60,36 @@ void ScopedStyleResolver::updateActiveStyleSheets()
// can only impact the host directly as Sky has no descendant selectors.
if (root.isShadowRoot())
toShadowRoot(root).host()->setNeedsStyleRecalc(SubtreeStyleChange);
+}
+
+bool ScopedStyleResolver::hasSelectorForId(const AtomicString& id) const
+{
+ for (auto& sheet : m_authorStyleSheets) {
+ RuleSet& ruleSet = sheet->contents()->ensureRuleSet();
+ if (ruleSet.features().hasSelectorForId(id))
+ return true;
+ }
+ return false;
+}
- m_features.clear();
+bool ScopedStyleResolver::hasSelectorForClass(const AtomicString& className) const
+{
+ for (auto& sheet : m_authorStyleSheets) {
+ RuleSet& ruleSet = sheet->contents()->ensureRuleSet();
+ if (ruleSet.features().hasSelectorForClass(className))
+ return true;
+ }
+ return false;
+}
- for (RefPtr<CSSStyleSheet>& sheet : m_authorStyleSheets)
- appendStyleSheet(*sheet);
+bool ScopedStyleResolver::hasSelectorForAttribute(const AtomicString& attributeName) const
+{
+ for (auto& sheet : m_authorStyleSheets) {
+ RuleSet& ruleSet = sheet->contents()->ensureRuleSet();
+ if (ruleSet.features().hasSelectorForAttribute(attributeName))
+ return true;
+ }
+ return false;
}
void ScopedStyleResolver::addStyleSheetCandidateNode(HTMLStyleElement& element)
@@ -91,10 +105,14 @@ void ScopedStyleResolver::removeStyleSheetCandidateNode(HTMLStyleElement& elemen
void ScopedStyleResolver::collectStyleSheets(Vector<RefPtr<CSSStyleSheet>>& sheets)
{
+ MediaQueryEvaluator medium(m_scope.document().view());
+
for (Node* node : m_styleSheetCandidateNodes) {
ASSERT(isHTMLStyleElement(*node));
- if (CSSStyleSheet* sheet = toHTMLStyleElement(node)->sheet())
+ CSSStyleSheet* sheet = toHTMLStyleElement(node)->sheet();
+ if (sheet && (!sheet->mediaQueries() || medium.eval(sheet->mediaQueries()))) {
sheets.append(sheet);
+ }
}
}
@@ -102,7 +120,7 @@ const StyleRuleKeyframes* ScopedStyleResolver::keyframeStylesForAnimation(String
{
for (auto& sheet : m_authorStyleSheets) {
// TODO(esprehn): Maybe just store the keyframes in a map?
- for (auto& rule : sheet->contents()->ruleSet().keyframesRules()) {
+ for (auto& rule : sheet->contents()->ensureRuleSet().keyframesRules()) {
if (rule->name() == animationName)
return rule.get();
}
@@ -113,7 +131,7 @@ const StyleRuleKeyframes* ScopedStyleResolver::keyframeStylesForAnimation(String
void ScopedStyleResolver::collectMatchingAuthorRules(ElementRuleCollector& collector, CascadeOrder cascadeOrder)
{
for (size_t i = 0; i < m_authorStyleSheets.size(); ++i) {
- MatchRequest matchRequest(&m_authorStyleSheets[i]->contents()->ruleSet(), m_authorStyleSheets[i].get(), i);
+ MatchRequest matchRequest(&m_authorStyleSheets[i]->contents()->ensureRuleSet(), m_authorStyleSheets[i].get(), i);
collector.collectMatchingRules(matchRequest, cascadeOrder);
}
}
@@ -121,7 +139,7 @@ void ScopedStyleResolver::collectMatchingAuthorRules(ElementRuleCollector& colle
void ScopedStyleResolver::collectMatchingHostRules(ElementRuleCollector& collector, CascadeOrder cascadeOrder)
{
for (size_t i = 0; i < m_authorStyleSheets.size(); ++i) {
- MatchRequest matchRequest(&m_authorStyleSheets[i]->contents()->ruleSet(), m_authorStyleSheets[i].get(), i);
+ MatchRequest matchRequest(&m_authorStyleSheets[i]->contents()->ensureRuleSet(), m_authorStyleSheets[i].get(), i);
collector.collectMatchingHostRules(matchRequest, cascadeOrder);
}
}
« no previous file with comments | « sky/engine/core/css/resolver/ScopedStyleResolver.h ('k') | sky/engine/core/dom/Element.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698