Modified: trunk/Source/WebCore/ChangeLog (108769 => 108770)
--- trunk/Source/WebCore/ChangeLog 2012-02-24 11:58:30 UTC (rev 108769)
+++ trunk/Source/WebCore/ChangeLog 2012-02-24 12:02:11 UTC (rev 108770)
@@ -1,3 +1,24 @@
+2012-02-24 Hayato Ito <[email protected]>
+
+ Make Node::showTreeForThis (and Node::showTreeForThisAcrossFrame) dump multiple shadow roots.
+ https://bugs.webkit.org/show_bug.cgi?id=79351
+
+ Reviewed by Dimitri Glazkov.
+
+ No new tests since these utility functions are only available in debug build.
+ I manually tested in GDB session.
+
+ * dom/Node.cpp:
+ (WebCore::oldestShadowRootFor):
+ (WebCore::traverseTreeAndMark):
+ (WebCore::parentOrHostOrFrameOwner):
+ (WebCore::showSubTreeAcrossFrame):
+ * dom/ShadowRoot.h:
+ (WebCore::ShadowRoot::youngerShadowRoot):
+ (WebCore::ShadowRoot::olderShadowRoot):
+ (WebCore::toShadowRoot):
+ (WebCore):
+
2012-02-24 Pavel Feldman <[email protected]>
Not reviewed: follow up to inspector's r108331, using more general condition.
Modified: trunk/Source/WebCore/dom/Node.cpp (108769 => 108770)
--- trunk/Source/WebCore/dom/Node.cpp 2012-02-24 11:58:30 UTC (rev 108769)
+++ trunk/Source/WebCore/dom/Node.cpp 2012-02-24 12:02:11 UTC (rev 108770)
@@ -809,7 +809,7 @@
return false;
}
-inline static ShadowRoot* oldestShadowRoot(Node* node)
+inline static ShadowRoot* oldestShadowRootFor(const Node* node)
{
return node->isElementNode() && toElement(node)->hasShadowRoot() ? toElement(node)->shadowRootList()->oldestShadowRoot() : 0;
}
@@ -2269,12 +2269,11 @@
indent += "\t";
fprintf(stderr, "%s", indent.utf8().data());
node->showNode();
-
if (node->isShadowRoot()) {
- if (ShadowRoot* youngerShadowRoot = toShadowRoot(const_cast<Node*>(node))->youngerShadowRoot())
+ if (ShadowRoot* youngerShadowRoot = toShadowRoot(node)->youngerShadowRoot())
traverseTreeAndMark(indent + "\t", youngerShadowRoot, markedNode1, markedLabel1, markedNode2, markedLabel2);
- } else if (ShadowRoot* rootNode = oldestShadowRoot(const_cast<Node*>(node)))
- traverseTreeAndMark(indent + "\t", rootNode, markedNode1, markedLabel1, markedNode2, markedLabel2);
+ } else if (ShadowRoot* oldestShadowRoot = oldestShadowRootFor(node))
+ traverseTreeAndMark(indent + "\t", oldestShadowRoot, markedNode1, markedLabel1, markedNode2, markedLabel2);
}
}
@@ -2304,7 +2303,7 @@
strncpy(buffer, result.utf8().data(), length - 1);
}
-static ContainerNode* parentOrHostOrFrameOwner(Node* node)
+static ContainerNode* parentOrHostOrFrameOwner(const Node* node)
{
ContainerNode* parent = node->parentOrHostNode();
if (!parent && node->document() && node->document()->frame())
@@ -2312,19 +2311,21 @@
return parent;
}
-static void showSubTreeAcrossFrame(Node* node, const Node* markedNode, const String& indent)
+static void showSubTreeAcrossFrame(const Node* node, const Node* markedNode, const String& indent)
{
if (node == markedNode)
fputs("*", stderr);
fputs(indent.utf8().data(), stderr);
node->showNode();
- if (node->isFrameOwnerElement())
- showSubTreeAcrossFrame(static_cast<HTMLFrameOwnerElement*>(node)->contentDocument(), markedNode, indent + "\t");
- if (node->isShadowRoot()) {
- if (ShadowRoot* youngerShadowRoot = toShadowRoot(node)->youngerShadowRoot())
- showSubTreeAcrossFrame(youngerShadowRoot, markedNode, indent + "\t");
- } else if (ShadowRoot* shadowRoot = oldestShadowRoot(node))
- showSubTreeAcrossFrame(shadowRoot, markedNode, indent + "\t");
+ if (node->isShadowRoot()) {
+ if (ShadowRoot* youngerShadowRoot = toShadowRoot(node)->youngerShadowRoot())
+ showSubTreeAcrossFrame(youngerShadowRoot, markedNode, indent + "\t");
+ } else {
+ if (node->isFrameOwnerElement())
+ showSubTreeAcrossFrame(static_cast<const HTMLFrameOwnerElement*>(node)->contentDocument(), markedNode, indent + "\t");
+ if (ShadowRoot* oldestShadowRoot = oldestShadowRootFor(node))
+ showSubTreeAcrossFrame(oldestShadowRoot, markedNode, indent + "\t");
+ }
for (Node* child = node->firstChild(); child; child = child->nextSibling())
showSubTreeAcrossFrame(child, markedNode, indent + "\t");
}
Modified: trunk/Source/WebCore/dom/ShadowRoot.h (108769 => 108770)
--- trunk/Source/WebCore/dom/ShadowRoot.h 2012-02-24 11:58:30 UTC (rev 108769)
+++ trunk/Source/WebCore/dom/ShadowRoot.h 2012-02-24 12:02:11 UTC (rev 108770)
@@ -72,8 +72,8 @@
Element* host() const { return shadowHost(); }
ShadowRootList* list() const;
- ShadowRoot* youngerShadowRoot() { return prev(); }
- ShadowRoot* olderShadowRoot() { return next(); }
+ ShadowRoot* youngerShadowRoot() const { return prev(); }
+ ShadowRoot* olderShadowRoot() const { return next(); }
bool hasContentElement() const;
@@ -90,12 +90,17 @@
bool m_applyAuthorSheets : 1;
};
-inline ShadowRoot* toShadowRoot(Node* node)
+inline const ShadowRoot* toShadowRoot(const Node* node)
{
ASSERT(!node || node->isShadowRoot());
- return static_cast<ShadowRoot*>(node);
+ return static_cast<const ShadowRoot*>(node);
}
+inline ShadowRoot* toShadowRoot(Node* node)
+{
+ return const_cast<ShadowRoot*>(toShadowRoot(static_cast<const Node*>(node)));
+}
+
} // namespace
#endif