зеркало из https://github.com/mozilla/pjs.git
Fix for bug 264309 (Consolidate CloneNode implementation macros). r/sr=jst
This commit is contained in:
Родитель
35d7eaa9c1
Коммит
f3ad153070
|
@ -896,4 +896,54 @@ public:
|
|||
} \
|
||||
NS_IMETHOD CloneNode(PRBool aDeep, nsIDOMNode** aReturn);
|
||||
|
||||
/**
|
||||
* Macros to implement CloneNode().
|
||||
*/
|
||||
#define NS_IMPL_DOM_CLONENODE(_elementName) \
|
||||
NS_IMPL_DOM_CLONENODE_AMBIGUOUS(_elementName, nsIDOMNode)
|
||||
|
||||
#define NS_IMPL_DOM_CLONENODE_AMBIGUOUS(_elementName, _implClass) \
|
||||
NS_IMETHODIMP \
|
||||
_elementName::CloneNode(PRBool aDeep, nsIDOMNode **aResult) \
|
||||
{ \
|
||||
*aResult = nsnull; \
|
||||
\
|
||||
_elementName *it = new _elementName(mNodeInfo); \
|
||||
if (!it) { \
|
||||
return NS_ERROR_OUT_OF_MEMORY; \
|
||||
} \
|
||||
\
|
||||
nsCOMPtr<nsIDOMNode> kungFuDeathGrip = NS_STATIC_CAST(_implClass*, it); \
|
||||
\
|
||||
nsresult rv = CopyInnerTo(it, aDeep); \
|
||||
if (NS_SUCCEEDED(rv)) { \
|
||||
kungFuDeathGrip.swap(*aResult); \
|
||||
} \
|
||||
\
|
||||
return rv; \
|
||||
}
|
||||
|
||||
#define NS_IMPL_DOM_CLONENODE_WITH_INIT(_elementName) \
|
||||
NS_IMETHODIMP \
|
||||
_elementName::CloneNode(PRBool aDeep, nsIDOMNode **aResult) \
|
||||
{ \
|
||||
*aResult = nsnull; \
|
||||
\
|
||||
_elementName *it = new _elementName(mNodeInfo); \
|
||||
if (!it) { \
|
||||
return NS_ERROR_OUT_OF_MEMORY; \
|
||||
} \
|
||||
\
|
||||
nsCOMPtr<nsIDOMNode> kungFuDeathGrip(it); \
|
||||
\
|
||||
nsresult rv = it->Init(); \
|
||||
\
|
||||
rv |= CopyInnerTo(it, aDeep); \
|
||||
if (NS_SUCCEEDED(rv)) { \
|
||||
kungFuDeathGrip.swap(*aResult); \
|
||||
} \
|
||||
\
|
||||
return rv; \
|
||||
}
|
||||
|
||||
#endif /* nsGenericElement_h___ */
|
||||
|
|
|
@ -80,22 +80,7 @@ nsXMLEventsElement::SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName, nsIAtom* aPref
|
|||
aNotify);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXMLEventsElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
|
||||
{
|
||||
*aReturn = nsnull;
|
||||
|
||||
nsXMLEventsElement* it = new nsXMLEventsElement(mNodeInfo);
|
||||
if (!it) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMNode> kungFuDeathGrip(it);
|
||||
CopyInnerTo(it, aDeep);
|
||||
kungFuDeathGrip.swap(*aReturn);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
NS_IMPL_DOM_CLONENODE(nsXMLEventsElement)
|
||||
|
||||
nsresult
|
||||
NS_NewXMLEventsElement(nsIContent** aInstancePtrResult, nsINodeInfo *aNodeInfo)
|
||||
|
|
|
@ -987,30 +987,6 @@ NS_NewHTML##_elementName##Element(nsINodeInfo *aNodeInfo, PRBool aFromParser)\
|
|||
return new nsHTML##_elementName##Element(aNodeInfo, aFromParser); \
|
||||
}
|
||||
|
||||
/**
|
||||
* A macro to implement the nsHTMLXXXElement::CloneNode().
|
||||
*/
|
||||
#define NS_IMPL_HTML_DOM_CLONENODE(_elementName) \
|
||||
nsresult \
|
||||
nsHTML##_elementName##Element::CloneNode(PRBool aDeep, nsIDOMNode** aReturn) \
|
||||
{ \
|
||||
*aReturn = nsnull; \
|
||||
\
|
||||
nsHTML##_elementName##Element* it = \
|
||||
new nsHTML##_elementName##Element(mNodeInfo); \
|
||||
if (!it) { \
|
||||
return NS_ERROR_OUT_OF_MEMORY; \
|
||||
} \
|
||||
\
|
||||
nsCOMPtr<nsIDOMNode> kungFuDeathGrip(it); \
|
||||
\
|
||||
CopyInnerTo(it, aDeep); \
|
||||
\
|
||||
kungFuDeathGrip.swap(*aReturn); \
|
||||
\
|
||||
return NS_OK; \
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A macro to implement the getter and setter for a given string
|
||||
|
|
|
@ -153,7 +153,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLAnchorElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Anchor)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLAnchorElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLAnchorElement, Charset, charset)
|
||||
|
|
|
@ -130,7 +130,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLAppletElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Applet)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLAppletElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLAppletElement, Align, align)
|
||||
|
|
|
@ -134,7 +134,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLAreaElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Area)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLAreaElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLAreaElement, AccessKey, accesskey)
|
||||
|
|
|
@ -100,7 +100,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLBRElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(BR)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLBRElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLBRElement, Clear, clear)
|
||||
|
|
|
@ -319,7 +319,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLBodyElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Body)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLBodyElement)
|
||||
|
||||
|
||||
NS_IMPL_URI_ATTR(nsHTMLBodyElement, Background, background)
|
||||
|
|
|
@ -155,7 +155,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_END
|
|||
// nsIDOMHTMLButtonElement
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Button)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLButtonElement)
|
||||
|
||||
|
||||
// nsIDOMHTMLButtonElement
|
||||
|
|
|
@ -92,7 +92,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLModElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Mod)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLModElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLModElement, Cite, cite)
|
||||
|
|
|
@ -104,7 +104,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLDivElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Div)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLDivElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLDivElement, Align, align)
|
||||
|
|
|
@ -107,7 +107,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_END
|
|||
// nsIDOMHTMLFieldSetElement
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(FieldSet)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLFieldSetElement)
|
||||
|
||||
|
||||
// nsIDOMHTMLFieldSetElement
|
||||
|
|
|
@ -104,7 +104,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLFontElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Font)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLFontElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLFontElement, Color, color)
|
||||
|
|
|
@ -494,27 +494,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_END
|
|||
|
||||
// nsIDOMHTMLFormElement
|
||||
|
||||
nsresult
|
||||
nsHTMLFormElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
|
||||
{
|
||||
*aReturn = nsnull;
|
||||
|
||||
nsHTMLFormElement* it = new nsHTMLFormElement(mNodeInfo);
|
||||
if (!it) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMNode> kungFuDeathGrip(it);
|
||||
|
||||
nsresult rv = it->Init();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
CopyInnerTo(it, aDeep);
|
||||
|
||||
kungFuDeathGrip.swap(*aReturn);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsHTMLFormElement)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLFormElement::GetElements(nsIDOMHTMLCollection** aElements)
|
||||
|
|
|
@ -104,7 +104,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLFrameElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Frame)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLFrameElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLFrameElement, FrameBorder, frameborder)
|
||||
|
|
|
@ -159,7 +159,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLFrameSetElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(FrameSet)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLFrameSetElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLFrameSetElement, Cols, cols)
|
||||
|
|
|
@ -107,7 +107,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLHRElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(HR)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLHRElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLHRElement, Align, align)
|
||||
|
|
|
@ -91,7 +91,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLHeadElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Head)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLHeadElement)
|
||||
|
||||
|
||||
NS_IMPL_URI_ATTR(nsHTMLHeadElement, Profile, profile)
|
||||
|
|
|
@ -101,7 +101,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLHeadingElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Heading)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLHeadingElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLHeadingElement, Align, align)
|
||||
|
|
|
@ -93,7 +93,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLHtmlElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Html)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLHtmlElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLHtmlElement, Version, version)
|
||||
|
|
|
@ -103,7 +103,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLIFrameElement, nsGenericHTMLFrameEleme
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(IFrame)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLIFrameElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLIFrameElement, Align, align)
|
||||
|
|
|
@ -205,7 +205,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLImageElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Image)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLImageElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLImageElement, Name, name)
|
||||
|
|
|
@ -101,7 +101,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLLIElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(LI)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLLIElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLLIElement, Type, type)
|
||||
|
|
|
@ -143,7 +143,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_END
|
|||
// nsIDOMHTMLLabelElement
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Label)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLLabelElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -115,7 +115,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_END
|
|||
// nsIDOMHTMLLegendElement
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Legend)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLLegendElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -148,7 +148,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLLinkElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Link)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLLinkElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -132,7 +132,7 @@ nsHTMLMapElement::SetDocument(nsIDocument* aDocument, PRBool aDeep,
|
|||
}
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Map)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLMapElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -93,7 +93,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLMetaElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Meta)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLMetaElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLMetaElement, Content, content)
|
||||
|
|
|
@ -118,25 +118,8 @@ NS_HTML_CONTENT_INTERFACE_MAP_AMBIGOUS_BEGIN(nsHTMLSharedListElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
nsresult
|
||||
nsHTMLSharedListElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
|
||||
{
|
||||
*aReturn = nsnull;
|
||||
|
||||
nsHTMLSharedListElement *it = new nsHTMLSharedListElement(mNodeInfo);
|
||||
if (!it) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMNode> kungFuDeathGrip =
|
||||
NS_STATIC_CAST(nsIDOMHTMLOListElement *, it);
|
||||
|
||||
CopyInnerTo(it, aDeep);
|
||||
|
||||
kungFuDeathGrip.swap(*aReturn);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
NS_IMPL_DOM_CLONENODE_AMBIGUOUS(nsHTMLSharedListElement,
|
||||
nsIDOMHTMLOListElement)
|
||||
|
||||
|
||||
NS_IMPL_BOOL_ATTR(nsHTMLSharedListElement, Compact, compact)
|
||||
|
|
|
@ -139,7 +139,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_END
|
|||
// nsIDOMHTMLObjectElement
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Object)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLObjectElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -120,7 +120,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLOptGroupElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(OptGroup)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLOptGroupElement)
|
||||
|
||||
|
||||
NS_IMPL_BOOL_ATTR(nsHTMLOptGroupElement, Disabled, disabled)
|
||||
|
|
|
@ -203,7 +203,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLOptionElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Option)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLOptionElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -105,7 +105,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLParagraphElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Paragraph)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLParagraphElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLParagraphElement, Align, align)
|
||||
|
|
|
@ -103,7 +103,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLPreElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Pre)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLPreElement)
|
||||
|
||||
|
||||
NS_IMPL_INT_ATTR(nsHTMLPreElement, Width, width)
|
||||
|
|
|
@ -473,7 +473,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_END
|
|||
// nsIDOMHTMLSelectElement
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Select)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLSelectElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -171,25 +171,8 @@ NS_HTML_CONTENT_INTERFACE_MAP_AMBIGOUS_BEGIN(nsHTMLSharedElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
nsresult
|
||||
nsHTMLSharedElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
|
||||
{
|
||||
*aReturn = nsnull;
|
||||
NS_IMPL_DOM_CLONENODE_AMBIGUOUS(nsHTMLSharedElement, nsIDOMHTMLEmbedElement)
|
||||
|
||||
nsHTMLSharedElement *it = new nsHTMLSharedElement(mNodeInfo);
|
||||
if (!it) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMNode> kungFuDeathGrip =
|
||||
NS_STATIC_CAST(nsIDOMHTMLEmbedElement *, it);
|
||||
|
||||
CopyInnerTo(it, aDeep);
|
||||
|
||||
kungFuDeathGrip.swap(*aReturn);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// Implement nsIDOMHTMLEmbedElement interface
|
||||
|
|
|
@ -121,7 +121,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_END
|
|||
// nsIDOMHTMLObjectElement
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Object)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLObjectElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -92,7 +92,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLSpanElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Span)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLSpanElement)
|
||||
|
||||
|
||||
static void
|
||||
|
@ -166,4 +166,4 @@ nsHTMLUnknownElement::nsHTMLUnknownElement(nsINodeInfo *aNodeInfo)
|
|||
NS_IMPL_NS_NEW_HTML_ELEMENT(Unknown)
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Unknown)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLUnknownElement)
|
||||
|
|
|
@ -132,7 +132,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLStyleElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Style)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLStyleElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -102,7 +102,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLTableCaptionElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(TableCaption)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLTableCaptionElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR(nsHTMLTableCaptionElement, Align, align)
|
||||
|
|
|
@ -111,7 +111,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLTableCellElement, nsGenericHTMLElement
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(TableCell)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLTableCellElement)
|
||||
|
||||
|
||||
// protected method
|
||||
|
|
|
@ -106,7 +106,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLTableColElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(TableCol)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLTableColElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR_DEFAULT_VALUE(nsHTMLTableColElement, Align, align, "left")
|
||||
|
|
|
@ -336,7 +336,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLTableElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Table)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLTableElement)
|
||||
|
||||
|
||||
// the DOM spec says border, cellpadding, cellSpacing are all "wstring"
|
||||
|
|
|
@ -146,7 +146,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLTableRowElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(TableRow)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLTableRowElement)
|
||||
|
||||
|
||||
// protected method
|
||||
|
|
|
@ -114,7 +114,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLTableSectionElement,
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(TableSection)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLTableSectionElement)
|
||||
|
||||
|
||||
NS_IMPL_STRING_ATTR_DEFAULT_VALUE(nsHTMLTableSectionElement, Align, align, "left")
|
||||
|
|
|
@ -203,7 +203,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_END
|
|||
// nsIDOMHTMLTextAreaElement
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(TextArea)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLTextAreaElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -94,7 +94,7 @@ NS_HTML_CONTENT_INTERFACE_MAP_BEGIN(nsHTMLTitleElement, nsGenericHTMLElement)
|
|||
NS_HTML_CONTENT_INTERFACE_MAP_END
|
||||
|
||||
|
||||
NS_IMPL_HTML_DOM_CLONENODE(Title)
|
||||
NS_IMPL_DOM_CLONENODE(nsHTMLTitleElement)
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -158,7 +158,7 @@ nsSVGCircleElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Circle)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGCircleElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -105,7 +105,7 @@ nsSVGDefsElement::~nsSVGDefsElement()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Defs)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGDefsElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -697,51 +697,6 @@ nsSVGElement::SetAttrAndNotify(PRInt32 aNamespaceID, nsIAtom* aAttribute,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsSVGElement::CopyNode(nsSVGElement* aDest, PRBool aDeep)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
// copy attributes:
|
||||
PRUint32 i, count = mAttrsAndChildren.AttrCount();
|
||||
for (i = 0; i < count; ++i) {
|
||||
const nsAttrName* name = mAttrsAndChildren.GetSafeAttrNameAt(i);
|
||||
const nsAttrValue* value = mAttrsAndChildren.AttrAt(i);
|
||||
nsAutoString valStr;
|
||||
value->ToString(valStr);
|
||||
rv = aDest->SetAttr(name->NamespaceID(), name->LocalName(),
|
||||
name->GetPrefix(), valStr, PR_FALSE);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
if (aDeep) {
|
||||
// copy children:
|
||||
PRInt32 count = mAttrsAndChildren.ChildCount();
|
||||
for (PRInt32 i = 0; i < count; ++i) {
|
||||
nsIContent* child = mAttrsAndChildren.ChildAt(i);
|
||||
|
||||
nsCOMPtr<nsIDOMNode> domchild = do_QueryInterface(child);
|
||||
NS_ASSERTION(domchild != nsnull, "child is not a DOM node");
|
||||
if (! domchild)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
nsCOMPtr<nsIDOMNode> newdomchild;
|
||||
rv = domchild->CloneNode(PR_TRUE, getter_AddRefs(newdomchild));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIContent> newchild = do_QueryInterface(newdomchild);
|
||||
NS_ASSERTION(newchild != nsnull, "newdomchild is not an nsIContent");
|
||||
if (!newchild)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
rv = aDest->AppendChildTo(newchild, PR_FALSE, PR_FALSE);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
void
|
||||
nsSVGElement::UpdateContentStyleRule()
|
||||
{
|
||||
|
|
|
@ -146,7 +146,6 @@ protected:
|
|||
PRBool aFireMutation,
|
||||
PRBool aNotify);
|
||||
|
||||
nsresult CopyNode(nsSVGElement* dest, PRBool deep);
|
||||
void UpdateContentStyleRule();
|
||||
nsISVGValue* GetMappedAttribute(PRInt32 aNamespaceID, nsIAtom* aName);
|
||||
nsresult AddMappedSVGValue(nsIAtom* aName, nsISupports* aValue,
|
||||
|
@ -185,34 +184,5 @@ NS_NewSVG##_elementName##Element(nsIContent **aResult, \
|
|||
return rv; \
|
||||
}
|
||||
|
||||
/**
|
||||
* A macro to implement the nsSVGXXXElement::CloneNode().
|
||||
*/
|
||||
#define NS_IMPL_SVG_DOM_CLONENODE(_elementName) \
|
||||
NS_IMETHODIMP \
|
||||
nsSVG##_elementName##Element::CloneNode(PRBool aDeep, nsIDOMNode** aReturn) \
|
||||
{ \
|
||||
*aReturn = nsnull; \
|
||||
\
|
||||
nsSVG##_elementName##Element* it = \
|
||||
new nsSVG##_elementName##Element(mNodeInfo); \
|
||||
if (!it) { \
|
||||
return NS_ERROR_OUT_OF_MEMORY; \
|
||||
} \
|
||||
\
|
||||
nsCOMPtr<nsIDOMNode> kungFuDeathGrip(it); \
|
||||
\
|
||||
nsresult rv = it->Init(); \
|
||||
\
|
||||
rv |= CopyNode(it, aDeep); \
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv), "Error copying SVG node!"); \
|
||||
\
|
||||
if (NS_SUCCEEDED(rv)) { \
|
||||
kungFuDeathGrip.swap(*aReturn); \
|
||||
} \
|
||||
\
|
||||
return rv; \
|
||||
}
|
||||
|
||||
|
||||
#endif // __NS_SVGELEMENT_H__
|
||||
|
|
|
@ -178,7 +178,7 @@ nsSVGEllipseElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Ellipse)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGEllipseElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -177,7 +177,7 @@ nsSVGForeignObjectElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(ForeignObject)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGForeignObjectElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -106,7 +106,7 @@ nsSVGGElement::~nsSVGGElement()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(G)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGGElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -364,7 +364,7 @@ nsSVGLinearGradientElement::Init()
|
|||
//----------------------------------------------------------------------
|
||||
// nsIDOMNode methods
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(LinearGradient)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGLinearGradientElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// nsIDOMSVGLinearGradientElement methods
|
||||
|
@ -549,7 +549,7 @@ nsSVGRadialGradientElement::Init()
|
|||
//----------------------------------------------------------------------
|
||||
// nsIDOMNode methods
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(RadialGradient)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGRadialGradientElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// nsIDOMSVGRadialGradientElement methods
|
||||
|
|
|
@ -200,7 +200,7 @@ nsSVGImageElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Image)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGImageElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -176,7 +176,7 @@ nsSVGLineElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Line)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGLineElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -128,7 +128,7 @@ nsSVGPathElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Path)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGPathElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -126,7 +126,7 @@ nsSVGPolygonElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Polygon)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGPolygonElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -126,7 +126,7 @@ nsSVGPolylineElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Polyline)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGPolylineElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -205,7 +205,7 @@ nsSVGRectElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Rect)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGRectElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -265,7 +265,7 @@ nsSVGSVGElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(SVG)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGSVGElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -181,7 +181,7 @@ nsSVGScriptElement::Init()
|
|||
//----------------------------------------------------------------------
|
||||
// nsIDOMNode methods
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Script)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGScriptElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// nsIDOMSVGScriptElement methods
|
||||
|
|
|
@ -130,7 +130,7 @@ nsSVGStopElement::Init()
|
|||
//----------------------------------------------------------------------
|
||||
// nsIDOMNode methods
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Stop)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGStopElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// nsIDOMSVGStopElement methods
|
||||
|
|
|
@ -137,7 +137,7 @@ nsSVGStyleElement::~nsSVGStyleElement()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Style)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGStyleElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -160,7 +160,7 @@ nsSVGTSpanElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(TSpan)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGTSpanElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -167,7 +167,7 @@ nsSVGTextElement::Init()
|
|||
// nsIDOMNode methods
|
||||
|
||||
|
||||
NS_IMPL_SVG_DOM_CLONENODE(Text)
|
||||
NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGTextElement)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -435,24 +435,7 @@ nsXMLElement::IsFocusable(PRInt32 *aTabIndex)
|
|||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXMLElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
|
||||
{
|
||||
*aReturn = nsnull;
|
||||
|
||||
nsXMLElement* it = new nsXMLElement(mNodeInfo);
|
||||
if (!it) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMNode> kungFuDeathGrip(it);
|
||||
|
||||
CopyInnerTo(it, aDeep);
|
||||
|
||||
kungFuDeathGrip.swap(*aReturn);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
NS_IMPL_DOM_CLONENODE(nsXMLElement)
|
||||
|
||||
// nsIStyledContent implementation
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче