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 0ee6691334b48849c31dbd2aef235208e515b00c..decda39fd58187d3630a4637e22dce476dbaa205 100644 |
--- a/third_party/WebKit/Source/core/dom/Node.cpp |
+++ b/third_party/WebKit/Source/core/dom/Node.cpp |
@@ -1503,6 +1503,16 @@ static void dumpAttributeDesc(const Node& node, const QualifiedName& name, std:: |
// |std::ostream| version of |Node::showNode| |
std::ostream& operator<<(std::ostream& ostream, const Node& node) |
{ |
+ if (node.getNodeType() == Node::kProcessingInstructionNode) |
+ return ostream << "?" << node.nodeName().utf8().data(); |
+ if (node.isShadowRoot()) { |
+ // nodeName of ShadowRoot is #document-fragment. It's confused with |
+ // DocumentFragment. |
+ return ostream << "#shadow-root"; |
+ } |
+ if (node.isDocumentTypeNode()) |
+ return ostream << "DOCTYPE " << node.nodeName().utf8().data(); |
+ |
// We avoid to print "" by utf8().data(). |
ostream << node.nodeName().utf8().data(); |
if (node.isTextNode()) |
@@ -1510,6 +1520,10 @@ std::ostream& operator<<(std::ostream& ostream, const Node& node) |
dumpAttributeDesc(node, HTMLNames::idAttr, ostream); |
dumpAttributeDesc(node, HTMLNames::classAttr, ostream); |
dumpAttributeDesc(node, HTMLNames::styleAttr, ostream); |
+ if (hasEditableStyle(node)) |
+ ostream << " (editable)"; |
+ if (node.document().focusedElement() == &node) |
+ ostream << " (focused)"; |
return ostream; |
} |
@@ -1522,49 +1536,13 @@ std::ostream& operator<<(std::ostream& ostream, const Node* node) |
#ifndef NDEBUG |
-static void appendAttributeDesc(const Node* node, StringBuilder& stringBuilder, const QualifiedName& name, const char* attrDesc) |
-{ |
- if (!node->isElementNode()) |
- return; |
- |
- String attr = toElement(node)->getAttribute(name); |
- if (attr.isEmpty()) |
- return; |
- |
- stringBuilder.append(attrDesc); |
- stringBuilder.append("=\""); |
- stringBuilder.append(attr); |
- stringBuilder.append("\""); |
-} |
- |
void Node::showNode(const char* prefix) const |
{ |
- if (!prefix) |
- prefix = ""; |
- if (isTextNode()) { |
- String value = nodeValue(); |
- value.replace('\\', "\\\\"); |
- value.replace('\n', "\\n"); |
- WTFLogAlways("%s%s\t%p \"%s\"\n", prefix, nodeName().utf8().data(), this, value.utf8().data()); |
- } else if (isDocumentTypeNode()) { |
- WTFLogAlways("%sDOCTYPE %s\t%p\n", prefix, nodeName().utf8().data(), this); |
- } else if (getNodeType() == kProcessingInstructionNode) { |
- WTFLogAlways("%s?%s\t%p\n", prefix, nodeName().utf8().data(), this); |
- } else if (isShadowRoot()) { |
- // nodeName of ShadowRoot is #document-fragment. It's confused with |
- // DocumentFragment. |
- WTFLogAlways("%s#shadow-root\t%p\n", prefix, this); |
- } else { |
- StringBuilder attrs; |
- appendAttributeDesc(this, attrs, idAttr, " ID"); |
- appendAttributeDesc(this, attrs, classAttr, " CLASS"); |
- appendAttributeDesc(this, attrs, styleAttr, " STYLE"); |
- if (hasEditableStyle(*this)) |
- attrs.append(" (editable)"); |
- if (document().focusedElement() == this) |
- attrs.append(" (focused)"); |
- WTFLogAlways("%s%s\t%p%s\n", prefix, nodeName().utf8().data(), this, attrs.toString().utf8().data()); |
- } |
+ std::stringstream stream; |
+ if (prefix) |
+ stream << prefix; |
+ stream << *this << "\n"; |
+ WTFLogAlways("%s", stream.str().c_str()); |
} |
void Node::showTreeForThis() const |