diff --git a/content/base/src/nsDOMAttribute.cpp b/content/base/src/nsDOMAttribute.cpp index c9fc9940e168..9a66932ce354 100644 --- a/content/base/src/nsDOMAttribute.cpp +++ b/content/base/src/nsDOMAttribute.cpp @@ -448,7 +448,7 @@ nsDOMAttribute::Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const NS_IMETHODIMP nsDOMAttribute::CloneNode(PRBool aDeep, nsIDOMNode** aResult) { - return nsNodeUtils::CloneNodeImpl(this, aDeep, aResult); + return nsNodeUtils::CloneNodeImpl(this, aDeep, PR_TRUE, aResult); } NS_IMETHODIMP diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp index cb74154d68fc..407219112f04 100644 --- a/content/base/src/nsDocument.cpp +++ b/content/base/src/nsDocument.cpp @@ -5778,7 +5778,7 @@ nsDocument::AppendChild(nsIDOMNode* aNewChild, nsIDOMNode** aReturn) NS_IMETHODIMP nsDocument::CloneNode(PRBool aDeep, nsIDOMNode** aReturn) { - return nsNodeUtils::CloneNodeImpl(this, aDeep, aReturn); + return nsNodeUtils::CloneNodeImpl(this, aDeep, !mCreatingStaticClone, aReturn); } NS_IMETHODIMP diff --git a/content/base/src/nsGenericDOMDataNode.h b/content/base/src/nsGenericDOMDataNode.h index e4c6152bbc2e..002d066d694e 100644 --- a/content/base/src/nsGenericDOMDataNode.h +++ b/content/base/src/nsGenericDOMDataNode.h @@ -485,7 +485,7 @@ private: return nsGenericDOMDataNode::IsSupported(aFeature, aVersion, aReturn); \ } \ NS_IMETHOD CloneNode(PRBool aDeep, nsIDOMNode** aReturn) { \ - return nsNodeUtils::CloneNodeImpl(this, aDeep, aReturn); \ + return nsNodeUtils::CloneNodeImpl(this, aDeep, PR_TRUE, aReturn); \ } \ virtual nsGenericDOMDataNode *CloneDataNode(nsINodeInfo *aNodeInfo, \ PRBool aCloneText) const; diff --git a/content/base/src/nsGenericElement.h b/content/base/src/nsGenericElement.h index 8344dc8acb28..be3867b3ac30 100644 --- a/content/base/src/nsGenericElement.h +++ b/content/base/src/nsGenericElement.h @@ -544,7 +544,7 @@ public: PRBool* aReturn); nsresult CloneNode(PRBool aDeep, nsIDOMNode **aResult) { - return nsNodeUtils::CloneNodeImpl(this, aDeep, aResult); + return nsNodeUtils::CloneNodeImpl(this, aDeep, PR_TRUE, aResult); } //---------------------------------------- diff --git a/content/base/src/nsNodeUtils.cpp b/content/base/src/nsNodeUtils.cpp index 5c6f43f397b4..9d4e9fa9512d 100644 --- a/content/base/src/nsNodeUtils.cpp +++ b/content/base/src/nsNodeUtils.cpp @@ -418,7 +418,9 @@ nsNodeUtils::TraverseUserData(nsINode* aNode, /* static */ nsresult -nsNodeUtils::CloneNodeImpl(nsINode *aNode, PRBool aDeep, nsIDOMNode **aResult) +nsNodeUtils::CloneNodeImpl(nsINode *aNode, PRBool aDeep, + PRBool aCallUserDataHandlers, + nsIDOMNode **aResult) { *aResult = nsnull; @@ -429,7 +431,7 @@ nsNodeUtils::CloneNodeImpl(nsINode *aNode, PRBool aDeep, nsIDOMNode **aResult) NS_ENSURE_SUCCESS(rv, rv); nsIDocument *ownerDoc = aNode->GetOwnerDoc(); - if (ownerDoc) { + if (ownerDoc && aCallUserDataHandlers) { rv = CallUserDataHandlers(nodesWithProperties, ownerDoc, nsIDOMUserDataHandler::NODE_CLONED, PR_TRUE); NS_ENSURE_SUCCESS(rv, rv); diff --git a/content/base/src/nsNodeUtils.h b/content/base/src/nsNodeUtils.h index 8fbde7c12b43..8b19c4ab8bde 100644 --- a/content/base/src/nsNodeUtils.h +++ b/content/base/src/nsNodeUtils.h @@ -242,9 +242,11 @@ public: * * @param aNode the node to clone * @param aDeep if true all descendants will be cloned too + * @param aCallUserDataHandlers if true, user data handlers will be called * @param aResult the clone */ static nsresult CloneNodeImpl(nsINode *aNode, PRBool aDeep, + PRBool aCallUserDataHandlers, nsIDOMNode **aResult); /**