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 |