Diff
Modified: trunk/LayoutTests/ChangeLog (177313 => 177314)
--- trunk/LayoutTests/ChangeLog 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/LayoutTests/ChangeLog 2014-12-15 22:19:38 UTC (rev 177314)
@@ -1,3 +1,15 @@
+2014-12-15 Ryosuke Niwa <[email protected]>
+
+ cloneNode(true) does not clone nested template elements' contents
+ https://bugs.webkit.org/show_bug.cgi?id=137755
+
+ Reviewed by Darin Adler.
+
+ Added a regression test.
+
+ * fast/dom/HTMLTemplateElement/cloneNode-nested-templates-expected.txt: Added.
+ * fast/dom/HTMLTemplateElement/cloneNode-nested-templates.html: Added.
+
2014-12-15 Benjamin Poulain <[email protected]>
Unify the various serialization of selector list
Added: trunk/LayoutTests/fast/dom/HTMLTemplateElement/cloneNode-nested-templates-expected.txt (0 => 177314)
--- trunk/LayoutTests/fast/dom/HTMLTemplateElement/cloneNode-nested-templates-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/dom/HTMLTemplateElement/cloneNode-nested-templates-expected.txt 2014-12-15 22:19:38 UTC (rev 177314)
@@ -0,0 +1,19 @@
+Test that template contents are not cloned when the template element is cloned
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+clonedOuterTemplate = outerTemplate.cloneNode(true)
+PASS clonedOuterTemplate.content is not outerTemplate.content
+PASS clonedOuterTemplate.content.childNodes.length is 1
+innerTemplate = outerTemplate.content.firstChild
+clonedInnerTemplate = clonedOuterTemplate.content.firstChild
+PASS clonedInnerTemplate.outerHTML is innerTemplate.outerHTML
+PASS clonedInnerTemplate.content is not innerTemplate.content
+PASS innerTemplate.content.childNodes.length is 1
+PASS clonedInnerTemplate.content.childNodes.length is 1
+PASS innerTemplate.content.firstChild.outerHTML is clonedInnerTemplate.content.firstChild.outerHTML
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/dom/HTMLTemplateElement/cloneNode-nested-templates.html (0 => 177314)
--- trunk/LayoutTests/fast/dom/HTMLTemplateElement/cloneNode-nested-templates.html (rev 0)
+++ trunk/LayoutTests/fast/dom/HTMLTemplateElement/cloneNode-nested-templates.html 2014-12-15 22:19:38 UTC (rev 177314)
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<body>
+<template id="outerTemplate"><template id="innerTemplate"><span>Contents</span></template></template>
+<script src=""
+<script>
+
+description('Test that template contents are not cloned when the template element is cloned');
+
+if (!window.HTMLTemplateElement)
+ testFailed('This test requires ENABLE(TEMPLATE_ELEMENT)');
+
+var outerTemplate = document.getElementById('outerTemplate');
+evalAndLog('clonedOuterTemplate = outerTemplate.cloneNode(true)');
+shouldNotBe('clonedOuterTemplate.content', 'outerTemplate.content');
+shouldBe('clonedOuterTemplate.content.childNodes.length', '1');
+evalAndLog('innerTemplate = outerTemplate.content.firstChild');
+evalAndLog('clonedInnerTemplate = clonedOuterTemplate.content.firstChild');
+shouldBe('clonedInnerTemplate.outerHTML', 'innerTemplate.outerHTML');
+shouldNotBe('clonedInnerTemplate.content', 'innerTemplate.content');
+shouldBe('innerTemplate.content.childNodes.length', '1');
+shouldBe('clonedInnerTemplate.content.childNodes.length', '1');
+shouldBe('innerTemplate.content.firstChild.outerHTML', 'clonedInnerTemplate.content.firstChild.outerHTML');
+
+var successfullyParsed = true;
+
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (177313 => 177314)
--- trunk/Source/WebCore/ChangeLog 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/ChangeLog 2014-12-15 22:19:38 UTC (rev 177314)
@@ -1,3 +1,60 @@
+2014-12-15 Ryosuke Niwa <[email protected]>
+
+ cloneNode(true) does not clone nested template elements' contents
+ https://bugs.webkit.org/show_bug.cgi?id=137755
+
+ Reviewed by Darin Adler.
+
+ The bug was caused by cloneChildNodes not copying template element's content.
+
+ Fixed the bug by adding the third behavior (CloneContent) to the polymorphic
+ cloneNodeInternal, which copies template element's content but not its children,
+ in addition to the existing CloneSelf (deep=false) and CloneChildren (deep=true).
+
+ Test: fast/dom/HTMLTemplateElement/cloneNode-nested-templates.html
+
+ * dom/Attr.cpp:
+ (WebCore::Attr::cloneNodeInternal): Renamed from cloneNode.
+ * dom/Attr.h:
+ * dom/CDATASection.cpp:
+ (WebCore::CDATASection::cloneNodeInternal): Renamed from cloneNode.
+ * dom/CDATASection.h:
+ * dom/Comment.cpp:
+ (WebCore::Comment::cloneNodeInternal): Renamed from cloneNode.
+ * dom/Comment.h:
+ * dom/ContainerNode.cpp:
+ (WebCore::ContainerNode::cloneChildNodes): Calls cloneNode with CloneContent.
+ * dom/Document.cpp:
+ (WebCore::Document::cloneNodeInternal): Renamed from cloneNode.
+ * dom/Document.h:
+ * dom/DocumentFragment.cpp:
+ (WebCore::DocumentFragment::cloneNodeInternal): Renamed from cloneNode.
+ * dom/DocumentFragment.h:
+ * dom/DocumentType.cpp:
+ (WebCore::DocumentType::cloneNodeInternal): Renamed from cloneNode.
+ * dom/DocumentType.h:
+ * dom/Element.cpp:
+ (WebCore::Element::cloneNodeInternal): Renamed from cloneNode.
+ * dom/Element.h:
+ * dom/EntityReference.cpp:
+ (WebCore::EntityReference::cloneNodeInternal): Renamed from cloneNode.
+ * dom/EntityReference.h:
+ * dom/Node.h:
+ (WebCore::Node::cloneNode): Added. It calls cloneNodeInternal with CloneSelf or CloneChildren.
+ * dom/ProcessingInstruction.cpp:
+ (WebCore::ProcessingInstruction::cloneNodeInternal): Renamed from cloneNode.
+ * dom/ProcessingInstruction.h:
+ * dom/ShadowRoot.cpp:
+ (WebCore::ShadowRoot::cloneNodeInternal): Renamed from cloneNode. Also moved from ShadowRoot.h.
+ * dom/ShadowRoot.h:
+ * dom/Text.cpp:
+ (WebCore::Text::cloneNodeInternal): Renamed from cloneNode.
+ * dom/Text.h:
+ * html/HTMLTemplateElement.cpp:
+ (WebCore::HTMLTemplateElement::cloneNodeInternal): Renamed from cloneNode. This is the only
+ function in which CloneContent results in a different behavior from CloneSelf.
+ * html/HTMLTemplateElement.h:
+
2014-12-15 Benjamin Poulain <[email protected]>
Unify the various serialization of selector list
Modified: trunk/Source/WebCore/dom/Attr.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/Attr.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Attr.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -137,7 +137,7 @@
setValue(v, ec);
}
-RefPtr<Node> Attr::cloneNode(bool /*deep*/)
+RefPtr<Node> Attr::cloneNodeInternal(CloningOperation)
{
RefPtr<Attr> clone = adoptRef(new Attr(document(), qualifiedName(), value()));
cloneChildNodes(clone.get());
Modified: trunk/Source/WebCore/dom/Attr.h (177313 => 177314)
--- trunk/Source/WebCore/dom/Attr.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Attr.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -80,7 +80,7 @@
virtual String nodeValue() const override { return value(); }
virtual void setNodeValue(const String&, ExceptionCode&) override;
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
virtual bool isAttributeNode() const override { return true; }
virtual bool childTypeAllowed(NodeType) const override;
Modified: trunk/Source/WebCore/dom/CDATASection.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/CDATASection.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/CDATASection.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -46,7 +46,7 @@
return CDATA_SECTION_NODE;
}
-RefPtr<Node> CDATASection::cloneNode(bool /*deep*/)
+RefPtr<Node> CDATASection::cloneNodeInternal(CloningOperation)
{
return create(document(), data());
}
Modified: trunk/Source/WebCore/dom/CDATASection.h (177313 => 177314)
--- trunk/Source/WebCore/dom/CDATASection.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/CDATASection.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -36,7 +36,7 @@
virtual String nodeName() const override;
virtual NodeType nodeType() const override;
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
virtual bool childTypeAllowed(NodeType) const override;
virtual RefPtr<Text> virtualCreate(const String&) override;
};
Modified: trunk/Source/WebCore/dom/Comment.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/Comment.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Comment.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -51,7 +51,7 @@
return COMMENT_NODE;
}
-RefPtr<Node> Comment::cloneNode(bool /*deep*/)
+RefPtr<Node> Comment::cloneNodeInternal(CloningOperation)
{
return create(document(), data());
}
Modified: trunk/Source/WebCore/dom/Comment.h (177313 => 177314)
--- trunk/Source/WebCore/dom/Comment.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Comment.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -37,7 +37,7 @@
virtual String nodeName() const override;
virtual NodeType nodeType() const override;
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
virtual bool childTypeAllowed(NodeType) const override;
};
Modified: trunk/Source/WebCore/dom/ContainerNode.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/ContainerNode.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/ContainerNode.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -769,7 +769,7 @@
{
ExceptionCode ec = 0;
for (Node* child = firstChild(); child && !ec; child = child->nextSibling()) {
- RefPtr<Node> clonedChild = child->cloneNode(false);
+ RefPtr<Node> clonedChild = child->cloneNodeInternal(CloningOperation::SelfWithTemplateContent);
clone->appendChild(clonedChild, ec);
if (!ec && is<ContainerNode>(child))
Modified: trunk/Source/WebCore/dom/Document.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/Document.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Document.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -3183,12 +3183,18 @@
return true;
}
-RefPtr<Node> Document::cloneNode(bool deep)
+RefPtr<Node> Document::cloneNodeInternal(CloningOperation type)
{
RefPtr<Document> clone = cloneDocumentWithoutChildren();
clone->cloneDataFromDocument(*this);
- if (deep)
+ switch (type) {
+ case CloningOperation::OnlySelf:
+ case CloningOperation::SelfWithTemplateContent:
+ break;
+ case CloningOperation::Everything:
cloneChildNodes(clone.get());
+ break;
+ }
return clone;
}
Modified: trunk/Source/WebCore/dom/Document.h (177313 => 177314)
--- trunk/Source/WebCore/dom/Document.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Document.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -1308,7 +1308,7 @@
virtual String nodeName() const override final;
virtual NodeType nodeType() const override final;
virtual bool childTypeAllowed(NodeType) const override final;
- virtual RefPtr<Node> cloneNode(bool deep) override final;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override final;
void cloneDataFromDocument(const Document&);
virtual void refScriptExecutionContext() override final { ref(); }
Modified: trunk/Source/WebCore/dom/DocumentFragment.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/DocumentFragment.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/DocumentFragment.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -71,11 +71,17 @@
}
}
-RefPtr<Node> DocumentFragment::cloneNode(bool deep)
+RefPtr<Node> DocumentFragment::cloneNodeInternal(CloningOperation type)
{
RefPtr<DocumentFragment> clone = create(document());
- if (deep)
+ switch (type) {
+ case CloningOperation::OnlySelf:
+ case CloningOperation::SelfWithTemplateContent:
+ break;
+ case CloningOperation::Everything:
cloneChildNodes(clone.get());
+ break;
+ }
return clone;
}
Modified: trunk/Source/WebCore/dom/DocumentFragment.h (177313 => 177314)
--- trunk/Source/WebCore/dom/DocumentFragment.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/DocumentFragment.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -48,7 +48,7 @@
private:
virtual NodeType nodeType() const override final;
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
virtual bool childTypeAllowed(NodeType) const override;
};
Modified: trunk/Source/WebCore/dom/DocumentType.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/DocumentType.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/DocumentType.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -51,7 +51,7 @@
return DOCUMENT_TYPE_NODE;
}
-RefPtr<Node> DocumentType::cloneNode(bool /*deep*/)
+RefPtr<Node> DocumentType::cloneNodeInternal(CloningOperation)
{
return create(document(), m_name, m_publicId, m_systemId);
}
Modified: trunk/Source/WebCore/dom/DocumentType.h (177313 => 177314)
--- trunk/Source/WebCore/dom/DocumentType.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/DocumentType.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -52,7 +52,7 @@
virtual URL baseURI() const override;
virtual String nodeName() const override;
virtual NodeType nodeType() const override;
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
String m_name;
String m_publicId;
Modified: trunk/Source/WebCore/dom/Element.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/Element.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Element.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -289,9 +289,17 @@
DEFINE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER(Element, focus);
DEFINE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER(Element, load);
-RefPtr<Node> Element::cloneNode(bool deep)
+RefPtr<Node> Element::cloneNodeInternal(CloningOperation type)
{
- return deep ? cloneElementWithChildren() : cloneElementWithoutChildren();
+ switch (type) {
+ case CloningOperation::OnlySelf:
+ case CloningOperation::SelfWithTemplateContent:
+ return cloneElementWithoutChildren();
+ case CloningOperation::Everything:
+ return cloneElementWithChildren();
+ }
+ ASSERT_NOT_REACHED();
+ return nullptr;
}
RefPtr<Element> Element::cloneElementWithChildren()
Modified: trunk/Source/WebCore/dom/Element.h (177313 => 177314)
--- trunk/Source/WebCore/dom/Element.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Element.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -632,7 +632,7 @@
// cloneNode is private so that non-virtual cloneElementWithChildren and cloneElementWithoutChildren
// are used instead.
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
virtual RefPtr<Element> cloneElementWithoutAttributesAndChildren();
void addShadowRoot(PassRefPtr<ShadowRoot>);
Modified: trunk/Source/WebCore/dom/EntityReference.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/EntityReference.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/EntityReference.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -46,7 +46,7 @@
return ENTITY_REFERENCE_NODE;
}
-RefPtr<Node> EntityReference::cloneNode(bool)
+RefPtr<Node> EntityReference::cloneNodeInternal(CloningOperation)
{
return create(document(), m_entityName);
}
Modified: trunk/Source/WebCore/dom/EntityReference.h (177313 => 177314)
--- trunk/Source/WebCore/dom/EntityReference.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/EntityReference.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -35,7 +35,7 @@
virtual String nodeName() const override;
virtual NodeType nodeType() const override;
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
String m_entityName;
};
Modified: trunk/Source/WebCore/dom/Node.h (177313 => 177314)
--- trunk/Source/WebCore/dom/Node.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Node.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -203,7 +203,15 @@
WEBCORE_EXPORT void remove(ExceptionCode&);
bool hasChildNodes() const { return firstChild(); }
- virtual RefPtr<Node> cloneNode(bool deep) = 0;
+
+ enum class CloningOperation {
+ OnlySelf,
+ SelfWithTemplateContent,
+ Everything,
+ };
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) = 0;
+ RefPtr<Node> cloneNode(bool deep) { return cloneNodeInternal(deep ? CloningOperation::Everything : CloningOperation::OnlySelf); }
+
virtual const AtomicString& localName() const;
virtual const AtomicString& namespaceURI() const;
virtual const AtomicString& prefix() const;
Modified: trunk/Source/WebCore/dom/ProcessingInstruction.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/ProcessingInstruction.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/ProcessingInstruction.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -79,7 +79,7 @@
return PROCESSING_INSTRUCTION_NODE;
}
-RefPtr<Node> ProcessingInstruction::cloneNode(bool /*deep*/)
+RefPtr<Node> ProcessingInstruction::cloneNodeInternal(CloningOperation)
{
// FIXME: Is it a problem that this does not copy m_localHref?
// What about other data members?
Modified: trunk/Source/WebCore/dom/ProcessingInstruction.h (177313 => 177314)
--- trunk/Source/WebCore/dom/ProcessingInstruction.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/ProcessingInstruction.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -58,7 +58,7 @@
virtual String nodeName() const override;
virtual NodeType nodeType() const override;
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
virtual InsertionNotificationRequest insertedInto(ContainerNode&) override;
virtual void removedFrom(ContainerNode&) override;
Modified: trunk/Source/WebCore/dom/ShadowRoot.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/ShadowRoot.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/ShadowRoot.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -131,6 +131,11 @@
invalidateDistribution();
}
+RefPtr<Node> ShadowRoot::cloneNodeInternal(CloningOperation)
+{
+ return nullptr; // ShadowRoots should never be cloned.
+}
+
void ShadowRoot::removeAllEventListeners()
{
DocumentFragment::removeAllEventListeners();
Modified: trunk/Source/WebCore/dom/ShadowRoot.h (177313 => 177314)
--- trunk/Source/WebCore/dom/ShadowRoot.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/ShadowRoot.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -76,8 +76,7 @@
virtual bool childTypeAllowed(NodeType) const override;
virtual void childrenChanged(const ChildChange&) override;
- // ShadowRoots should never be cloned.
- virtual RefPtr<Node> cloneNode(bool) override { return 0; }
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
// FIXME: This shouldn't happen. https://bugs.webkit.org/show_bug.cgi?id=88834
bool isOrphan() const { return !hostElement(); }
Modified: trunk/Source/WebCore/dom/Text.cpp (177313 => 177314)
--- trunk/Source/WebCore/dom/Text.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Text.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -169,7 +169,7 @@
return TEXT_NODE;
}
-RefPtr<Node> Text::cloneNode(bool /*deep*/)
+RefPtr<Node> Text::cloneNodeInternal(CloningOperation)
{
return create(document(), data());
}
Modified: trunk/Source/WebCore/dom/Text.h (177313 => 177314)
--- trunk/Source/WebCore/dom/Text.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/dom/Text.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -64,7 +64,7 @@
private:
virtual String nodeName() const override;
virtual NodeType nodeType() const override;
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
virtual bool childTypeAllowed(NodeType) const override;
virtual RefPtr<Text> virtualCreate(const String&);
Modified: trunk/Source/WebCore/html/HTMLTemplateElement.cpp (177313 => 177314)
--- trunk/Source/WebCore/html/HTMLTemplateElement.cpp 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/html/HTMLTemplateElement.cpp 2014-12-15 22:19:38 UTC (rev 177314)
@@ -68,12 +68,19 @@
return m_content.get();
}
-RefPtr<Node> HTMLTemplateElement::cloneNode(bool deep)
+RefPtr<Node> HTMLTemplateElement::cloneNodeInternal(CloningOperation type)
{
- if (!deep)
+ RefPtr<Node> clone;
+ switch (type) {
+ case CloningOperation::OnlySelf:
return cloneElementWithoutChildren();
-
- RefPtr<Node> clone = cloneElementWithChildren();
+ case CloningOperation::SelfWithTemplateContent:
+ clone = cloneElementWithoutChildren();
+ break;
+ case CloningOperation::Everything:
+ clone = cloneElementWithChildren();
+ break;
+ }
if (m_content)
content()->cloneChildNodes(downcast<HTMLTemplateElement>(clone.get())->content());
return clone.release();
Modified: trunk/Source/WebCore/html/HTMLTemplateElement.h (177313 => 177314)
--- trunk/Source/WebCore/html/HTMLTemplateElement.h 2014-12-15 22:18:35 UTC (rev 177313)
+++ trunk/Source/WebCore/html/HTMLTemplateElement.h 2014-12-15 22:19:38 UTC (rev 177314)
@@ -50,7 +50,7 @@
private:
HTMLTemplateElement(const QualifiedName&, Document&);
- virtual RefPtr<Node> cloneNode(bool deep) override;
+ virtual RefPtr<Node> cloneNodeInternal(CloningOperation) override;
virtual void didMoveToNewDocument(Document* oldDocument) override;
mutable RefPtr<TemplateContentDocumentFragment> m_content;