| Index: third_party/WebKit/Source/core/dom/Node.cpp
|
| diff --git a/third_party/WebKit/Source/core/dom/Node.cpp b/third_party/WebKit/Source/core/dom/Node.cpp
|
| index a32416e80d40a930b4859700271e31e2527f5b38..a1b6cb6a1a4ae331af98e9d99226d137f7914721 100644
|
| --- a/third_party/WebKit/Source/core/dom/Node.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/Node.cpp
|
| @@ -1536,6 +1536,15 @@ std::ostream& operator<<(std::ostream& ostream, const Node* node)
|
|
|
| #ifndef NDEBUG
|
|
|
| +String Node::toString() const
|
| +{
|
| + // TODO(tkent): We implemented toString() with operator<<. We should
|
| + // implement operator<< with toString() instead.
|
| + std::stringstream stream;
|
| + stream << *this;
|
| + return String(stream.str().c_str());
|
| +}
|
| +
|
| void Node::showNode(const char* prefix) const
|
| {
|
| std::stringstream stream;
|
| @@ -1546,14 +1555,14 @@ void Node::showNode(const char* prefix) const
|
| WTFLogAlways("%s", stream.str().c_str());
|
| }
|
|
|
| -void Node::showTreeForThis() const
|
| +String Node::toTreeStringForThis() const
|
| {
|
| - showTreeAndMark(this, "*");
|
| + return toMarkedTreeString(this, "*");
|
| }
|
|
|
| -void Node::showTreeForThisInFlatTree() const
|
| +String Node::toFlatTreeStringForThis() const
|
| {
|
| - showTreeAndMarkInFlatTree(this, "*");
|
| + return toMarkedFlatTreeString(this, "*");
|
| }
|
|
|
| void Node::printNodePathTo(std::ostream& stream) const
|
| @@ -1609,7 +1618,7 @@ void Node::printNodePathTo(std::ostream& stream) const
|
| }
|
| }
|
|
|
| -static void traverseTreeAndMark(const String& baseIndent, const Node* rootNode, const Node* markedNode1, const char* markedLabel1, const Node* markedNode2, const char* markedLabel2)
|
| +static void appendMarkedTree(const String& baseIndent, const Node* rootNode, const Node* markedNode1, const char* markedLabel1, const Node* markedNode2, const char* markedLabel2, StringBuilder& builder)
|
| {
|
| for (const Node& node : NodeTraversal::inclusiveDescendantsOf(*rootNode)) {
|
| StringBuilder indent;
|
| @@ -1620,31 +1629,33 @@ static void traverseTreeAndMark(const String& baseIndent, const Node* rootNode,
|
| indent.append(baseIndent);
|
| for (const Node* tmpNode = &node; tmpNode && tmpNode != rootNode; tmpNode = tmpNode->parentOrShadowHostNode())
|
| indent.append('\t');
|
| - node.showNode(indent.toString().utf8().data());
|
| + builder.append(indent);
|
| + builder.append(node.toString());
|
| + builder.append("\n");
|
| indent.append('\t');
|
|
|
| if (node.isElementNode()) {
|
| const Element& element = toElement(node);
|
| if (Element* pseudo = element.pseudoElement(PseudoIdBefore))
|
| - traverseTreeAndMark(indent.toString(), pseudo, markedNode1, markedLabel1, markedNode2, markedLabel2);
|
| + appendMarkedTree(indent.toString(), pseudo, markedNode1, markedLabel1, markedNode2, markedLabel2, builder);
|
| if (Element* pseudo = element.pseudoElement(PseudoIdAfter))
|
| - traverseTreeAndMark(indent.toString(), pseudo, markedNode1, markedLabel1, markedNode2, markedLabel2);
|
| + appendMarkedTree(indent.toString(), pseudo, markedNode1, markedLabel1, markedNode2, markedLabel2, builder);
|
| if (Element* pseudo = element.pseudoElement(PseudoIdFirstLetter))
|
| - traverseTreeAndMark(indent.toString(), pseudo, markedNode1, markedLabel1, markedNode2, markedLabel2);
|
| + appendMarkedTree(indent.toString(), pseudo, markedNode1, markedLabel1, markedNode2, markedLabel2, builder);
|
| if (Element* pseudo = element.pseudoElement(PseudoIdBackdrop))
|
| - traverseTreeAndMark(indent.toString(), pseudo, markedNode1, markedLabel1, markedNode2, markedLabel2);
|
| + appendMarkedTree(indent.toString(), pseudo, markedNode1, markedLabel1, markedNode2, markedLabel2, builder);
|
| }
|
|
|
| if (node.isShadowRoot()) {
|
| if (ShadowRoot* youngerShadowRoot = toShadowRoot(node).youngerShadowRoot())
|
| - traverseTreeAndMark(indent.toString(), youngerShadowRoot, markedNode1, markedLabel1, markedNode2, markedLabel2);
|
| + appendMarkedTree(indent.toString(), youngerShadowRoot, markedNode1, markedLabel1, markedNode2, markedLabel2, builder);
|
| } else if (ShadowRoot* oldestShadowRoot = oldestShadowRootFor(&node)) {
|
| - traverseTreeAndMark(indent.toString(), oldestShadowRoot, markedNode1, markedLabel1, markedNode2, markedLabel2);
|
| + appendMarkedTree(indent.toString(), oldestShadowRoot, markedNode1, markedLabel1, markedNode2, markedLabel2, builder);
|
| }
|
| }
|
| }
|
|
|
| -static void traverseTreeAndMarkInFlatTree(const String& baseIndent, const Node* rootNode, const Node* markedNode1, const char* markedLabel1, const Node* markedNode2, const char* markedLabel2)
|
| +static void appendMarkedFlatTree(const String& baseIndent, const Node* rootNode, const Node* markedNode1, const char* markedLabel1, const Node* markedNode2, const char* markedLabel2, StringBuilder& builder)
|
| {
|
| for (const Node* node = rootNode; node; node = FlatTreeTraversal::nextSibling(*node)) {
|
| StringBuilder indent;
|
| @@ -1653,16 +1664,17 @@ static void traverseTreeAndMarkInFlatTree(const String& baseIndent, const Node*
|
| if (node == markedNode2)
|
| indent.append(markedLabel2);
|
| indent.append(baseIndent);
|
| - node->showNode(indent.toString().utf8().data());
|
| + builder.append(indent);
|
| + builder.append(node->toString());
|
| + builder.append("\n");
|
| indent.append('\t');
|
|
|
| - Node* child = FlatTreeTraversal::firstChild(*node);
|
| - if (child)
|
| - traverseTreeAndMarkInFlatTree(indent.toString(), child, markedNode1, markedLabel1, markedNode2, markedLabel2);
|
| + if (Node* child = FlatTreeTraversal::firstChild(*node))
|
| + appendMarkedFlatTree(indent.toString(), child, markedNode1, markedLabel1, markedNode2, markedLabel2, builder);
|
| }
|
| }
|
|
|
| -void Node::showTreeAndMark(const Node* markedNode1, const char* markedLabel1, const Node* markedNode2, const char* markedLabel2) const
|
| +String Node::toMarkedTreeString(const Node* markedNode1, const char* markedLabel1, const Node* markedNode2, const char* markedLabel2) const
|
| {
|
| const Node* rootNode;
|
| const Node* node = this;
|
| @@ -1670,11 +1682,13 @@ void Node::showTreeAndMark(const Node* markedNode1, const char* markedLabel1, co
|
| node = node->parentOrShadowHostNode();
|
| rootNode = node;
|
|
|
| + StringBuilder builder;
|
| String startingIndent;
|
| - traverseTreeAndMark(startingIndent, rootNode, markedNode1, markedLabel1, markedNode2, markedLabel2);
|
| + appendMarkedTree(startingIndent, rootNode, markedNode1, markedLabel1, markedNode2, markedLabel2, builder);
|
| + return builder.toString();
|
| }
|
|
|
| -void Node::showTreeAndMarkInFlatTree(const Node* markedNode1, const char* markedLabel1, const Node* markedNode2, const char* markedLabel2) const
|
| +String Node::toMarkedFlatTreeString(const Node* markedNode1, const char* markedLabel1, const Node* markedNode2, const char* markedLabel2) const
|
| {
|
| const Node* rootNode;
|
| const Node* node = this;
|
| @@ -1682,8 +1696,10 @@ void Node::showTreeAndMarkInFlatTree(const Node* markedNode1, const char* marked
|
| node = node->parentOrShadowHostNode();
|
| rootNode = node;
|
|
|
| + StringBuilder builder;
|
| String startingIndent;
|
| - traverseTreeAndMarkInFlatTree(startingIndent, rootNode, markedNode1, markedLabel1, markedNode2, markedLabel2);
|
| + appendMarkedFlatTree(startingIndent, rootNode, markedNode1, markedLabel1, markedNode2, markedLabel2, builder);
|
| + return builder.toString();
|
| }
|
|
|
| static ContainerNode* parentOrShadowHostOrFrameOwner(const Node* node)
|
| @@ -2387,10 +2403,8 @@ void showNode(const blink::Node* node)
|
|
|
| void showTree(const blink::Node* node)
|
| {
|
| - if (node)
|
| - node->showTreeForThis();
|
| - else
|
| - fprintf(stderr, "Cannot showTree for (nil)\n");
|
| + // TODO(tkent): Replace WTFLogAlways with something else.
|
| + WTFLogAlways("%s", node ? node->toTreeStringForThis().utf8().data() : "Cannot showTree for <null>");
|
| }
|
|
|
| void showNodePath(const blink::Node* node)
|
|
|