Commit 38fc330e authored by Kent Tamura's avatar Kent Tamura Committed by Commit Bot

Move namespace handling code in MarkupFormatter::AppendOpenTag()

Move namespace handling code in MarkupFormatter::AppendOpenTag() to
MarkupAccumulator::AppendOpenTag(), and move
MarkupFormatter::ShouldAddNamespaceElement() to MarkupAccumulator.

MarkupFormatter::AppendOpenTag() is used by MakupAccumulator and
StyledMarkupAccumulator, however only MarkupAccumulator needs the
namespace handling.

This CL doesn't change any behavior.

Bug: 927166
Change-Id: I941a6c4dc1154fdbd57fd7f48bae0bd1cda33b18
Reviewed-on: https://chromium-review.googlesource.com/c/1448083
Commit-Queue: Kent Tamura <tkent@chromium.org>
Commit-Queue: Yoshifumi Inoue <yosin@chromium.org>
Auto-Submit: Kent Tamura <tkent@chromium.org>
Reviewed-by: default avatarYoshifumi Inoue <yosin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#628214}
parent ecc3b419
...@@ -138,7 +138,12 @@ void MarkupAccumulator::AppendElement(StringBuilder& result, ...@@ -138,7 +138,12 @@ void MarkupAccumulator::AppendElement(StringBuilder& result,
void MarkupAccumulator::AppendOpenTag(StringBuilder& result, void MarkupAccumulator::AppendOpenTag(StringBuilder& result,
const Element& element, const Element& element,
Namespaces* namespaces) { Namespaces* namespaces) {
formatter_.AppendOpenTag(result, element, namespaces); formatter_.AppendOpenTag(result, element);
if (!SerializeAsHTMLDocument(element) && namespaces &&
ShouldAddNamespaceElement(element, *namespaces)) {
MarkupFormatter::AppendNamespace(result, element.prefix(),
element.namespaceURI(), *namespaces);
}
} }
void MarkupAccumulator::AppendCloseTag(StringBuilder& result, void MarkupAccumulator::AppendCloseTag(StringBuilder& result,
...@@ -161,6 +166,22 @@ bool MarkupAccumulator::SerializeAsHTMLDocument(const Node& node) const { ...@@ -161,6 +166,22 @@ bool MarkupAccumulator::SerializeAsHTMLDocument(const Node& node) const {
return formatter_.SerializeAsHTMLDocument(node); return formatter_.SerializeAsHTMLDocument(node);
} }
bool MarkupAccumulator::ShouldAddNamespaceElement(
const Element& element,
Namespaces& namespaces) const {
// Don't add namespace attribute if it is already defined for this elem.
const AtomicString& prefix = element.prefix();
if (prefix.IsEmpty()) {
if (element.hasAttribute(g_xmlns_atom)) {
namespaces.Set(g_empty_atom, element.namespaceURI());
return false;
}
return true;
}
return !element.hasAttribute(WTF::g_xmlns_with_colon + prefix);
}
std::pair<Node*, Element*> MarkupAccumulator::GetAuxiliaryDOMTree( std::pair<Node*, Element*> MarkupAccumulator::GetAuxiliaryDOMTree(
const Element& element) const { const Element& element) const {
return std::pair<Node*, Element*>(); return std::pair<Node*, Element*>();
......
...@@ -84,6 +84,8 @@ class MarkupAccumulator { ...@@ -84,6 +84,8 @@ class MarkupAccumulator {
virtual std::pair<Node*, Element*> GetAuxiliaryDOMTree(const Element&) const; virtual std::pair<Node*, Element*> GetAuxiliaryDOMTree(const Element&) const;
private: private:
bool ShouldAddNamespaceElement(const Element&, Namespaces&) const;
MarkupFormatter formatter_; MarkupFormatter formatter_;
StringBuilder markup_; StringBuilder markup_;
......
...@@ -308,14 +308,9 @@ void MarkupFormatter::AppendProcessingInstruction(StringBuilder& result, ...@@ -308,14 +308,9 @@ void MarkupFormatter::AppendProcessingInstruction(StringBuilder& result,
} }
void MarkupFormatter::AppendOpenTag(StringBuilder& result, void MarkupFormatter::AppendOpenTag(StringBuilder& result,
const Element& element, const Element& element) {
Namespaces* namespaces) {
result.Append('<'); result.Append('<');
result.Append(element.TagQName().ToString()); result.Append(element.TagQName().ToString());
if (!SerializeAsHTMLDocument(element) && namespaces &&
ShouldAddNamespaceElement(element, *namespaces))
AppendNamespace(result, element.prefix(), element.namespaceURI(),
*namespaces);
} }
void MarkupFormatter::AppendCloseTag(StringBuilder& result, void MarkupFormatter::AppendCloseTag(StringBuilder& result,
...@@ -428,21 +423,6 @@ void MarkupFormatter::AppendCDATASection(StringBuilder& result, ...@@ -428,21 +423,6 @@ void MarkupFormatter::AppendCDATASection(StringBuilder& result,
result.Append("]]>"); result.Append("]]>");
} }
bool MarkupFormatter::ShouldAddNamespaceElement(const Element& element,
Namespaces& namespaces) const {
// Don't add namespace attribute if it is already defined for this elem.
const AtomicString& prefix = element.prefix();
if (prefix.IsEmpty()) {
if (element.hasAttribute(g_xmlns_atom)) {
namespaces.Set(g_empty_atom, element.namespaceURI());
return false;
}
return true;
}
return !element.hasAttribute(WTF::g_xmlns_with_colon + prefix);
}
bool MarkupFormatter::ShouldAddNamespaceAttribute( bool MarkupFormatter::ShouldAddNamespaceAttribute(
const Attribute& attribute, const Attribute& attribute,
const Element& element) const { const Element& element) const {
......
...@@ -105,14 +105,13 @@ class MarkupFormatter final { ...@@ -105,14 +105,13 @@ class MarkupFormatter final {
bool SerializeAsHTMLDocument(const Node&) const; bool SerializeAsHTMLDocument(const Node&) const;
void AppendText(StringBuilder&, Text&); void AppendText(StringBuilder&, Text&);
void AppendOpenTag(StringBuilder&, const Element&, Namespaces*); void AppendOpenTag(StringBuilder&, const Element&);
void AppendCloseTag(StringBuilder&, const Element&); void AppendCloseTag(StringBuilder&, const Element&);
void AppendAttribute(StringBuilder&, void AppendAttribute(StringBuilder&,
const Element&, const Element&,
const Attribute&, const Attribute&,
Namespaces*); Namespaces*);
bool ShouldAddNamespaceElement(const Element&, Namespaces&) const;
bool ShouldAddNamespaceAttribute(const Attribute&, const Element&) const; bool ShouldAddNamespaceAttribute(const Attribute&, const Element&) const;
EntityMask EntityMaskForText(const Text&) const; EntityMask EntityMaskForText(const Text&) const;
bool ShouldSelfClose(const Element&) const; bool ShouldSelfClose(const Element&) const;
......
...@@ -139,7 +139,7 @@ void StyledMarkupAccumulator::AppendElementWithInlineStyle( ...@@ -139,7 +139,7 @@ void StyledMarkupAccumulator::AppendElementWithInlineStyle(
const Element& element, const Element& element,
EditingStyle* style) { EditingStyle* style) {
const bool document_is_html = element.GetDocument().IsHTMLDocument(); const bool document_is_html = element.GetDocument().IsHTMLDocument();
formatter_.AppendOpenTag(out, element, nullptr); formatter_.AppendOpenTag(out, element);
AttributeCollection attributes = element.Attributes(); AttributeCollection attributes = element.Attributes();
for (const auto& attribute : attributes) { for (const auto& attribute : attributes) {
// We'll handle the style attribute separately, below. // We'll handle the style attribute separately, below.
...@@ -162,7 +162,7 @@ void StyledMarkupAccumulator::AppendElement(const Element& element) { ...@@ -162,7 +162,7 @@ void StyledMarkupAccumulator::AppendElement(const Element& element) {
void StyledMarkupAccumulator::AppendElement(StringBuilder& out, void StyledMarkupAccumulator::AppendElement(StringBuilder& out,
const Element& element) { const Element& element) {
formatter_.AppendOpenTag(out, element, nullptr); formatter_.AppendOpenTag(out, element);
AttributeCollection attributes = element.Attributes(); AttributeCollection attributes = element.Attributes();
for (const auto& attribute : attributes) for (const auto& attribute : attributes)
formatter_.AppendAttribute(out, element, attribute, nullptr); formatter_.AppendAttribute(out, element, attribute, nullptr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment