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

Unified Diff: Source/core/css/resolver/ElementResolveContext.cpp

Issue 686723002: Improve RAII of StyleResolverState. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: When baseRenderStyle!=0: 1) don't inherit, and 2) use defaultStyleForElement as fallback parent. Created 6 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/css/resolver/ElementResolveContext.cpp
diff --git a/Source/core/css/resolver/ElementResolveContext.cpp b/Source/core/css/resolver/ElementResolveContext.cpp
index 40008283689d0ecd3035fb2dba264d1b7621c678..f79dc6fff68f8360fcde56d94b594dcb1a93593f 100644
--- a/Source/core/css/resolver/ElementResolveContext.cpp
+++ b/Source/core/css/resolver/ElementResolveContext.cpp
@@ -22,37 +22,42 @@
#include "config.h"
#include "core/css/resolver/ElementResolveContext.h"
+#include "core/animation/ActiveAnimations.h"
#include "core/dom/Node.h"
#include "core/dom/NodeRenderStyle.h"
#include "core/dom/NodeRenderingTraversal.h"
#include "core/dom/VisitedLinkState.h"
+#include "core/rendering/style/RenderStyle.h"
namespace blink {
-ElementResolveContext::ElementResolveContext(const Document& document)
- : m_element(nullptr)
- , m_parentNode(nullptr)
- , m_rootElementStyle(document.documentElement() ? document.documentElement()->renderStyle() : document.renderStyle())
- , m_elementLinkState(NotInsideLink)
- , m_distributedToInsertionPoint(false)
+static RenderStyle* findRootElementStyle(const Document& document, Element* element)
{
+ Node* documentElement = document.documentElement();
+ if (documentElement && element != documentElement && documentElement->renderStyle())
+ return documentElement->renderStyle();
+ return document.renderStyle();
}
-ElementResolveContext::ElementResolveContext(Element& element)
- : m_element(&element)
- , m_elementLinkState(element.document().visitedLinkState().determineLinkState(element))
+ElementResolveContext::ElementResolveContext(Document& document, Element* element, RenderStyle* parentStyle)
+ : m_document(document)
+ , m_element(element)
+ , m_parentNode(nullptr)
+ , m_parentStyle(parentStyle)
+ , m_activeAnimations(element ? element->activeAnimations() : nullptr)
+ , m_baseRenderStyle(m_activeAnimations ? m_activeAnimations->baseRenderStyle() : nullptr)
+ , m_rootElementStyle(findRootElementStyle(document, element))
+ , m_elementLinkState(element ? document.visitedLinkState().determineLinkState(*element) : NotInsideLink)
, m_distributedToInsertionPoint(false)
{
- NodeRenderingTraversal::ParentDetails parentDetails;
- m_parentNode = NodeRenderingTraversal::parent(&element, &parentDetails);
- m_distributedToInsertionPoint = parentDetails.insertionPoint();
+ if (element) {
+ NodeRenderingTraversal::ParentDetails parentDetails;
+ m_parentNode = NodeRenderingTraversal::parent(element, &parentDetails);
+ m_distributedToInsertionPoint = parentDetails.insertionPoint();
- const Document& document = element.document();
- Node* documentElement = document.documentElement();
- RenderStyle* documentStyle = document.renderStyle();
- m_rootElementStyle = documentElement && element != documentElement ? documentElement->renderStyle() : documentStyle;
- if (!m_rootElementStyle)
- m_rootElementStyle = documentStyle;
+ if (!m_parentStyle && m_parentNode)
+ m_parentStyle = m_parentNode->renderStyle();
+ }
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698