Diff
Modified: trunk/Source/WebCore/ChangeLog (155302 => 155303)
--- trunk/Source/WebCore/ChangeLog 2013-09-08 11:02:24 UTC (rev 155302)
+++ trunk/Source/WebCore/ChangeLog 2013-09-08 11:30:17 UTC (rev 155303)
@@ -1,3 +1,42 @@
+2013-09-08 Antti Koivisto <[email protected]>
+
+ Rename needsShadowTreeWalker
+ https://bugs.webkit.org/show_bug.cgi?id=121005
+
+ Reviewed by Andreas Kling.
+
+ Rename to needsNodeRenderingTraversalSlowPath.
+
+ * dom/ContainerNode.h:
+ (WebCore::Node::needsNodeRenderingTraversalSlowPath):
+ * dom/Element.cpp:
+ (WebCore::shouldUseNodeRenderingTraversalSlowPath):
+ (WebCore::Element::resetNeedsNodeRenderingTraversalSlowPath):
+
+ Only Elements can have this flag. Move the code here from Node.
+
+ (WebCore::Element::addShadowRoot):
+ (WebCore::Element::setBeforePseudoElement):
+ (WebCore::Element::setAfterPseudoElement):
+ (WebCore::Element::clearBeforePseudoElement):
+ (WebCore::Element::clearAfterPseudoElement):
+
+ Reset after clear too.
+
+ * dom/Element.h:
+ * dom/Element.h:
+ * dom/Node.cpp:
+ * dom/Node.h:
+ (WebCore::Node::isInsertionPoint):
+ (WebCore::Node::setNeedsNodeRenderingTraversalSlowPath):
+
+ Make protected.
+
+ * dom/NodeRenderingTraversal.h:
+ (WebCore::NodeRenderingTraversal::parent):
+ (WebCore::NodeRenderingTraversal::nextSibling):
+ (WebCore::NodeRenderingTraversal::previousSibling):
+
2013-09-08 Andreas Kling <[email protected]>
Render{Block,Inline}::lineBoxes() should return a reference.
Modified: trunk/Source/WebCore/dom/ContainerNode.h (155302 => 155303)
--- trunk/Source/WebCore/dom/ContainerNode.h 2013-09-08 11:02:24 UTC (rev 155302)
+++ trunk/Source/WebCore/dom/ContainerNode.h 2013-09-08 11:30:17 UTC (rev 155303)
@@ -220,12 +220,12 @@
return highest;
}
-inline bool Node::needsShadowTreeWalker() const
+inline bool Node::needsNodeRenderingTraversalSlowPath() const
{
- if (getFlag(NeedsShadowTreeWalkerFlag))
+ if (getFlag(NeedsNodeRenderingTraversalSlowPathFlag))
return true;
ContainerNode* parent = parentOrShadowHostNode();
- return parent && parent->getFlag(NeedsShadowTreeWalkerFlag);
+ return parent && parent->getFlag(NeedsNodeRenderingTraversalSlowPathFlag);
}
inline bool Node::isTreeScope() const
Modified: trunk/Source/WebCore/dom/Element.cpp (155302 => 155303)
--- trunk/Source/WebCore/dom/Element.cpp 2013-09-08 11:02:24 UTC (rev 155302)
+++ trunk/Source/WebCore/dom/Element.cpp 2013-09-08 11:30:17 UTC (rev 155303)
@@ -1408,6 +1408,20 @@
setNeedsStyleRecalc();
}
+static bool shouldUseNodeRenderingTraversalSlowPath(const Element& element)
+{
+ if (element.isShadowRoot())
+ return true;
+ if (element.isPseudoElement() || element.beforePseudoElement() || element.afterPseudoElement())
+ return true;
+ return element.isInsertionPoint() || element.shadowRoot();
+}
+
+void Element::resetNeedsNodeRenderingTraversalSlowPath()
+{
+ setNeedsNodeRenderingTraversalSlowPath(shouldUseNodeRenderingTraversalSlowPath(*this));
+}
+
void Element::addShadowRoot(PassRefPtr<ShadowRoot> newShadowRoot)
{
ASSERT(!shadowRoot());
@@ -1421,8 +1435,7 @@
ChildNodeInsertionNotifier(this).notify(shadowRoot);
- // Existence of shadow roots requires the host and its children to do traversal using ComposedShadowTreeWalker.
- setNeedsShadowTreeWalker();
+ resetNeedsNodeRenderingTraversalSlowPath();
// FIXME(94905): ShadowHost should be reattached during recalcStyle.
// Set some flag here and recreate shadow hosts' renderer in
@@ -2349,13 +2362,13 @@
void Element::setBeforePseudoElement(PassRefPtr<PseudoElement> element)
{
ensureElementRareData().setBeforePseudoElement(element);
- resetNeedsShadowTreeWalker();
+ resetNeedsNodeRenderingTraversalSlowPath();
}
void Element::setAfterPseudoElement(PassRefPtr<PseudoElement> element)
{
ensureElementRareData().setAfterPseudoElement(element);
- resetNeedsShadowTreeWalker();
+ resetNeedsNodeRenderingTraversalSlowPath();
}
static void disconnectPseudoElement(PseudoElement* pseudoElement)
@@ -2374,6 +2387,7 @@
return;
disconnectPseudoElement(elementRareData()->beforePseudoElement());
elementRareData()->setBeforePseudoElement(nullptr);
+ resetNeedsNodeRenderingTraversalSlowPath();
}
void Element::clearAfterPseudoElement()
@@ -2382,6 +2396,7 @@
return;
disconnectPseudoElement(elementRareData()->afterPseudoElement());
elementRareData()->setAfterPseudoElement(nullptr);
+ resetNeedsNodeRenderingTraversalSlowPath();
}
// ElementTraversal API
Modified: trunk/Source/WebCore/dom/Element.h (155302 => 155303)
--- trunk/Source/WebCore/dom/Element.h 2013-09-08 11:02:24 UTC (rev 155302)
+++ trunk/Source/WebCore/dom/Element.h 2013-09-08 11:30:17 UTC (rev 155303)
@@ -590,6 +590,7 @@
void setAfterPseudoElement(PassRefPtr<PseudoElement>);
void clearBeforePseudoElement();
void clearAfterPseudoElement();
+ void resetNeedsNodeRenderingTraversalSlowPath();
virtual bool areAuthorShadowsAllowed() const { return true; }
virtual void didAddUserAgentShadowRoot(ShadowRoot*) { }
Modified: trunk/Source/WebCore/dom/Node.cpp (155302 => 155303)
--- trunk/Source/WebCore/dom/Node.cpp 2013-09-08 11:02:24 UTC (rev 155302)
+++ trunk/Source/WebCore/dom/Node.cpp 2013-09-08 11:30:17 UTC (rev 155303)
@@ -1045,18 +1045,6 @@
clearFlag(IsInShadowTreeFlag);
}
-bool Node::needsShadowTreeWalkerSlow() const
-{
- if (isShadowRoot())
- return true;
- if (!isElementNode())
- return false;
- const Element* asElement = toElement(this);
- if (asElement->isPseudoElement() || asElement->beforePseudoElement() || asElement->afterPseudoElement())
- return true;
- return asElement->isInsertionPoint() || asElement->shadowRoot();
-}
-
bool Node::isRootEditableElement() const
{
return rendererIsEditable() && isElementNode() && (!parentNode() || !parentNode()->rendererIsEditable()
Modified: trunk/Source/WebCore/dom/Node.h (155302 => 155303)
--- trunk/Source/WebCore/dom/Node.h 2013-09-08 11:02:24 UTC (rev 155302)
+++ trunk/Source/WebCore/dom/Node.h 2013-09-08 11:30:17 UTC (rev 155303)
@@ -255,14 +255,11 @@
bool isTreeScope() const;
bool isDocumentFragment() const { return getFlag(IsDocumentFragmentFlag); }
bool isShadowRoot() const { return isDocumentFragment() && isTreeScope(); }
- bool isInsertionPoint() const { return getFlag(NeedsShadowTreeWalkerFlag) && isInsertionPointNode(); }
+ bool isInsertionPoint() const { return getFlag(NeedsNodeRenderingTraversalSlowPathFlag) && isInsertionPointNode(); }
// Returns Node rather than InsertionPoint. Should be used only for language bindings.
Node* insertionParentForBinding() const;
- bool needsShadowTreeWalker() const;
- bool needsShadowTreeWalkerSlow() const;
- void setNeedsShadowTreeWalker() { setFlag(NeedsShadowTreeWalkerFlag); }
- void resetNeedsShadowTreeWalker() { setFlag(needsShadowTreeWalkerSlow(), NeedsShadowTreeWalkerFlag); }
+ bool needsNodeRenderingTraversalSlowPath() const;
bool inNamedFlow() const { return getFlag(InNamedFlowFlag); }
bool hasCustomStyleResolveCallbacks() const { return getFlag(HasCustomStyleResolveCallbacksFlag); }
@@ -633,7 +630,7 @@
HasCustomStyleResolveCallbacksFlag = 1 << 21,
HasScopedHTMLStyleChildFlag = 1 << 22,
HasEventTargetDataFlag = 1 << 23,
- NeedsShadowTreeWalkerFlag = 1 << 25,
+ NeedsNodeRenderingTraversalSlowPathFlag = 1 << 25,
IsInShadowTreeFlag = 1 << 26,
DefaultNodeFlags = IsParsingChildrenFinishedFlag
@@ -652,14 +649,14 @@
CreateText = DefaultNodeFlags | IsTextFlag,
CreateContainer = DefaultNodeFlags | IsContainerFlag,
CreateElement = CreateContainer | IsElementFlag,
- CreatePseudoElement = CreateElement | InDocumentFlag | NeedsShadowTreeWalkerFlag,
- CreateShadowRoot = CreateContainer | IsDocumentFragmentFlag | NeedsShadowTreeWalkerFlag | IsInShadowTreeFlag,
+ CreatePseudoElement = CreateElement | InDocumentFlag | NeedsNodeRenderingTraversalSlowPathFlag,
+ CreateShadowRoot = CreateContainer | IsDocumentFragmentFlag | NeedsNodeRenderingTraversalSlowPathFlag | IsInShadowTreeFlag,
CreateDocumentFragment = CreateContainer | IsDocumentFragmentFlag,
CreateStyledElement = CreateElement | IsStyledElementFlag,
CreateHTMLElement = CreateStyledElement | IsHTMLFlag,
CreateSVGElement = CreateStyledElement | IsSVGFlag | HasCustomStyleResolveCallbacksFlag,
CreateDocument = CreateContainer | InDocumentFlag,
- CreateInsertionPoint = CreateHTMLElement | NeedsShadowTreeWalkerFlag,
+ CreateInsertionPoint = CreateHTMLElement | NeedsNodeRenderingTraversalSlowPathFlag,
CreateEditingText = CreateText | IsEditingTextFlag,
};
Node(Document*, ConstructionType);
@@ -678,6 +675,8 @@
void setHasCustomStyleResolveCallbacks() { setFlag(true, HasCustomStyleResolveCallbacksFlag); }
+ void setNeedsNodeRenderingTraversalSlowPath(bool flag) { setFlag(flag, NeedsNodeRenderingTraversalSlowPathFlag); }
+
Document* documentInternal() const { return treeScope()->documentScope(); }
void setTreeScope(TreeScope* scope) { m_treeScope = scope; }
Modified: trunk/Source/WebCore/dom/NodeRenderingTraversal.h (155302 => 155303)
--- trunk/Source/WebCore/dom/NodeRenderingTraversal.h 2013-09-08 11:02:24 UTC (rev 155302)
+++ trunk/Source/WebCore/dom/NodeRenderingTraversal.h 2013-09-08 11:30:17 UTC (rev 155303)
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2012 Google Inc. All rights reserved.
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -27,56 +28,50 @@
#ifndef NodeRenderingTraversal_h
#define NodeRenderingTraversal_h
-#include "Element.h"
+#include "ContainerNode.h"
namespace WebCore {
-class InsertionPoint;
-
namespace NodeRenderingTraversal {
ContainerNode* parent(const Node*);
-ContainerNode* parentSlow(const Node*);
Node* nextSibling(const Node*);
-Node* nextSiblingSlow(const Node*);
Node* previousSibling(const Node*);
-Node* previousSiblingSlow(const Node*);
Node* nextInScope(const Node*);
Node* previousInScope(const Node*);
Node* parentInScope(const Node*);
Node* lastChildInScope(const Node*);
+ContainerNode* parentSlow(const Node*);
+Node* nextSiblingSlow(const Node*);
+Node* previousSiblingSlow(const Node*);
+
inline ContainerNode* parent(const Node* node)
{
- if (!node->needsShadowTreeWalker()) {
-#ifndef NDEBUG
- ASSERT(node->parentNode() == parentSlow(node));
-#endif
- return node->parentNodeGuaranteedHostFree();
- }
+ if (node->needsNodeRenderingTraversalSlowPath())
+ return parentSlow(node);
- return parentSlow(node);
+ ASSERT(node->parentNode() == parentSlow(node));
+ return node->parentNodeGuaranteedHostFree();
}
inline Node* nextSibling(const Node* node)
{
- if (!node->needsShadowTreeWalker()) {
- ASSERT(nextSiblingSlow(node) == node->nextSibling());
- return node->nextSibling();
- }
+ if (node->needsNodeRenderingTraversalSlowPath())
+ return nextSiblingSlow(node);
- return nextSiblingSlow(node);
+ ASSERT(nextSiblingSlow(node) == node->nextSibling());
+ return node->nextSibling();
}
inline Node* previousSibling(const Node* node)
{
- if (!node->needsShadowTreeWalker()) {
- ASSERT(previousSiblingSlow(node) == node->previousSibling());
- return node->previousSibling();
- }
+ if (node->needsNodeRenderingTraversalSlowPath())
+ return previousSiblingSlow(node);
- return previousSiblingSlow(node);
+ ASSERT(previousSiblingSlow(node) == node->previousSibling());
+ return node->previousSibling();
}
}