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

Unified Diff: Source/core/dom/Document.cpp

Issue 42543007: StyleResolver should update RuleSets lazily. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 2 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
Index: Source/core/dom/Document.cpp
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp
index 00c2016fa9359e21c64a70928aa004df5967e4ef..6f8bfcf487a6385f606b878462b2476f91aa5e8d 100644
--- a/Source/core/dom/Document.cpp
+++ b/Source/core/dom/Document.cpp
@@ -635,6 +635,8 @@ MediaQueryMatcher& Document::mediaQueryMatcher()
{
if (!m_mediaQueryMatcher)
m_mediaQueryMatcher = MediaQueryMatcher::create(this);
+ if (m_styleResolver && m_styleResolver->hasPendingAuthorStyleSheets())
+ m_styleResolver->appendPendingAuthorStyleSheets();
return *m_mediaQueryMatcher;
}
@@ -1700,6 +1702,9 @@ void Document::recalcStyle(StyleRecalcChange change)
if (m_elemSheet && m_elemSheet->contents()->usesRemUnits())
m_styleEngine->setUsesRemUnit(true);
+ if (m_styleResolver && m_styleResolver->hasPendingAuthorStyleSheets())
+ m_styleResolver->appendPendingAuthorStyleSheets();
esprehn 2013/10/25 02:37:58 You shouldn't be repeated this everywhere. Just li
tasak 2013/10/25 10:10:10 I see. I added an inline function to StyleResolver
+
{
PostAttachCallbacks::SuspendScope suspendPostAttachCallbacks;
RenderWidget::UpdateSuspendScope suspendWidgetHierarchyUpdates;
@@ -1887,12 +1892,18 @@ PassRefPtr<RenderStyle> Document::styleForElementIgnoringPendingStylesheets(Elem
{
ASSERT_ARG(element, element->document() == this);
TemporaryChange<bool> ignoreStyleSheets(m_ignorePendingStylesheets, true);
- return styleResolver()->styleForElement(element, element->parentNode() ? element->parentNode()->computedStyle() : 0);
+ StyleResolver* resolver = styleResolver();
+ if (resolver->hasPendingAuthorStyleSheets())
+ resolver->appendPendingAuthorStyleSheets();
esprehn 2013/10/25 02:37:58 This doesn't make sense. You call appendPendingAut
tasak 2013/10/25 10:10:10 Yeah, this is my mistake. Since I removed the call
+ return resolver->styleForElement(element, element->parentNode() ? element->parentNode()->computedStyle() : 0);
}
PassRefPtr<RenderStyle> Document::styleForPage(int pageIndex)
{
- return styleResolver()->styleForPage(pageIndex);
+ StyleResolver* resolver = styleResolver();
+ if (resolver->hasPendingAuthorStyleSheets())
+ resolver->appendPendingAuthorStyleSheets();
esprehn 2013/10/25 02:37:58 Same.
tasak 2013/10/25 10:10:10 Done.
+ return resolver->styleForPage(pageIndex);
}
bool Document::isPageBoxVisible(int pageIndex)
@@ -1958,6 +1969,14 @@ void Document::createStyleResolver()
m_styleEngine->combineCSSFeatureFlags(m_styleResolver->ruleFeatureSet());
}
+void Document::appendPendingAuthorStyleSheets()
+{
+ ASSERT(m_styleResolver);
+ if (!m_styleResolver->hasPendingAuthorStyleSheets())
+ return;
+ m_styleResolver->appendPendingAuthorStyleSheets();
+}
+
void Document::clearStyleResolver()
{
m_styleResolver.clear();

Powered by Google App Engine
This is Rietveld 408576698