Diff
Modified: trunk/Source/WebCore/ChangeLog (154326 => 154327)
--- trunk/Source/WebCore/ChangeLog 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/ChangeLog 2013-08-20 15:27:41 UTC (rev 154327)
@@ -1,5 +1,69 @@
2013-08-20 Antti Koivisto <[email protected]>
+ <https://webkit.org/b/120017> Remove NodeRenderingTraversal::ParentDetails
+
+ Reviewed by Andreas Kling.
+
+ Remove this oddly factored type that is used to optionally collect some data during ComposedShadowTreeWalker parent traversal.
+
+ Also removed support for reset-style-inheritance attribute in InsertionPoint. We don't use or expose it.
+
+ * css/StyleResolver.cpp:
+ (WebCore::StyleResolver::State::initForStyleResolve):
+ (WebCore::StyleResolver::styleForElement):
+ * css/StyleResolver.h:
+ (WebCore::StyleResolver::State::State):
+ (WebCore::StyleResolver::State::elementLinkState):
+
+ Remove m_distributedToInsertionPoint State field. We never hit the cases where it was used.
+
+ * dom/ComposedShadowTreeWalker.cpp:
+ (WebCore::ComposedShadowTreeWalker::traverseSiblingOrBackToInsertionPoint):
+ (WebCore::ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents):
+ (WebCore::ComposedShadowTreeWalker::traverseParent):
+
+ Return null instead of setting childWasOutOfComposition to details object. That's what would happen anyway in the caller.
+
+ (WebCore::ComposedShadowTreeWalker::traverseParentInCurrentTree):
+ (WebCore::ComposedShadowTreeWalker::traverseParentBackToShadowRootOrHost):
+ * dom/ComposedShadowTreeWalker.h:
+ * dom/Node.cpp:
+ (WebCore::Node::insertionParentForBinding):
+ * dom/NodeRenderingContext.cpp:
+ (WebCore::NodeRenderingContext::NodeRenderingContext):
+ (WebCore::NodeRenderingContext::isOnEncapsulationBoundary):
+
+ Make this look up InsertionPoint directly intead of relying it being populated in m_parentDetails. The function is used only in
+ a few non-performance critical places.
+
+ (WebCore::NodeRenderingContext::resetStyleInheritance):
+
+ Return parent ShadowRoots resetStyleInheritance() flag instead of using m_parentDetails.
+
+ * dom/NodeRenderingContext.h:
+ * dom/NodeRenderingTraversal.cpp:
+ (WebCore::NodeRenderingTraversal::parentSlow):
+ * dom/NodeRenderingTraversal.h:
+ (WebCore::NodeRenderingTraversal::parent):
+
+ Remove ParentDetails.
+
+ * html/HTMLAttributeNames.in:
+ * html/shadow/InsertionPoint.cpp:
+
+ Remove unused resetStyleInheritance attribute.
+
+ (WebCore::InsertionPoint::removedFrom):
+ (WebCore::findInsertionPointOf):
+
+ Renamed for clarity.
+
+ * html/shadow/InsertionPoint.h:
+ * testing/Internals.cpp:
+ (WebCore::Internals::includerFor):
+
+2013-08-20 Antti Koivisto <[email protected]>
+
<https://webkit.org/b/120025> REGRESSION (r154254): fast/frames/frameset-frameborder-inheritance.html failing on Apple MountainLion Debug WK1 (Tests)
Reviewed by Anders Carlsson.
Modified: trunk/Source/WebCore/css/StyleResolver.cpp (154326 => 154327)
--- trunk/Source/WebCore/css/StyleResolver.cpp 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/css/StyleResolver.cpp 2013-08-20 15:27:41 UTC (rev 154327)
@@ -433,11 +433,9 @@
m_parentStyle = context.resetStyleInheritance() ? 0 :
parentStyle ? parentStyle :
m_parentNode ? m_parentNode->renderStyle() : 0;
- m_distributedToInsertionPoint = context.insertionPoint();
} else {
m_parentNode = 0;
m_parentStyle = parentStyle;
- m_distributedToInsertionPoint = false;
}
Node* docElement = e ? e->document()->documentElement() : 0;
@@ -809,7 +807,7 @@
State& state = m_state;
initElement(element);
state.initForStyleResolve(document(), element, defaultParent, regionForStyling);
- if (sharingBehavior == AllowStyleSharing && !state.distributedToInsertionPoint()) {
+ if (sharingBehavior == AllowStyleSharing) {
RenderStyle* sharedStyle = locateSharedStyle();
if (sharedStyle) {
state.clear();
@@ -824,14 +822,6 @@
state.setStyle(defaultStyleForElement());
state.setParentStyle(RenderStyle::clone(state.style()));
}
- // contenteditable attribute (implemented by -webkit-user-modify) should
- // be propagated from shadow host to distributed node.
- if (state.distributedToInsertionPoint()) {
- if (Element* parent = element->parentElement()) {
- if (RenderStyle* styleOfShadowHost = parent->renderStyle())
- state.style()->setUserModify(styleOfShadowHost->userModify());
- }
- }
if (element->isLink()) {
state.style()->setIsLink(true);
Modified: trunk/Source/WebCore/css/StyleResolver.h (154326 => 154327)
--- trunk/Source/WebCore/css/StyleResolver.h 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/css/StyleResolver.h 2013-08-20 15:27:41 UTC (rev 154327)
@@ -415,7 +415,6 @@
, m_rootElementStyle(0)
, m_regionForStyling(0)
, m_elementLinkState(NotInsideLink)
- , m_distributedToInsertionPoint(false)
, m_elementAffectedByClassRules(false)
, m_applyPropertyToRegularStyle(true)
, m_applyPropertyToVisitedLinkStyle(false)
@@ -446,7 +445,6 @@
const RenderRegion* regionForStyling() const { return m_regionForStyling; }
EInsideLink elementLinkState() const { return m_elementLinkState; }
- bool distributedToInsertionPoint() const { return m_distributedToInsertionPoint; }
void setElementAffectedByClassRules(bool isAffected) { m_elementAffectedByClassRules = isAffected; }
bool elementAffectedByClassRules() const { return m_elementAffectedByClassRules; }
@@ -500,8 +498,6 @@
EInsideLink m_elementLinkState;
- bool m_distributedToInsertionPoint;
-
bool m_elementAffectedByClassRules;
bool m_applyPropertyToRegularStyle;
Modified: trunk/Source/WebCore/dom/ComposedShadowTreeWalker.cpp (154326 => 154327)
--- trunk/Source/WebCore/dom/ComposedShadowTreeWalker.cpp 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/dom/ComposedShadowTreeWalker.cpp 2013-08-20 15:27:41 UTC (rev 154327)
@@ -153,7 +153,7 @@
if (!nodeCanBeDistributed(node))
return traverseSiblingInCurrentTree(node, direction);
- InsertionPoint* insertionPoint = resolveReprojection(node);
+ InsertionPoint* insertionPoint = findInsertionPointOf(node);
if (!insertionPoint)
return traverseSiblingInCurrentTree(node, direction);
@@ -178,14 +178,14 @@
return 0;
}
-inline Node* ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents(const Node* node, ParentTraversalDetails* details) const
+inline Node* ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents(const Node* node) const
{
ASSERT(node);
if (!node->isInsertionPoint())
return const_cast<Node*>(node);
const InsertionPoint* insertionPoint = toInsertionPoint(node);
return insertionPoint->hasDistribution() ? 0 :
- insertionPoint->isActive() ? traverseParent(node, details) : const_cast<Node*>(node);
+ insertionPoint->isActive() ? traverseParent(node) : const_cast<Node*>(node);
}
void ComposedShadowTreeWalker::parent()
@@ -197,7 +197,7 @@
// FIXME: Use an iterative algorithm so that it can be inlined.
// https://bugs.webkit.org/show_bug.cgi?id=90415
-Node* ComposedShadowTreeWalker::traverseParent(const Node* node, ParentTraversalDetails* details) const
+Node* ComposedShadowTreeWalker::traverseParent(const Node* node) const
{
if (node->isPseudoElement())
return toPseudoElement(node)->hostElement();
@@ -206,35 +206,26 @@
return 0;
if (nodeCanBeDistributed(node)) {
- if (InsertionPoint* insertionPoint = resolveReprojection(node)) {
- if (details)
- details->didTraverseInsertionPoint(insertionPoint);
- return traverseParent(insertionPoint, details);
- }
-
- // The node is a non-distributed light child or older shadow's child.
- if (details)
- details->childWasOutOfComposition();
+ if (InsertionPoint* insertionPoint = findInsertionPointOf(node))
+ return traverseParent(insertionPoint);
+ return 0;
}
- return traverseParentInCurrentTree(node, details);
+ return traverseParentInCurrentTree(node);
}
-inline Node* ComposedShadowTreeWalker::traverseParentInCurrentTree(const Node* node, ParentTraversalDetails* details) const
+inline Node* ComposedShadowTreeWalker::traverseParentInCurrentTree(const Node* node) const
{
if (Node* parent = node->parentNode())
- return parent->isShadowRoot() ? traverseParentBackToShadowRootOrHost(toShadowRoot(parent), details) : traverseNodeEscapingFallbackContents(parent, details);
+ return parent->isShadowRoot() ? traverseParentBackToShadowRootOrHost(toShadowRoot(parent)) : traverseNodeEscapingFallbackContents(parent);
return 0;
}
-Node* ComposedShadowTreeWalker::traverseParentBackToShadowRootOrHost(const ShadowRoot* shadowRoot, ParentTraversalDetails* details) const
+Node* ComposedShadowTreeWalker::traverseParentBackToShadowRootOrHost(const ShadowRoot* shadowRoot) const
{
ASSERT(shadowRoot);
- if (canCrossUpperBoundary()) {
- if (details)
- details->didTraverseShadowRoot(shadowRoot);
+ if (canCrossUpperBoundary())
return shadowRoot->hostElement();
- }
return const_cast<ShadowRoot*>(shadowRoot);
}
Modified: trunk/Source/WebCore/dom/ComposedShadowTreeWalker.h (154326 => 154327)
--- trunk/Source/WebCore/dom/ComposedShadowTreeWalker.h 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/dom/ComposedShadowTreeWalker.h 2013-08-20 15:27:41 UTC (rev 154327)
@@ -40,8 +40,6 @@
// https://bugs.webkit.org/show_bug.cgi?id=82702
class ComposedShadowTreeWalker {
public:
- typedef NodeRenderingTraversal::ParentDetails ParentTraversalDetails;
-
enum Policy {
CrossUpperBoundary,
DoNotCrossUpperBoundary,
@@ -71,11 +69,9 @@
void next();
void previous();
- Node* traverseParent(const Node*, ParentTraversalDetails* = 0) const;
+ Node* traverseParent(const Node*) const;
private:
- ComposedShadowTreeWalker(const Node*, ParentTraversalDetails*);
-
enum TraversalDirection {
TraversalDirectionForward,
TraversalDirectionBackward
@@ -119,9 +115,9 @@
static Node* escapeFallbackContentElement(const Node*, TraversalDirection);
- Node* traverseNodeEscapingFallbackContents(const Node*, ParentTraversalDetails* = 0) const;
- Node* traverseParentInCurrentTree(const Node*, ParentTraversalDetails* = 0) const;
- Node* traverseParentBackToShadowRootOrHost(const ShadowRoot*, ParentTraversalDetails* = 0) const;
+ Node* traverseNodeEscapingFallbackContents(const Node*) const;
+ Node* traverseParentInCurrentTree(const Node*) const;
+ Node* traverseParentBackToShadowRootOrHost(const ShadowRoot*) const;
const Node* m_node;
Policy m_policy;
Modified: trunk/Source/WebCore/dom/Node.cpp (154326 => 154327)
--- trunk/Source/WebCore/dom/Node.cpp 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/dom/Node.cpp 2013-08-20 15:27:41 UTC (rev 154327)
@@ -1039,7 +1039,7 @@
Node* Node::insertionParentForBinding() const
{
- return resolveReprojection(this);
+ return findInsertionPointOf(this);
}
Node::InsertionNotificationRequest Node::insertedInto(ContainerNode* insertionPoint)
Modified: trunk/Source/WebCore/dom/NodeRenderingContext.cpp (154326 => 154327)
--- trunk/Source/WebCore/dom/NodeRenderingContext.cpp 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/dom/NodeRenderingContext.cpp 2013-08-20 15:27:41 UTC (rev 154327)
@@ -56,7 +56,7 @@
: m_node(node)
, m_parentFlowRenderer(0)
{
- m_renderingParent = NodeRenderingTraversal::parent(node, &m_parentDetails);
+ m_renderingParent = NodeRenderingTraversal::parent(node);
}
NodeRenderingContext::NodeRenderingContext(Node* node, RenderStyle* style)
@@ -72,7 +72,7 @@
, m_style(context.resolvedStyle)
, m_parentFlowRenderer(0)
{
- m_renderingParent = NodeRenderingTraversal::parent(node, &m_parentDetails);
+ m_renderingParent = NodeRenderingTraversal::parent(node);
}
NodeRenderingContext::~NodeRenderingContext()
@@ -237,7 +237,9 @@
bool NodeRenderingContext::isOnEncapsulationBoundary() const
{
- return isOnUpperEncapsulationBoundary() || isLowerEncapsulationBoundary(m_parentDetails.insertionPoint()) || isLowerEncapsulationBoundary(m_node->parentNode());
+ return isOnUpperEncapsulationBoundary()
+ || isLowerEncapsulationBoundary(findInsertionPointOf(m_node))
+ || isLowerEncapsulationBoundary(m_node->parentNode());
}
bool NodeRenderingContext::isOnUpperEncapsulationBoundary() const
@@ -334,4 +336,10 @@
parentRenderer->addChild(newRenderer, nextRenderer);
}
+bool NodeRenderingContext::resetStyleInheritance() const
+{
+ ContainerNode* parent = m_node->parentNode();
+ return parent && parent->isShadowRoot() && toShadowRoot(parent)->resetStyleInheritance();
}
+
+}
Modified: trunk/Source/WebCore/dom/NodeRenderingContext.h (154326 => 154327)
--- trunk/Source/WebCore/dom/NodeRenderingContext.h 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/dom/NodeRenderingContext.h 2013-08-20 15:27:41 UTC (rev 154327)
@@ -59,7 +59,6 @@
RenderObject* parentRenderer() const;
RenderObject* nextRenderer() const;
RenderObject* previousRenderer() const;
- InsertionPoint* insertionPoint() const;
const RenderStyle* style() const;
@@ -73,7 +72,6 @@
Node* m_node;
ContainerNode* m_renderingParent;
- NodeRenderingTraversal::ParentDetails m_parentDetails;
RefPtr<RenderStyle> m_style;
RenderNamedFlowThread* m_parentFlowRenderer;
};
@@ -88,21 +86,11 @@
return m_renderingParent;
}
-inline bool NodeRenderingContext::resetStyleInheritance() const
-{
- return m_parentDetails.resetStyleInheritance();
-}
-
inline const RenderStyle* NodeRenderingContext::style() const
{
return m_style.get();
}
-inline InsertionPoint* NodeRenderingContext::insertionPoint() const
-{
- return m_parentDetails.insertionPoint();
-}
-
} // namespace WebCore
#endif
Modified: trunk/Source/WebCore/dom/NodeRenderingTraversal.cpp (154326 => 154327)
--- trunk/Source/WebCore/dom/NodeRenderingTraversal.cpp 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/dom/NodeRenderingTraversal.cpp 2013-08-20 15:27:41 UTC (rev 154327)
@@ -34,24 +34,10 @@
namespace NodeRenderingTraversal {
-void ParentDetails::didTraverseInsertionPoint(InsertionPoint* insertionPoint)
+ContainerNode* parentSlow(const Node* node)
{
- if (!m_insertionPoint) {
- m_insertionPoint = insertionPoint;
- m_resetStyleInheritance = m_resetStyleInheritance || insertionPoint->resetStyleInheritance();
- }
-}
-
-void ParentDetails::didTraverseShadowRoot(const ShadowRoot* root)
-{
- m_resetStyleInheritance = m_resetStyleInheritance || root->resetStyleInheritance();
-}
-
-ContainerNode* parentSlow(const Node* node, ParentDetails* details)
-{
ComposedShadowTreeWalker walker(node, ComposedShadowTreeWalker::CrossUpperBoundary, ComposedShadowTreeWalker::CanStartFromShadowBoundary);
- ContainerNode* found = toContainerNode(walker.traverseParent(walker.get(), details));
- return details->outOfComposition() ? 0 : found;
+ return toContainerNode(walker.traverseParent(walker.get()));
}
Node* nextSiblingSlow(const Node* node)
Modified: trunk/Source/WebCore/dom/NodeRenderingTraversal.h (154326 => 154327)
--- trunk/Source/WebCore/dom/NodeRenderingTraversal.h 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/dom/NodeRenderingTraversal.h 2013-08-20 15:27:41 UTC (rev 154327)
@@ -35,37 +35,8 @@
namespace NodeRenderingTraversal {
-class ParentDetails {
-public:
- ParentDetails()
- : m_insertionPoint(0)
- , m_resetStyleInheritance(false)
- , m_outOfComposition(false)
- { }
-
- InsertionPoint* insertionPoint() const { return m_insertionPoint; }
- bool resetStyleInheritance() const { return m_resetStyleInheritance; }
- bool outOfComposition() const { return m_outOfComposition; }
-
- void didTraverseInsertionPoint(InsertionPoint*);
- void didTraverseShadowRoot(const ShadowRoot*);
- void childWasOutOfComposition() { m_outOfComposition = true; }
-
- bool operator==(const ParentDetails& other)
- {
- return m_insertionPoint == other.m_insertionPoint
- && m_resetStyleInheritance == other.m_resetStyleInheritance
- && m_outOfComposition == other.m_outOfComposition;
- }
-
-private:
- InsertionPoint* m_insertionPoint;
- bool m_resetStyleInheritance;
- bool m_outOfComposition;
-};
-
-ContainerNode* parent(const Node*, ParentDetails*);
-ContainerNode* parentSlow(const Node*, ParentDetails*);
+ContainerNode* parent(const Node*);
+ContainerNode* parentSlow(const Node*);
Node* nextSibling(const Node*);
Node* nextSiblingSlow(const Node*);
Node* previousSibling(const Node*);
@@ -76,18 +47,16 @@
Node* parentInScope(const Node*);
Node* lastChildInScope(const Node*);
-inline ContainerNode* parent(const Node* node, ParentDetails* details)
+inline ContainerNode* parent(const Node* node)
{
if (!node->needsShadowTreeWalker()) {
#ifndef NDEBUG
- ParentDetails slowDetails;
- ASSERT(node->parentNode() == parentSlow(node, &slowDetails));
- ASSERT(slowDetails == *details);
+ ASSERT(node->parentNode() == parentSlow(node));
#endif
return node->parentNodeGuaranteedHostFree();
}
- return parentSlow(node, details);
+ return parentSlow(node);
}
inline Node* nextSibling(const Node* node)
Modified: trunk/Source/WebCore/html/HTMLAttributeNames.in (154326 => 154327)
--- trunk/Source/WebCore/html/HTMLAttributeNames.in 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/html/HTMLAttributeNames.in 2013-08-20 15:27:41 UTC (rev 154327)
@@ -283,7 +283,6 @@
readonly
rel
required
-reset-style-inheritance
results
rev
reversed
Modified: trunk/Source/WebCore/html/shadow/InsertionPoint.cpp (154326 => 154327)
--- trunk/Source/WebCore/html/shadow/InsertionPoint.cpp 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/html/shadow/InsertionPoint.cpp 2013-08-20 15:27:41 UTC (rev 154327)
@@ -147,26 +147,6 @@
HTMLElement::removedFrom(insertionPoint);
}
-
-void InsertionPoint::parseAttribute(const QualifiedName& name, const AtomicString& value)
-{
- if (name == reset_style_inheritanceAttr) {
- if (!inDocument() || !attached() || !isActive())
- return;
- containingShadowRoot()->hostElement()->setNeedsStyleRecalc();
- } else
- HTMLElement::parseAttribute(name, value);
-}
-
-bool InsertionPoint::resetStyleInheritance() const
-{
- return fastHasAttribute(reset_style_inheritanceAttr);
-}
-
-void InsertionPoint::setResetStyleInheritance(bool value)
-{
- setBooleanAttribute(reset_style_inheritanceAttr, value);
-}
Node* InsertionPoint::firstDistributed() const
{
@@ -208,7 +188,7 @@
return 0;
}
-InsertionPoint* resolveReprojection(const Node* projectedNode)
+InsertionPoint* findInsertionPointOf(const Node* projectedNode)
{
if (ShadowRoot* shadowRoot = shadowRootOfParentForDistribution(projectedNode)) {
if (ShadowRoot* root = projectedNode->containingShadowRoot())
Modified: trunk/Source/WebCore/html/shadow/InsertionPoint.h (154326 => 154327)
--- trunk/Source/WebCore/html/shadow/InsertionPoint.h 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/html/shadow/InsertionPoint.h 2013-08-20 15:27:41 UTC (rev 154327)
@@ -62,9 +62,6 @@
virtual MatchType matchTypeFor(Node*) const { return AlwaysMatches; }
virtual Type insertionPointType() const { return InternalType; }
- bool resetStyleInheritance() const;
- void setResetStyleInheritance(bool);
-
virtual void willAttachRenderers() OVERRIDE;
virtual void willDetachRenderers() OVERRIDE;
@@ -81,7 +78,6 @@
virtual void childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta) OVERRIDE;
virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE;
virtual void removedFrom(ContainerNode*) OVERRIDE;
- virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
virtual bool isInsertionPointNode() const OVERRIDE { return true; }
private:
@@ -145,7 +141,7 @@
return 0;
}
-InsertionPoint* resolveReprojection(const Node*);
+InsertionPoint* findInsertionPointOf(const Node*);
} // namespace WebCore
Modified: trunk/Source/WebCore/testing/Internals.cpp (154326 => 154327)
--- trunk/Source/WebCore/testing/Internals.cpp 2013-08-20 15:25:04 UTC (rev 154326)
+++ trunk/Source/WebCore/testing/Internals.cpp 2013-08-20 15:27:41 UTC (rev 154327)
@@ -668,14 +668,10 @@
}
}
-Element* Internals::includerFor(Node* node, ExceptionCode& ec)
+Element* Internals::includerFor(Node*, ExceptionCode& ec)
{
- if (!node) {
- ec = INVALID_ACCESS_ERR;
- return 0;
- }
-
- return NodeRenderingContext(node).insertionPoint();
+ ec = INVALID_ACCESS_ERR;
+ return 0;
}
String Internals::shadowPseudoId(Element* element, ExceptionCode& ec)