diff --git a/content/base/src/nsDOMAttribute.cpp b/content/base/src/nsDOMAttribute.cpp index b14467b7c91b..77795865214e 100644 --- a/content/base/src/nsDOMAttribute.cpp +++ b/content/base/src/nsDOMAttribute.cpp @@ -480,10 +480,14 @@ nsDOMAttribute::Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const } NS_IMETHODIMP -nsDOMAttribute::CloneNode(bool aDeep, nsIDOMNode** aResult) +nsDOMAttribute::CloneNode(bool aDeep, PRUint8 aOptionalArgc, nsIDOMNode** aResult) { OwnerDoc()->WarnOnceAbout(nsIDocument::eCloneNode); + if (!aOptionalArgc) { + aDeep = true; + } + return nsNodeUtils::CloneNodeImpl(this, aDeep, true, aResult); } diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp index dbf7d9d85466..486a7b514585 100644 --- a/content/base/src/nsDocument.cpp +++ b/content/base/src/nsDocument.cpp @@ -5830,8 +5830,12 @@ nsDocument::AppendChild(nsIDOMNode* aNewChild, nsIDOMNode** aReturn) } NS_IMETHODIMP -nsDocument::CloneNode(bool aDeep, nsIDOMNode** aReturn) +nsDocument::CloneNode(bool aDeep, PRUint8 aOptionalArgc, nsIDOMNode** aReturn) { + if (!aOptionalArgc) { + aDeep = true; + } + return nsNodeUtils::CloneNodeImpl(this, aDeep, !mCreatingStaticClone, aReturn); } @@ -8062,7 +8066,7 @@ nsIDocument::CreateStaticClone(nsISupports* aCloneContainer) nsCOMPtr originalContainer = GetContainer(); SetContainer(aCloneContainer); nsCOMPtr clonedNode; - nsresult rv = domDoc->CloneNode(true, getter_AddRefs(clonedNode)); + nsresult rv = domDoc->CloneNode(true, 1, getter_AddRefs(clonedNode)); SetContainer(originalContainer); nsCOMPtr clonedDoc; diff --git a/content/base/src/nsGenericDOMDataNode.h b/content/base/src/nsGenericDOMDataNode.h index 2d87862ee343..4540987c8cfc 100644 --- a/content/base/src/nsGenericDOMDataNode.h +++ b/content/base/src/nsGenericDOMDataNode.h @@ -143,8 +143,12 @@ public: nsresult IsSupported(const nsAString& aFeature, const nsAString& aVersion, bool* aReturn); - nsresult CloneNode(bool aDeep, nsIDOMNode** aReturn) + nsresult CloneNode(bool aDeep, PRUint8 aOptionalArgc, nsIDOMNode** aReturn) { + if (!aOptionalArgc) { + aDeep = true; + } + return nsNodeUtils::CloneNodeImpl(this, aDeep, true, aReturn); } diff --git a/content/base/src/nsGenericElement.h b/content/base/src/nsGenericElement.h index 1417a46ce64b..bf2b1f418513 100644 --- a/content/base/src/nsGenericElement.h +++ b/content/base/src/nsGenericElement.h @@ -437,8 +437,12 @@ public: // nsIDOMElement method implementation NS_DECL_NSIDOMELEMENT - nsresult CloneNode(bool aDeep, nsIDOMNode **aResult) + nsresult CloneNode(bool aDeep, PRUint8 aOptionalArgc, nsIDOMNode **aResult) { + if (!aOptionalArgc) { + aDeep = true; + } + return nsNodeUtils::CloneNodeImpl(this, aDeep, true, aResult); } diff --git a/content/base/src/nsRange.cpp b/content/base/src/nsRange.cpp index 01d86583e4f4..b299053e5e64 100644 --- a/content/base/src/nsRange.cpp +++ b/content/base/src/nsRange.cpp @@ -1596,7 +1596,7 @@ nsresult nsRange::CutContents(nsIDOMDocumentFragment** aFragment) cutValue); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr clone; - rv = charData->CloneNode(false, getter_AddRefs(clone)); + rv = charData->CloneNode(false, 1, getter_AddRefs(clone)); NS_ENSURE_SUCCESS(rv, rv); clone->SetNodeValue(cutValue); nodeToResult = clone; @@ -1656,7 +1656,7 @@ nsresult nsRange::CutContents(nsIDOMDocumentFragment** aFragment) { if (retval) { nsCOMPtr clone; - rv = node->CloneNode(false, getter_AddRefs(clone)); + rv = node->CloneNode(false, 1, getter_AddRefs(clone)); NS_ENSURE_SUCCESS(rv, rv); nodeToResult = clone; } @@ -1827,7 +1827,7 @@ nsRange::CloneParentsBetween(nsIDOMNode *aAncestor, { nsCOMPtr clone, tmpNode; - res = parent->CloneNode(false, getter_AddRefs(clone)); + res = parent->CloneNode(false, 1, getter_AddRefs(clone)); if (NS_FAILED(res)) return res; if (!clone) return NS_ERROR_FAILURE; @@ -1928,7 +1928,7 @@ nsRange::CloneContents(nsIDOMDocumentFragment** aReturn) // Clone the current subtree! nsCOMPtr clone; - res = node->CloneNode(deepClone, getter_AddRefs(clone)); + res = node->CloneNode(deepClone, 1, getter_AddRefs(clone)); if (NS_FAILED(res)) return res; // If it's CharacterData, make sure we only clone what diff --git a/content/base/test/Makefile.in b/content/base/test/Makefile.in index e6edf80b0385..5cbfadf1bf77 100644 --- a/content/base/test/Makefile.in +++ b/content/base/test/Makefile.in @@ -555,6 +555,7 @@ _TEST_FILES2 = \ file_bug717511_2.html \ file_bug717511_2.html^headers^ \ test_bug726364.html \ + test_bug698381.html \ $(NULL) _CHROME_FILES = \ diff --git a/content/base/test/test_bug698381.html b/content/base/test/test_bug698381.html new file mode 100644 index 000000000000..2acc82eaf514 --- /dev/null +++ b/content/base/test/test_bug698381.html @@ -0,0 +1,56 @@ + + + + + Test for Bug 698381 + + + + + + + Mozilla Bug 698381 +

+ + + +
+      
+    
+ + diff --git a/content/html/content/src/nsHTMLSelectElement.cpp b/content/html/content/src/nsHTMLSelectElement.cpp index 288edd877e94..a7112056b669 100644 --- a/content/html/content/src/nsHTMLSelectElement.cpp +++ b/content/html/content/src/nsHTMLSelectElement.cpp @@ -808,7 +808,7 @@ nsHTMLSelectElement::SetLength(PRUint32 aLength) if (i + 1 < aLength) { nsCOMPtr newNode; - rv = node->CloneNode(true, getter_AddRefs(newNode)); + rv = node->CloneNode(true, 1, getter_AddRefs(newNode)); NS_ENSURE_SUCCESS(rv, rv); node = newNode; diff --git a/content/xslt/src/xpath/nsXPathNamespace.cpp b/content/xslt/src/xpath/nsXPathNamespace.cpp index 15560515dd42..b977d4590e02 100644 --- a/content/xslt/src/xpath/nsXPathNamespace.cpp +++ b/content/xslt/src/xpath/nsXPathNamespace.cpp @@ -153,7 +153,7 @@ NS_IMETHODIMP nsXPathNamespace::HasChildNodes(bool *aResult) } /* nsIDOMNode cloneNode (in boolean deep); */ -NS_IMETHODIMP nsXPathNamespace::CloneNode(bool deep, nsIDOMNode **aResult) +NS_IMETHODIMP nsXPathNamespace::CloneNode(bool deep, PRUint8 aOptionalArgc, nsIDOMNode **aResult) { return NS_ERROR_NOT_IMPLEMENTED; } diff --git a/content/xul/templates/src/nsXULContentBuilder.cpp b/content/xul/templates/src/nsXULContentBuilder.cpp index d158b50e5a44..8006fec2f2e2 100644 --- a/content/xul/templates/src/nsXULContentBuilder.cpp +++ b/content/xul/templates/src/nsXULContentBuilder.cpp @@ -677,7 +677,7 @@ nsXULContentBuilder::BuildContentFromTemplate(nsIContent *aTemplateNode, return NS_ERROR_FAILURE; } nsCOMPtr clonedNode; - tmplTextNode->CloneNode(false, getter_AddRefs(clonedNode)); + tmplTextNode->CloneNode(false, 1, getter_AddRefs(clonedNode)); nsCOMPtr clonedContent = do_QueryInterface(clonedNode); if (!clonedContent) { NS_ERROR("failed to clone textnode"); diff --git a/dom/interfaces/core/nsIDOMNode.idl b/dom/interfaces/core/nsIDOMNode.idl index 7456fadabd50..fe45006791bd 100644 --- a/dom/interfaces/core/nsIDOMNode.idl +++ b/dom/interfaces/core/nsIDOMNode.idl @@ -52,7 +52,7 @@ interface nsIDOMUserDataHandler; * http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html */ -[scriptable, uuid(ce82fb71-60f2-4c38-be31-de5f2f90dada)] +[scriptable, uuid(5e9bcec9-5928-4f77-8a9c-424ef01c20e1)] interface nsIDOMNode : nsISupports { const unsigned short ELEMENT_NODE = 1; @@ -94,7 +94,8 @@ interface nsIDOMNode : nsISupports nsIDOMNode appendChild(in nsIDOMNode newChild) raises(DOMException); boolean hasChildNodes(); - nsIDOMNode cloneNode(in boolean deep); + // Modified in DOM Level 4: + [optional_argc] nsIDOMNode cloneNode([optional] in boolean deep); // Modified in DOM Level 2: void normalize(); // Introduced in DOM Level 2: diff --git a/editor/libeditor/base/SplitElementTxn.cpp b/editor/libeditor/base/SplitElementTxn.cpp index 29e1f11eb479..ec03d0600a34 100644 --- a/editor/libeditor/base/SplitElementTxn.cpp +++ b/editor/libeditor/base/SplitElementTxn.cpp @@ -98,7 +98,7 @@ NS_IMETHODIMP SplitElementTxn::DoTransaction(void) if (!mExistingRightNode || !mEditor) { return NS_ERROR_NOT_INITIALIZED; } // create a new node - nsresult result = mExistingRightNode->CloneNode(false, getter_AddRefs(mNewLeftNode)); + nsresult result = mExistingRightNode->CloneNode(false, 1, getter_AddRefs(mNewLeftNode)); NS_ASSERTION(((NS_SUCCEEDED(result)) && (mNewLeftNode)), "could not create element."); NS_ENSURE_SUCCESS(result, result); NS_ENSURE_TRUE(mNewLeftNode, NS_ERROR_NULL_POINTER); diff --git a/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp b/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp index 50c33c508794..81af932e100e 100644 --- a/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp +++ b/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp @@ -2970,7 +2970,7 @@ nsWebBrowserPersist::GetNodeToFixup(nsIDOMNode *aNodeIn, nsIDOMNode **aNodeOut) { if (!(mPersistFlags & PERSIST_FLAGS_FIXUP_ORIGINAL_DOM)) { - nsresult rv = aNodeIn->CloneNode(false, aNodeOut); + nsresult rv = aNodeIn->CloneNode(false, 1, aNodeOut); NS_ENSURE_SUCCESS(rv, rv); } else