diff --git a/content/base/src/nsDOMAttribute.cpp b/content/base/src/nsDOMAttribute.cpp index ddaa40ac6e38..4a02cd55c9ca 100644 --- a/content/base/src/nsDOMAttribute.cpp +++ b/content/base/src/nsDOMAttribute.cpp @@ -105,9 +105,9 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_END // QueryInterface implementation for nsDOMAttribute NS_INTERFACE_TABLE_HEAD(nsDOMAttribute) NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY - NS_NODE_INTERFACE_TABLE7(nsDOMAttribute, nsIDOMAttr, nsIAttribute, nsINode, + NS_NODE_INTERFACE_TABLE8(nsDOMAttribute, nsIDOMAttr, nsIAttribute, nsINode, nsIDOMNode, nsIDOM3Node, nsIDOM3Attr, - nsPIDOMEventTarget) + nsPIDOMEventTarget, nsIDOMXPathNSResolver) NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsDOMAttribute) NS_INTERFACE_MAP_ENTRY_TEAROFF(nsISupportsWeakReference, new nsNodeSupportsWeakRefTearoff(this)) diff --git a/content/base/src/nsDOMAttribute.h b/content/base/src/nsDOMAttribute.h index cac135e26cc9..a7b5bb61e33b 100644 --- a/content/base/src/nsDOMAttribute.h +++ b/content/base/src/nsDOMAttribute.h @@ -54,6 +54,7 @@ #include "nsDOMAttributeMap.h" #include "nsCycleCollectionParticipant.h" #include "nsContentUtils.h" +#include "nsIDOMXPathNSResolver.h" class nsDOMAttribute; @@ -61,7 +62,8 @@ class nsDOMAttribute; // object that implements nsIDOMAttr, nsIDOM3Attr, nsIDOMNode, nsIDOM3Node class nsDOMAttribute : public nsIAttribute, public nsIDOMAttr, - public nsIDOM3Attr + public nsIDOM3Attr, + public nsIDOMXPathNSResolver { public: nsDOMAttribute(nsDOMAttributeMap* aAttrMap, nsINodeInfo *aNodeInfo, diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp index d0afa75447cc..da9dc2e04bca 100644 --- a/content/base/src/nsDocument.cpp +++ b/content/base/src/nsDocument.cpp @@ -1610,6 +1610,7 @@ NS_INTERFACE_TABLE_HEAD(nsDocument) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIMutationObserver) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMNodeSelector) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIApplicationCacheContainer) + NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMXPathNSResolver) NS_OFFSET_AND_INTERFACE_TABLE_END NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsDocument) diff --git a/content/base/src/nsDocument.h b/content/base/src/nsDocument.h index f6d3c6c5885b..e19f21b29d2a 100644 --- a/content/base/src/nsDocument.h +++ b/content/base/src/nsDocument.h @@ -110,6 +110,7 @@ #include "nsContentUtils.h" #include "nsThreadUtils.h" #include "nsIDocumentViewer.h" +#include "nsIDOMXPathNSResolver.h" #include "nsIInterfaceRequestor.h" #include "nsILoadContext.h" #include "nsIProgressEventSink.h" @@ -573,6 +574,7 @@ class nsDocument : public nsIDocument, public nsIRadioGroupContainer, public nsIDOMNodeSelector, public nsIApplicationCacheContainer, + public nsIDOMXPathNSResolver, public nsStubMutationObserver { public: diff --git a/content/base/src/nsGenericDOMDataNode.cpp b/content/base/src/nsGenericDOMDataNode.cpp index 1d59611e3bf9..774d2b8ea942 100644 --- a/content/base/src/nsGenericDOMDataNode.cpp +++ b/content/base/src/nsGenericDOMDataNode.cpp @@ -120,6 +120,8 @@ NS_INTERFACE_MAP_BEGIN(nsGenericDOMDataNode) NS_INTERFACE_MAP_ENTRY_TEAROFF(nsISupportsWeakReference, new nsNodeSupportsWeakRefTearoff(this)) NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3Node, new nsNode3Tearoff(this)) + NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMXPathNSResolver, + new nsNode3Tearoff(this)) // nsNodeSH::PreCreate() depends on the identity pointer being the // same as nsINode (which nsIContent inherits), so if you change the // below line, make sure nsNodeSH::PreCreate() still does the right diff --git a/content/base/src/nsGenericElement.cpp b/content/base/src/nsGenericElement.cpp index a695a13d864a..41743f56a651 100644 --- a/content/base/src/nsGenericElement.cpp +++ b/content/base/src/nsGenericElement.cpp @@ -636,6 +636,7 @@ NS_IMPL_CYCLE_COLLECTION_1(nsNode3Tearoff, mContent) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsNode3Tearoff) NS_INTERFACE_MAP_ENTRY(nsIDOM3Node) + NS_INTERFACE_MAP_ENTRY(nsIDOMXPathNSResolver) NS_INTERFACE_MAP_END_AGGREGATED(mContent) NS_IMPL_CYCLE_COLLECTING_ADDREF(nsNode3Tearoff) @@ -856,7 +857,8 @@ nsNode3Tearoff::GetFeature(const nsAString& aFeature, const nsAString& aVersion, nsISupports** aReturn) { - return nsGenericElement::InternalGetFeature(this, aFeature, aVersion, aReturn); + return nsGenericElement::InternalGetFeature(static_cast(this), + aFeature, aVersion, aReturn); } NS_IMETHODIMP @@ -4078,6 +4080,8 @@ NS_INTERFACE_MAP_BEGIN(nsGenericElement) new nsNodeSupportsWeakRefTearoff(this)) NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMNodeSelector, new nsNodeSelectorTearoff(this)) + NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMXPathNSResolver, + new nsNode3Tearoff(this)) // nsNodeSH::PreCreate() depends on the identity pointer being the // same as nsINode (which nsIContent inherits), so if you change the // below line, make sure nsNodeSH::PreCreate() still does the right diff --git a/content/base/src/nsGenericElement.h b/content/base/src/nsGenericElement.h index dcd60851a40c..a115addc2cfb 100644 --- a/content/base/src/nsGenericElement.h +++ b/content/base/src/nsGenericElement.h @@ -64,6 +64,7 @@ #include "nsCycleCollectionParticipant.h" #include "nsIDocument.h" #include "nsIDOMNodeSelector.h" +#include "nsIDOMXPathNSResolver.h" #ifdef MOZ_SMIL #include "nsISMILAttr.h" @@ -144,14 +145,14 @@ private: /** * A tearoff class for nsGenericElement to implement additional interfaces */ -class nsNode3Tearoff : public nsIDOM3Node +class nsNode3Tearoff : public nsIDOM3Node, public nsIDOMXPathNSResolver { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_NSIDOM3NODE - NS_DECL_CYCLE_COLLECTION_CLASS(nsNode3Tearoff) + NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsNode3Tearoff, nsIDOM3Node) nsNode3Tearoff(nsIContent *aContent) : mContent(aContent) { diff --git a/content/base/test/Makefile.in b/content/base/test/Makefile.in index c0eb7da91b31..15099885ceca 100644 --- a/content/base/test/Makefile.in +++ b/content/base/test/Makefile.in @@ -129,6 +129,7 @@ _TEST_FILES = test_bug5141.html \ test_bug382113.html \ test_bug382871.html \ test_bug383430.html \ + test_bug384003.xhtml \ test_bug390219.html \ test_bug390735.html \ test_bug392318.html \ diff --git a/content/base/test/test_bug384003.xhtml b/content/base/test/test_bug384003.xhtml new file mode 100644 index 000000000000..d5250f5e3753 --- /dev/null +++ b/content/base/test/test_bug384003.xhtml @@ -0,0 +1,86 @@ + + + + + Test for Bug 384003 + + + + + +Mozilla Bug 384003 +

+ +

+
+
+ +