зеркало из https://github.com/mozilla/pjs.git
Backed out changeset e0cce6a738c9 (Bug 466224 - Make quickstubs call nsINode/nsINodeList methods) for failing mochitest
This commit is contained in:
Родитель
99a013b6c2
Коммит
96fe958288
|
@ -1299,12 +1299,4 @@ NS_NewDOMDocument(nsIDOMDocument** aInstancePtrResult,
|
|||
nsresult
|
||||
NS_NewPluginDocument(nsIDocument** aInstancePtrResult);
|
||||
|
||||
inline nsIDocument*
|
||||
nsINode::GetOwnerDocument() const
|
||||
{
|
||||
nsIDocument* ownerDoc = GetOwnerDoc();
|
||||
|
||||
return ownerDoc != this ? ownerDoc : nsnull;
|
||||
}
|
||||
|
||||
#endif /* nsIDocument_h___ */
|
||||
|
|
|
@ -49,8 +49,6 @@
|
|||
class nsIContent;
|
||||
class nsIDocument;
|
||||
class nsIDOMEvent;
|
||||
class nsIDOMNode;
|
||||
class nsIDOMNodeList;
|
||||
class nsIPresShell;
|
||||
class nsPresContext;
|
||||
class nsEventChainVisitor;
|
||||
|
@ -153,9 +151,9 @@ inline nsINode* NODE_FROM(C& aContent, D& aDocument)
|
|||
|
||||
// IID for the nsINode interface
|
||||
#define NS_INODE_IID \
|
||||
{ 0x0dc8fad3, 0xcb3f, 0x4f14, \
|
||||
{ 0x8e, 0x7e, 0x4f, 0x62, 0xab, 0x74, 0xb8, 0x1e } }
|
||||
|
||||
{ 0xb4125da4, 0x6f86, 0x45aa, \
|
||||
{ 0xbb, 0x55, 0x80, 0x70, 0x44, 0x24, 0xe2, 0x47 } }
|
||||
|
||||
/**
|
||||
* An internal interface that abstracts some DOMNode-related parts that both
|
||||
* nsIContent and nsIDocument share. An instance of this interface has a list
|
||||
|
@ -690,30 +688,6 @@ public:
|
|||
*/
|
||||
nsIContent* GetSelectionRootContent(nsIPresShell* aPresShell);
|
||||
|
||||
virtual nsIDOMNodeList* GetChildNodesList();
|
||||
nsIContent* GetSibling(PRInt32 aOffset)
|
||||
{
|
||||
nsINode *parent = GetNodeParent();
|
||||
if (!parent) {
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
return parent->GetChildAt(parent->IndexOf(this) + aOffset);
|
||||
}
|
||||
nsIContent* GetLastChild() const
|
||||
{
|
||||
PRUint32 count;
|
||||
nsIContent* const* children = GetChildArray(&count);
|
||||
|
||||
return count > 0 ? children[count - 1] : nsnull;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation is in nsIDocument.h, because it needs to cast from
|
||||
* nsIDocument* to nsINode*.
|
||||
*/
|
||||
nsIDocument* GetOwnerDocument() const;
|
||||
|
||||
protected:
|
||||
|
||||
// Override this function to create a custom slots class.
|
||||
|
@ -760,14 +734,6 @@ protected:
|
|||
return IsEditableInternal();
|
||||
}
|
||||
|
||||
nsresult GetParentNode(nsIDOMNode** aParentNode);
|
||||
nsresult GetChildNodes(nsIDOMNodeList** aChildNodes);
|
||||
nsresult GetFirstChild(nsIDOMNode** aFirstChild);
|
||||
nsresult GetLastChild(nsIDOMNode** aLastChild);
|
||||
nsresult GetPreviousSibling(nsIDOMNode** aPrevSibling);
|
||||
nsresult GetNextSibling(nsIDOMNode** aNextSibling);
|
||||
nsresult GetOwnerDocument(nsIDOMDocument** aOwnerDocument);
|
||||
|
||||
nsCOMPtr<nsINodeInfo> mNodeInfo;
|
||||
|
||||
enum { PARENT_BIT_INDOCUMENT = 1 << 0, PARENT_BIT_PARENT_IS_CONTENT = 1 << 1 };
|
||||
|
@ -811,8 +777,7 @@ extern const nsIID kThisPtrOffsetsSID;
|
|||
// nsINode, so if you change the nsISupports line below, make sure
|
||||
// nsNodeSH::PreCreate() still does the right thing!
|
||||
#define NS_NODE_OFFSET_AND_INTERFACE_TABLE_BEGIN(_class) \
|
||||
NS_OFFSET_AND_INTERFACE_TABLE_BEGIN_AMBIGUOUS(_class, nsINode) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, nsINode)
|
||||
NS_OFFSET_AND_INTERFACE_TABLE_BEGIN_AMBIGUOUS(_class, nsINode)
|
||||
|
||||
#define NS_NODE_INTERFACE_TABLE2(_class, _i1, _i2) \
|
||||
NS_NODE_OFFSET_AND_INTERFACE_TABLE_BEGIN(_class) \
|
||||
|
|
|
@ -38,9 +38,8 @@
|
|||
#ifndef nsINodeList_h___
|
||||
#define nsINodeList_h___
|
||||
|
||||
#include "nsIDOMNodeList.h"
|
||||
|
||||
class nsINode;
|
||||
class nsIDOMNodeList;
|
||||
|
||||
// IID for the nsINodeList interface
|
||||
#define NS_INODELIST_IID \
|
||||
|
|
|
@ -260,7 +260,18 @@ nsDOMAttribute::GetParentNode(nsIDOMNode** aParentNode)
|
|||
NS_IMETHODIMP
|
||||
nsDOMAttribute::GetChildNodes(nsIDOMNodeList** aChildNodes)
|
||||
{
|
||||
return nsINode::GetChildNodes(aChildNodes);
|
||||
nsSlots *slots = GetSlots();
|
||||
NS_ENSURE_TRUE(slots, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
if (!slots->mChildNodes) {
|
||||
slots->mChildNodes = new nsChildContentList(this);
|
||||
NS_ENSURE_TRUE(slots->mChildNodes, NS_ERROR_OUT_OF_MEMORY);
|
||||
NS_ADDREF(slots->mChildNodes);
|
||||
}
|
||||
|
||||
NS_ADDREF(*aChildNodes = slots->mChildNodes);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -386,7 +397,11 @@ nsDOMAttribute::CloneNode(PRBool aDeep, nsIDOMNode** aResult)
|
|||
NS_IMETHODIMP
|
||||
nsDOMAttribute::GetOwnerDocument(nsIDOMDocument** aOwnerDocument)
|
||||
{
|
||||
return nsINode::GetOwnerDocument(aOwnerDocument);
|
||||
*aOwnerDocument = nsnull;
|
||||
|
||||
nsIDocument *document = GetOwnerDoc();
|
||||
|
||||
return document ? CallQueryInterface(document, aOwnerDocument) : NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -5333,7 +5333,18 @@ nsDocument::GetParentNode(nsIDOMNode** aParentNode)
|
|||
NS_IMETHODIMP
|
||||
nsDocument::GetChildNodes(nsIDOMNodeList** aChildNodes)
|
||||
{
|
||||
return nsINode::GetChildNodes(aChildNodes);
|
||||
nsSlots *slots = GetSlots();
|
||||
NS_ENSURE_TRUE(slots, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
if (!slots->mChildNodes) {
|
||||
slots->mChildNodes = new nsChildContentList(this);
|
||||
NS_ENSURE_TRUE(slots->mChildNodes, NS_ERROR_OUT_OF_MEMORY);
|
||||
NS_ADDREF(slots->mChildNodes);
|
||||
}
|
||||
|
||||
NS_ADDREF(*aChildNodes = slots->mChildNodes);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -5359,13 +5370,26 @@ nsDocument::HasAttributes(PRBool* aHasAttributes)
|
|||
NS_IMETHODIMP
|
||||
nsDocument::GetFirstChild(nsIDOMNode** aFirstChild)
|
||||
{
|
||||
return nsINode::GetFirstChild(aFirstChild);
|
||||
if (mChildren.ChildCount()) {
|
||||
return CallQueryInterface(mChildren.ChildAt(0), aFirstChild);
|
||||
}
|
||||
|
||||
*aFirstChild = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocument::GetLastChild(nsIDOMNode** aLastChild)
|
||||
{
|
||||
return nsINode::GetLastChild(aLastChild);
|
||||
PRInt32 count = mChildren.ChildCount();
|
||||
if (count) {
|
||||
return CallQueryInterface(mChildren.ChildAt(count-1), aLastChild);
|
||||
}
|
||||
|
||||
*aLastChild = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -5967,7 +5991,9 @@ nsDocument::RenameNode(nsIDOMNode *aNode,
|
|||
NS_IMETHODIMP
|
||||
nsDocument::GetOwnerDocument(nsIDOMDocument** aOwnerDocument)
|
||||
{
|
||||
return nsINode::GetOwnerDocument(aOwnerDocument);
|
||||
*aOwnerDocument = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
|
|
@ -145,6 +145,77 @@ nsGenericDOMDataNode::SetNodeValue(const nsAString& aNodeValue)
|
|||
aNodeValue.Length(), PR_TRUE);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericDOMDataNode::GetParentNode(nsIDOMNode** aParentNode)
|
||||
{
|
||||
*aParentNode = nsnull;
|
||||
nsINode *parent = GetNodeParent();
|
||||
|
||||
return parent ? CallQueryInterface(parent, aParentNode) : NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericDOMDataNode::GetPreviousSibling(nsIDOMNode** aPrevSibling)
|
||||
{
|
||||
*aPrevSibling = nsnull;
|
||||
|
||||
nsINode *parent = GetNodeParent();
|
||||
if (!parent) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32 pos = parent->IndexOf(this);
|
||||
nsIContent *sibling = parent->GetChildAt(pos - 1);
|
||||
|
||||
return sibling ? CallQueryInterface(sibling, aPrevSibling) : NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericDOMDataNode::GetNextSibling(nsIDOMNode** aNextSibling)
|
||||
{
|
||||
*aNextSibling = nsnull;
|
||||
|
||||
nsINode *parent = GetNodeParent();
|
||||
if (!parent) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32 pos = parent->IndexOf(this);
|
||||
nsIContent *sibling = parent->GetChildAt(pos + 1);
|
||||
|
||||
return sibling ? CallQueryInterface(sibling, aNextSibling) : NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericDOMDataNode::GetChildNodes(nsIDOMNodeList** aChildNodes)
|
||||
{
|
||||
*aChildNodes = nsnull;
|
||||
nsDataSlots *slots = GetDataSlots();
|
||||
NS_ENSURE_TRUE(slots, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
if (!slots->mChildNodes) {
|
||||
slots->mChildNodes = new nsChildContentList(this);
|
||||
NS_ENSURE_TRUE(slots->mChildNodes, NS_ERROR_OUT_OF_MEMORY);
|
||||
NS_ADDREF(slots->mChildNodes);
|
||||
}
|
||||
|
||||
NS_ADDREF(*aChildNodes = slots->mChildNodes);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericDOMDataNode::GetOwnerDocument(nsIDOMDocument** aOwnerDocument)
|
||||
{
|
||||
nsIDocument *document = GetOwnerDoc();
|
||||
if (document) {
|
||||
return CallQueryInterface(document, aOwnerDocument);
|
||||
}
|
||||
|
||||
*aOwnerDocument = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericDOMDataNode::GetNamespaceURI(nsAString& aNamespaceURI)
|
||||
{
|
||||
|
|
|
@ -73,12 +73,16 @@ public:
|
|||
// Implementation for nsIDOMNode
|
||||
nsresult GetNodeValue(nsAString& aNodeValue);
|
||||
nsresult SetNodeValue(const nsAString& aNodeValue);
|
||||
nsresult GetParentNode(nsIDOMNode** aParentNode);
|
||||
nsresult GetAttributes(nsIDOMNamedNodeMap** aAttributes)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aAttributes);
|
||||
*aAttributes = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
nsresult GetPreviousSibling(nsIDOMNode** aPreviousSibling);
|
||||
nsresult GetNextSibling(nsIDOMNode** aNextSibling);
|
||||
nsresult GetChildNodes(nsIDOMNodeList** aChildNodes);
|
||||
nsresult HasChildNodes(PRBool* aHasChildNodes)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aHasChildNodes);
|
||||
|
@ -91,6 +95,18 @@ public:
|
|||
*aHasAttributes = PR_FALSE;
|
||||
return NS_OK;
|
||||
}
|
||||
nsresult GetFirstChild(nsIDOMNode** aFirstChild)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aFirstChild);
|
||||
*aFirstChild = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
nsresult GetLastChild(nsIDOMNode** aLastChild)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aLastChild);
|
||||
*aLastChild = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
nsresult InsertBefore(nsIDOMNode* aNewChild, nsIDOMNode* aRefChild,
|
||||
nsIDOMNode** aReturn)
|
||||
{
|
||||
|
@ -126,6 +142,7 @@ public:
|
|||
*aReturn = nsnull;
|
||||
return NS_ERROR_DOM_HIERARCHY_REQUEST_ERR;
|
||||
}
|
||||
nsresult GetOwnerDocument(nsIDOMDocument** aOwnerDocument);
|
||||
nsresult GetNamespaceURI(nsAString& aNamespaceURI);
|
||||
nsresult GetLocalName(nsAString& aLocalName);
|
||||
nsresult GetPrefix(nsAString& aPrefix);
|
||||
|
|
|
@ -424,103 +424,6 @@ nsINode::GetSelectionRootContent(nsIPresShell* aPresShell)
|
|||
return doc->GetRootContent();
|
||||
}
|
||||
|
||||
nsIDOMNodeList*
|
||||
nsINode::GetChildNodesList()
|
||||
{
|
||||
nsSlots *slots = GetSlots();
|
||||
if (!slots) {
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
if (!slots->mChildNodes) {
|
||||
slots->mChildNodes = new nsChildContentList(this);
|
||||
if (slots->mChildNodes) {
|
||||
NS_ADDREF(slots->mChildNodes);
|
||||
}
|
||||
}
|
||||
|
||||
return slots->mChildNodes;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsINode::GetParentNode(nsIDOMNode** aParentNode)
|
||||
{
|
||||
*aParentNode = nsnull;
|
||||
|
||||
nsINode *parent = GetNodeParent();
|
||||
|
||||
return parent ? CallQueryInterface(parent, aParentNode) : NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsINode::GetChildNodes(nsIDOMNodeList** aChildNodes)
|
||||
{
|
||||
*aChildNodes = GetChildNodesList();
|
||||
if (!*aChildNodes) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
NS_ADDREF(*aChildNodes);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsINode::GetFirstChild(nsIDOMNode** aNode)
|
||||
{
|
||||
nsIContent* child = GetChildAt(0);
|
||||
if (child) {
|
||||
return CallQueryInterface(child, aNode);
|
||||
}
|
||||
|
||||
*aNode = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsINode::GetLastChild(nsIDOMNode** aNode)
|
||||
{
|
||||
nsIContent* child = GetLastChild();
|
||||
if (child) {
|
||||
return CallQueryInterface(child, aNode);
|
||||
}
|
||||
|
||||
*aNode = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsINode::GetPreviousSibling(nsIDOMNode** aPrevSibling)
|
||||
{
|
||||
*aPrevSibling = nsnull;
|
||||
|
||||
nsIContent *sibling = GetSibling(-1);
|
||||
|
||||
return sibling ? CallQueryInterface(sibling, aPrevSibling) : NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsINode::GetNextSibling(nsIDOMNode** aNextSibling)
|
||||
{
|
||||
*aNextSibling = nsnull;
|
||||
|
||||
nsIContent *sibling = GetSibling(1);
|
||||
|
||||
return sibling ? CallQueryInterface(sibling, aNextSibling) : NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsINode::GetOwnerDocument(nsIDOMDocument** aOwnerDocument)
|
||||
{
|
||||
*aOwnerDocument = nsnull;
|
||||
|
||||
nsIDocument *ownerDoc = GetOwnerDocument();
|
||||
|
||||
return ownerDoc ? CallQueryInterface(ownerDoc, aOwnerDocument) : NS_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
PRInt32
|
||||
|
@ -1798,6 +1701,60 @@ nsGenericElement::GetNodeType(PRUint16* aNodeType)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGenericElement::GetParentNode(nsIDOMNode** aParentNode)
|
||||
{
|
||||
*aParentNode = nsnull;
|
||||
nsINode *parent = GetNodeParent();
|
||||
|
||||
return parent ? CallQueryInterface(parent, aParentNode) : NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGenericElement::GetPreviousSibling(nsIDOMNode** aPrevSibling)
|
||||
{
|
||||
*aPrevSibling = nsnull;
|
||||
|
||||
nsINode *parent = GetNodeParent();
|
||||
if (!parent) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32 pos = parent->IndexOf(this);
|
||||
nsIContent *sibling = parent->GetChildAt(pos - 1);
|
||||
|
||||
return sibling ? CallQueryInterface(sibling, aPrevSibling) : NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGenericElement::GetNextSibling(nsIDOMNode** aNextSibling)
|
||||
{
|
||||
*aNextSibling = nsnull;
|
||||
|
||||
nsINode *parent = GetNodeParent();
|
||||
if (!parent) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32 pos = parent->IndexOf(this);
|
||||
nsIContent *sibling = parent->GetChildAt(pos + 1);
|
||||
|
||||
return sibling ? CallQueryInterface(sibling, aNextSibling) : NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGenericElement::GetOwnerDocument(nsIDOMDocument** aOwnerDocument)
|
||||
{
|
||||
nsIDocument *doc = GetOwnerDoc();
|
||||
if (doc) {
|
||||
return CallQueryInterface(doc, aOwnerDocument);
|
||||
}
|
||||
|
||||
*aOwnerDocument = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGenericElement::GetNamespaceURI(nsAString& aNamespaceURI)
|
||||
{
|
||||
|
@ -1989,6 +1946,28 @@ nsGenericElement::GetAttributes(nsIDOMNamedNodeMap** aAttributes)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericElement::GetChildNodes(nsIDOMNodeList** aChildNodes)
|
||||
{
|
||||
nsSlots *slots = GetSlots();
|
||||
|
||||
if (!slots) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
if (!slots->mChildNodes) {
|
||||
slots->mChildNodes = new nsChildContentList(this);
|
||||
if (!slots->mChildNodes) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
NS_ADDREF(slots->mChildNodes);
|
||||
}
|
||||
|
||||
NS_ADDREF(*aChildNodes = slots->mChildNodes);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericElement::HasChildNodes(PRBool* aReturn)
|
||||
{
|
||||
|
@ -1997,6 +1976,33 @@ nsGenericElement::HasChildNodes(PRBool* aReturn)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericElement::GetFirstChild(nsIDOMNode** aNode)
|
||||
{
|
||||
nsIContent* child = GetChildAt(0);
|
||||
if (child) {
|
||||
return CallQueryInterface(child, aNode);
|
||||
}
|
||||
|
||||
*aNode = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGenericElement::GetLastChild(nsIDOMNode** aNode)
|
||||
{
|
||||
PRUint32 count = GetChildCount();
|
||||
|
||||
if (count > 0) {
|
||||
return CallQueryInterface(GetChildAt(count - 1), aNode);
|
||||
}
|
||||
|
||||
*aNode = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGenericElement::GetTagName(nsAString& aTagName)
|
||||
{
|
||||
|
|
|
@ -470,7 +470,11 @@ public:
|
|||
NS_IMETHOD GetNodeValue(nsAString& aNodeValue);
|
||||
NS_IMETHOD SetNodeValue(const nsAString& aNodeValue);
|
||||
NS_IMETHOD GetNodeType(PRUint16* aNodeType);
|
||||
NS_IMETHOD GetParentNode(nsIDOMNode** aParentNode);
|
||||
NS_IMETHOD GetAttributes(nsIDOMNamedNodeMap** aAttributes);
|
||||
NS_IMETHOD GetPreviousSibling(nsIDOMNode** aPreviousSibling);
|
||||
NS_IMETHOD GetNextSibling(nsIDOMNode** aNextSibling);
|
||||
NS_IMETHOD GetOwnerDocument(nsIDOMDocument** aOwnerDocument);
|
||||
NS_IMETHOD GetNamespaceURI(nsAString& aNamespaceURI);
|
||||
NS_IMETHOD GetPrefix(nsAString& aPrefix);
|
||||
NS_IMETHOD SetPrefix(const nsAString& aPrefix);
|
||||
|
@ -478,7 +482,10 @@ public:
|
|||
NS_IMETHOD IsSupported(const nsAString& aFeature,
|
||||
const nsAString& aVersion, PRBool* aReturn);
|
||||
NS_IMETHOD HasAttributes(PRBool* aHasAttributes);
|
||||
NS_IMETHOD GetChildNodes(nsIDOMNodeList** aChildNodes);
|
||||
NS_IMETHOD HasChildNodes(PRBool* aHasChildNodes);
|
||||
NS_IMETHOD GetFirstChild(nsIDOMNode** aFirstChild);
|
||||
NS_IMETHOD GetLastChild(nsIDOMNode** aLastChild);
|
||||
NS_IMETHOD InsertBefore(nsIDOMNode* aNewChild, nsIDOMNode* aRefChild,
|
||||
nsIDOMNode** aReturn);
|
||||
NS_IMETHOD ReplaceChild(nsIDOMNode* aNewChild, nsIDOMNode* aOldChild,
|
||||
|
|
|
@ -74,7 +74,6 @@ REQUIRES += content \
|
|||
svg \
|
||||
xuldoc \
|
||||
xultmpl \
|
||||
widget \
|
||||
$(NULL)
|
||||
|
||||
|
||||
|
|
|
@ -512,51 +512,3 @@ irregularFilenames = {
|
|||
'nsIDOMNSCSS2Properties': 'nsIDOMCSS2Properties',
|
||||
'nsIXPointerResult': 'nsIXPointer',
|
||||
}
|
||||
|
||||
customIncludes = [
|
||||
'nsINode.h',
|
||||
'nsIContent.h',
|
||||
'nsIDocument.h',
|
||||
'nsINodeList.h'
|
||||
]
|
||||
|
||||
nsIDOMNode_GetChildNodes_customMethodCallCode = """
|
||||
nsIDOMNodeList* result = self->GetChildNodesList();
|
||||
if (!result)
|
||||
return xpc_qsThrowGetterSetterFailed(cx, NS_ERROR_OUT_OF_MEMORY, JSVAL_TO_OBJECT(*vp), id);
|
||||
"""
|
||||
|
||||
customMethodCalls = {
|
||||
'nsIDOMNode_GetNextSibling': {
|
||||
'thisType': 'nsINode',
|
||||
'code': ' nsINode* result = self->GetSibling(1);'
|
||||
},
|
||||
'nsIDOMNode_GetFirstChild': {
|
||||
'thisType': 'nsINode',
|
||||
'code': ' nsINode* result = self->GetChildAt(0);'
|
||||
},
|
||||
'nsIDOMNode_GetChildNodes': {
|
||||
'thisType': 'nsINode',
|
||||
'code': nsIDOMNode_GetChildNodes_customMethodCallCode
|
||||
},
|
||||
'nsIDOMNode_GetPreviousSibling': {
|
||||
'thisType': 'nsINode',
|
||||
'code': ' nsINode* result = self->GetSibling(-1);'
|
||||
},
|
||||
'nsIDOMNode_GetLastChild': {
|
||||
'thisType': 'nsINode',
|
||||
'code': ' nsINode* result = self->GetLastChild();'
|
||||
},
|
||||
'nsIDOMNode_GetOwnerDocument': {
|
||||
'thisType': 'nsINode',
|
||||
'code': ' nsIDocument* result = self->GetOwnerDocument();'
|
||||
},
|
||||
'nsIDOMNode_GetParentNode': {
|
||||
'thisType': 'nsINode',
|
||||
'code': ' nsINode* result = self->GetNodeParent();'
|
||||
},
|
||||
'nsIDOMNodeList_Item': {
|
||||
'thisType': 'nsINodeList',
|
||||
'code': ' nsINode* result = self->GetNodeAt(arg0);'
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1113,8 +1113,8 @@ nsXPConnect::InitClassesWithNewWrappedGlobal(JSContext * aJSContext,
|
|||
if(!XPCConvert::NativeInterface2JSObject(ccx, &v,
|
||||
getter_AddRefs(holder),
|
||||
aCOMObj, &aIID, nsnull,
|
||||
nsnull, tempGlobal,
|
||||
PR_FALSE, OBJ_IS_GLOBAL, &rv))
|
||||
tempGlobal, PR_FALSE,
|
||||
OBJ_IS_GLOBAL, &rv))
|
||||
return UnexpectedFailure(rv);
|
||||
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv) && holder, "Didn't wrap properly");
|
||||
|
@ -1213,7 +1213,7 @@ nsXPConnect::WrapNativeToJSVal(JSContext * aJSContext,
|
|||
|
||||
nsresult rv;
|
||||
if(!XPCConvert::NativeInterface2JSObject(ccx, aVal, aHolder, aCOMObj, aIID,
|
||||
nsnull, nsnull, aScope, PR_FALSE,
|
||||
nsnull, aScope, PR_FALSE,
|
||||
OBJ_IS_NOT_GLOBAL, &rv))
|
||||
return rv;
|
||||
|
||||
|
|
|
@ -263,8 +263,6 @@ class Configuration:
|
|||
setattr(self, name, config[name])
|
||||
# optional settings
|
||||
self.irregularFilenames = config.get('irregularFilenames', {})
|
||||
self.customIncludes = config.get('customIncludes', [])
|
||||
self.customMethodCalls = config.get('customMethodCalls', {})
|
||||
|
||||
def readConfigFile(filename, includePath, cachedir):
|
||||
# Read the config file.
|
||||
|
@ -425,7 +423,7 @@ argumentUnboxingTemplates = {
|
|||
# Omitted optional arguments are treated as though the caller had passed JS
|
||||
# `null`; this behavior is from XPCWrappedNative::CallMethod.
|
||||
#
|
||||
def writeArgumentUnboxing(f, i, name, type, haveCcx, optional, rvdeclared):
|
||||
def writeArgumentUnboxing(f, i, name, type, haveCcx, optional):
|
||||
# f - file to write to
|
||||
# i - int or None - Indicates the source jsval. If i is an int, the source
|
||||
# jsval is argv[i]; otherwise it is *vp. But if Python i >= C++ argc,
|
||||
|
@ -434,7 +432,6 @@ def writeArgumentUnboxing(f, i, name, type, haveCcx, optional, rvdeclared):
|
|||
# name - str - name of the native C++ variable to create.
|
||||
# type - xpidl.{Interface,Native,Builtin} - IDL type of argument
|
||||
# optional - bool - True if the parameter is optional.
|
||||
# rvdeclared - bool - False if no |nsresult rv| has been declared earlier.
|
||||
|
||||
isSetter = (i is None)
|
||||
|
||||
|
@ -462,7 +459,7 @@ def writeArgumentUnboxing(f, i, name, type, haveCcx, optional, rvdeclared):
|
|||
warn("Optional parameters of type %s are not supported."
|
||||
% type.name)
|
||||
f.write(substitute(template, params))
|
||||
return rvdeclared
|
||||
return
|
||||
# else fall through; the type isn't supported yet.
|
||||
elif isInterfaceType(type):
|
||||
if type.name == 'nsIVariant':
|
||||
|
@ -474,13 +471,11 @@ def writeArgumentUnboxing(f, i, name, type, haveCcx, optional, rvdeclared):
|
|||
" if (!${name})\n"
|
||||
" return JS_FALSE;\n")
|
||||
f.write(substitute(template, params))
|
||||
return rvdeclared
|
||||
return
|
||||
elif type.name == 'nsIAtom':
|
||||
# Should have special atomizing behavior. Fall through.
|
||||
pass
|
||||
else:
|
||||
if not rvdeclared:
|
||||
f.write(" nsresult rv;\n");
|
||||
f.write(" nsCOMPtr<%s> %s;\n" % (type.name, name))
|
||||
f.write(" rv = xpc_qsUnwrapArg<%s>("
|
||||
"cx, %s, getter_AddRefs(%s));\n"
|
||||
|
@ -495,7 +490,7 @@ def writeArgumentUnboxing(f, i, name, type, haveCcx, optional, rvdeclared):
|
|||
f.write(" xpc_qsThrowBadArg(cx, rv, vp, %d);\n" % i)
|
||||
f.write(" return JS_FALSE;\n"
|
||||
" }\n")
|
||||
return True
|
||||
return
|
||||
|
||||
warn("Unable to unbox argument of type %s" % type.name)
|
||||
if i is None:
|
||||
|
@ -503,9 +498,8 @@ def writeArgumentUnboxing(f, i, name, type, haveCcx, optional, rvdeclared):
|
|||
else:
|
||||
src = 'argv[%d]' % i
|
||||
f.write(" !; // TODO - Unbox argument %s = %s\n" % (name, src))
|
||||
return rvdeclared
|
||||
|
||||
def writeResultDecl(f, type, varname):
|
||||
def writeResultDecl(f, type):
|
||||
if isVoidType(type):
|
||||
return # nothing to declare
|
||||
|
||||
|
@ -516,19 +510,19 @@ def writeResultDecl(f, type, varname):
|
|||
typeName = type.name # use it
|
||||
else:
|
||||
typeName = t.nativename
|
||||
f.write(" %s %s;\n" % (typeName, varname))
|
||||
f.write(" %s result;\n" % typeName)
|
||||
return
|
||||
elif t.kind == 'native':
|
||||
name = getBuiltinOrNativeTypeName(t)
|
||||
if name in ('[domstring]', '[astring]'):
|
||||
f.write(" nsString %s;\n" % varname)
|
||||
f.write(" nsString result;\n")
|
||||
return
|
||||
elif t.kind in ('interface', 'forward'):
|
||||
f.write(" nsCOMPtr<%s> %s;\n" % (type.name, varname))
|
||||
f.write(" nsCOMPtr<%s> result;\n" % type.name)
|
||||
return
|
||||
|
||||
warn("Unable to declare result of type %s" % type.name)
|
||||
f.write(" !; // TODO - Declare out parameter `%s`.\n" % varname)
|
||||
f.write(" !; // TODO - Declare out parameter `result`.\n")
|
||||
|
||||
def outParamForm(name, type):
|
||||
type = unaliasType(type)
|
||||
|
@ -613,8 +607,7 @@ def writeResultConv(f, type, paramNum, jsvalPtr, jsvalRef):
|
|||
f.write(" AutoMarkingNativeInterfacePtr resultiface(ccx, "
|
||||
"%s_Interface(ccx));\n" % type.name)
|
||||
f.write(" return xpc_qsXPCOMObjectToJsval(ccx, result, "
|
||||
"xpc_qsGetWrapperCache(result), resultiface, %s);\n"
|
||||
% jsvalPtr)
|
||||
"resultiface, %s);\n" % jsvalPtr)
|
||||
return
|
||||
|
||||
warn("Unable to convert result of type %s" % type.name)
|
||||
|
@ -628,7 +621,7 @@ def anyParamRequiresCcx(member):
|
|||
return True
|
||||
return False
|
||||
|
||||
def writeQuickStub(f, customMethodCalls, member, stubName, isSetter=False):
|
||||
def writeQuickStub(f, member, stubName, isSetter=False):
|
||||
""" Write a single quick stub (a custom SpiderMonkey getter/setter/method)
|
||||
for the specified XPCOM interface-member.
|
||||
"""
|
||||
|
@ -637,8 +630,6 @@ def writeQuickStub(f, customMethodCalls, member, stubName, isSetter=False):
|
|||
assert isAttr or isMethod
|
||||
isGetter = isAttr and not isSetter
|
||||
|
||||
customMethodCall = customMethodCalls.get(stubName, None)
|
||||
|
||||
# Function prolog.
|
||||
f.write("static JSBool\n")
|
||||
if isAttr:
|
||||
|
@ -670,10 +661,8 @@ def writeQuickStub(f, customMethodCalls, member, stubName, isSetter=False):
|
|||
f.write(" XPCCallContext ccx(JS_CALLER, cx, obj);\n")
|
||||
|
||||
# Get the 'self' pointer.
|
||||
if customMethodCall is None or not 'thisType' in customMethodCall:
|
||||
f.write(" %s *self;\n" % member.iface.name)
|
||||
else:
|
||||
f.write(" %s *self;\n" % customMethodCall['thisType'])
|
||||
thisType = member.iface.name
|
||||
f.write(" %s *self;\n" % thisType)
|
||||
f.write(" xpc_qsSelfRef selfref;\n")
|
||||
# Don't use FromCcx for getters or setters; the way we construct the ccx in
|
||||
# a getter/setter causes it to find the wrong wrapper in some cases.
|
||||
|
@ -712,7 +701,7 @@ def writeQuickStub(f, customMethodCalls, member, stubName, isSetter=False):
|
|||
"parameter " + param.name + ": " + msg)
|
||||
|
||||
# Convert in-parameters.
|
||||
rvdeclared = False
|
||||
f.write(" nsresult rv;\n")
|
||||
if isMethod:
|
||||
if len(member.params) > 0:
|
||||
f.write(" jsval *argv = JS_ARGV(cx, vp);\n")
|
||||
|
@ -728,74 +717,48 @@ def writeQuickStub(f, customMethodCalls, member, stubName, isSetter=False):
|
|||
if param.const or param.array or param.shared:
|
||||
pfail("I am a simple caveman.")
|
||||
# Emit code to convert this argument from jsval.
|
||||
rvdeclared = writeArgumentUnboxing(
|
||||
writeArgumentUnboxing(
|
||||
f, i, 'arg%d' % i, param.realtype,
|
||||
haveCcx=haveCcx,
|
||||
optional=param.optional,
|
||||
rvdeclared=rvdeclared)
|
||||
optional=param.optional)
|
||||
elif isSetter:
|
||||
rvdeclared = writeArgumentUnboxing(f, None, 'arg0', member.realtype,
|
||||
haveCcx=False, optional=False,
|
||||
rvdeclared=rvdeclared)
|
||||
|
||||
if customMethodCall is not None:
|
||||
f.write("%s\n" % customMethodCall['code'])
|
||||
f.write("#ifdef DEBUG\n")
|
||||
f.write(" nsCOMPtr<%s> debug_self = do_QueryInterface(self);\n"
|
||||
% member.iface.name);
|
||||
prefix = 'debug_'
|
||||
else:
|
||||
prefix = ''
|
||||
|
||||
resultname = prefix + 'result'
|
||||
selfname = prefix + 'self'
|
||||
writeArgumentUnboxing(f, None, 'arg0', member.realtype,
|
||||
haveCcx=False, optional=False)
|
||||
|
||||
# Prepare out-parameter.
|
||||
if isMethod or isGetter:
|
||||
writeResultDecl(f, member.realtype, resultname)
|
||||
writeResultDecl(f, member.realtype)
|
||||
|
||||
# Call the method.
|
||||
if isMethod:
|
||||
comName = header.methodNativeName(member)
|
||||
argv = ['arg' + str(i) for i, p in enumerate(member.params)]
|
||||
if not isVoidType(member.realtype):
|
||||
argv.append(outParamForm(resultname, member.realtype))
|
||||
argv.append(outParamForm('result', member.realtype))
|
||||
args = ', '.join(argv)
|
||||
else:
|
||||
comName = header.attributeNativeName(member, isGetter)
|
||||
if isGetter:
|
||||
args = outParamForm(resultname, member.realtype)
|
||||
args = outParamForm("result", member.realtype)
|
||||
else:
|
||||
args = "arg0"
|
||||
f.write(" rv = self->%s(%s);\n" % (comName, args))
|
||||
|
||||
if not rvdeclared:
|
||||
f.write(" nsresult rv;\n")
|
||||
rvdeclared = True
|
||||
f.write(" rv = %s->%s(%s);\n" % (selfname, comName, args))
|
||||
|
||||
if customMethodCall is None:
|
||||
# Check for errors.
|
||||
f.write(" if (NS_FAILED(rv))\n")
|
||||
if isMethod:
|
||||
if haveCcx:
|
||||
f.write(" return xpc_qsThrowMethodFailedWithCcx("
|
||||
"ccx, rv);\n")
|
||||
else:
|
||||
f.write(" return xpc_qsThrowMethodFailed("
|
||||
"cx, rv, vp);\n")
|
||||
# Check for errors.
|
||||
f.write(" if (NS_FAILED(rv))\n")
|
||||
if isMethod:
|
||||
if haveCcx:
|
||||
f.write(" return xpc_qsThrowMethodFailedWithCcx(ccx, rv);\n")
|
||||
else:
|
||||
if isGetter:
|
||||
thisval = '*vp'
|
||||
else:
|
||||
thisval = '*tvr.addr()'
|
||||
f.write(" return xpc_qsThrowGetterSetterFailed(cx, rv, " +
|
||||
"JSVAL_TO_OBJECT(%s), id);\n" % thisval)
|
||||
f.write(" return xpc_qsThrowMethodFailed("
|
||||
"cx, rv, vp);\n")
|
||||
else:
|
||||
if isMethod or isGetter:
|
||||
f.write(" NS_ASSERTION(xpc_qsSameResult(debug_result, result),\n"
|
||||
" \"Got the wrong answer from the custom "
|
||||
"method call!\");\n")
|
||||
f.write("#endif\n")
|
||||
if isGetter:
|
||||
thisval = '*vp'
|
||||
else:
|
||||
thisval = '*tvr.addr()'
|
||||
f.write(" return xpc_qsThrowGetterSetterFailed(cx, rv, " +
|
||||
"JSVAL_TO_OBJECT(%s), id);\n" % thisval)
|
||||
|
||||
# Convert the return value.
|
||||
if isMethod:
|
||||
|
@ -808,38 +771,38 @@ def writeQuickStub(f, customMethodCalls, member, stubName, isSetter=False):
|
|||
# Epilog.
|
||||
f.write("}\n\n")
|
||||
|
||||
def writeAttrStubs(f, customMethodCalls, attr):
|
||||
def writeAttrStubs(f, attr):
|
||||
getterName = (attr.iface.name + '_'
|
||||
+ header.attributeNativeName(attr, True))
|
||||
writeQuickStub(f, customMethodCalls, attr, getterName)
|
||||
writeQuickStub(f, attr, getterName)
|
||||
if attr.readonly:
|
||||
setterName = 'xpc_qsReadOnlySetter'
|
||||
else:
|
||||
setterName = (attr.iface.name + '_'
|
||||
+ header.attributeNativeName(attr, False))
|
||||
writeQuickStub(f, customMethodCalls, attr, setterName, isSetter=True)
|
||||
writeQuickStub(f, attr, setterName, isSetter=True)
|
||||
|
||||
ps = ('{"%s", %s, %s}'
|
||||
% (attr.name, getterName, setterName))
|
||||
return ps
|
||||
|
||||
def writeMethodStub(f, customMethodCalls, method):
|
||||
def writeMethodStub(f, method):
|
||||
""" Write a method stub to `f`. Return an xpc_qsFunctionSpec initializer. """
|
||||
stubName = method.iface.name + '_' + header.methodNativeName(method)
|
||||
writeQuickStub(f, customMethodCalls, method, stubName)
|
||||
writeQuickStub(f, method, stubName)
|
||||
fs = '{"%s", %s, %d}' % (method.name, stubName, len(method.params))
|
||||
return fs
|
||||
|
||||
def writeStubsForInterface(f, customMethodCalls, iface):
|
||||
def writeStubsForInterface(f, iface):
|
||||
f.write("// === interface %s\n\n" % iface.name)
|
||||
propspecs = []
|
||||
funcspecs = []
|
||||
for member in iface.stubMembers:
|
||||
if member.kind == 'attribute':
|
||||
ps = writeAttrStubs(f, customMethodCalls, member)
|
||||
ps = writeAttrStubs(f, member)
|
||||
propspecs.append(ps)
|
||||
elif member.kind == 'method':
|
||||
fs = writeMethodStub(f, customMethodCalls, member)
|
||||
fs = writeMethodStub(f, member)
|
||||
funcspecs.append(fs)
|
||||
else:
|
||||
raise TypeError('expected attribute or method, not %r'
|
||||
|
@ -1038,15 +1001,13 @@ def writeStubFile(filename, headerFilename, conf, interfaces):
|
|||
try:
|
||||
f.write(stubTopTemplate % os.path.basename(headerFilename))
|
||||
N = 256
|
||||
for customInclude in conf.customIncludes:
|
||||
f.write('#include "%s"\n' % customInclude)
|
||||
resulttypes = []
|
||||
for iface in interfaces:
|
||||
resulttypes.extend(writeIncludesForInterface(iface))
|
||||
f.write("\n\n")
|
||||
writeResultXPCInterfacesArray(f, conf, sets.ImmutableSet(resulttypes))
|
||||
for iface in interfaces:
|
||||
writeStubsForInterface(f, conf.customMethodCalls, iface)
|
||||
writeStubsForInterface(f, iface)
|
||||
writeDefiner(f, conf, interfaces)
|
||||
finally:
|
||||
f.close()
|
||||
|
|
|
@ -468,7 +468,7 @@ XPCConvert::NativeData2JS(XPCCallContext& ccx, jsval* d, const void* s,
|
|||
// therefore this NativeInterface2JSObject will not end up
|
||||
// creating a new XPCNativeScriptableShared.
|
||||
if(!NativeInterface2JSObject(ccx, d, nsnull, iface, iid,
|
||||
nsnull, nsnull, scope, PR_TRUE,
|
||||
nsnull, scope, PR_TRUE,
|
||||
OBJ_IS_NOT_GLOBAL, pErr))
|
||||
return JS_FALSE;
|
||||
|
||||
|
@ -1053,7 +1053,6 @@ XPCConvert::NativeInterface2JSObject(XPCCallContext& ccx,
|
|||
nsISupports* src,
|
||||
const nsID* iid,
|
||||
XPCNativeInterface* Interface,
|
||||
nsWrapperCache *cache,
|
||||
JSObject* scope,
|
||||
PRBool allowNativeWrapper,
|
||||
PRBool isGlobal,
|
||||
|
@ -1124,8 +1123,8 @@ XPCConvert::NativeInterface2JSObject(XPCCallContext& ccx,
|
|||
nsresult rv;
|
||||
XPCWrappedNative* wrapper;
|
||||
nsRefPtr<XPCWrappedNative> strongWrapper;
|
||||
if(!cache)
|
||||
CallQueryInterface(src, &cache);
|
||||
nsWrapperCache* cache = nsnull;
|
||||
CallQueryInterface(src, &cache);
|
||||
if(cache &&
|
||||
(wrapper = static_cast<XPCWrappedNative*>(cache->GetWrapper())))
|
||||
{
|
||||
|
|
|
@ -113,7 +113,6 @@
|
|||
#include "nsTArray.h"
|
||||
#include "nsBaseHashtable.h"
|
||||
#include "nsHashKeys.h"
|
||||
#include "nsWrapperCache.h"
|
||||
|
||||
#include "nsIXPCScriptNotify.h" // used to notify: ScriptEvaluated
|
||||
|
||||
|
@ -2765,7 +2764,6 @@ public:
|
|||
nsISupports* src,
|
||||
const nsID* iid,
|
||||
XPCNativeInterface* Interface,
|
||||
nsWrapperCache *cache,
|
||||
JSObject* scope,
|
||||
PRBool allowNativeWrapper,
|
||||
PRBool isGlobal,
|
||||
|
|
|
@ -743,8 +743,7 @@ xpc_qsStringToJsval(JSContext *cx, const nsAString &str, jsval *rval)
|
|||
|
||||
JSBool
|
||||
xpc_qsXPCOMObjectToJsval(XPCCallContext &ccx, nsISupports *p,
|
||||
nsWrapperCache *cache, XPCNativeInterface *iface,
|
||||
jsval *rval)
|
||||
XPCNativeInterface *iface, jsval *rval)
|
||||
{
|
||||
// From the T_INTERFACE case in XPCConvert::NativeData2JS.
|
||||
// This is one of the slowest things quick stubs do.
|
||||
|
@ -762,7 +761,7 @@ xpc_qsXPCOMObjectToJsval(XPCCallContext &ccx, nsISupports *p,
|
|||
// creating a new XPCNativeScriptableShared.
|
||||
nsresult rv;
|
||||
if(!XPCConvert::NativeInterface2JSObject(ccx, rval, nsnull, p, nsnull,
|
||||
iface, cache, scope, PR_TRUE,
|
||||
iface, scope, PR_TRUE,
|
||||
OBJ_IS_NOT_GLOBAL, &rv))
|
||||
{
|
||||
// I can't tell if NativeInterface2JSObject throws JS exceptions
|
||||
|
|
|
@ -394,23 +394,10 @@ xpc_qsUnwrapArg(JSContext *cx, jsval v, T **ppArg)
|
|||
reinterpret_cast<void **>(ppArg));
|
||||
}
|
||||
|
||||
inline nsWrapperCache*
|
||||
xpc_qsGetWrapperCache(nsWrapperCache *cache)
|
||||
{
|
||||
return cache;
|
||||
}
|
||||
|
||||
inline nsWrapperCache*
|
||||
xpc_qsGetWrapperCache(void *p)
|
||||
{
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
/** Convert an XPCOM pointer to jsval. Return JS_TRUE on success. */
|
||||
JSBool
|
||||
xpc_qsXPCOMObjectToJsval(XPCCallContext &ccx,
|
||||
nsISupports *p,
|
||||
nsWrapperCache *cache,
|
||||
XPCNativeInterface *iface,
|
||||
jsval *rval);
|
||||
|
||||
|
@ -440,12 +427,6 @@ xpc_qsReadOnlySetter(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
|
|||
void
|
||||
xpc_qsAssertContextOK(JSContext *cx);
|
||||
|
||||
inline PRBool
|
||||
xpc_qsSameResult(nsISupports *result1, nsISupports *result2)
|
||||
{
|
||||
return SameCOMIdentity(result1, result2);
|
||||
}
|
||||
|
||||
#define XPC_QS_ASSERT_CONTEXT_OK(cx) xpc_qsAssertContextOK(cx)
|
||||
#else
|
||||
#define XPC_QS_ASSERT_CONTEXT_OK(cx) ((void) 0)
|
||||
|
|
|
@ -1346,7 +1346,7 @@ nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS* wrapper, uint16 methodIndex,
|
|||
JSBool ok =
|
||||
XPCConvert::NativeInterface2JSObject(ccx,
|
||||
&v, nsnull, newThis, newWrapperIID,
|
||||
nsnull, nsnull, obj, PR_FALSE, PR_FALSE,
|
||||
nsnull, obj, PR_FALSE, PR_FALSE,
|
||||
nsnull);
|
||||
if(newWrapperIID)
|
||||
nsMemory::Free(newWrapperIID);
|
||||
|
|
Загрузка…
Ссылка в новой задаче