зеркало из https://github.com/mozilla/pjs.git
Fix for bug 460512 (Avoid AddRef/Release in scriptable helper methods for NodeList). r/sr=bz.
This commit is contained in:
Родитель
99472a614a
Коммит
a9ba7dc3aa
|
@ -88,6 +88,28 @@ public:
|
||||||
PRBool Remove(PRUint32 aIndex) { return mFiles.RemoveObjectAt(aIndex); }
|
PRBool Remove(PRUint32 aIndex) { return mFiles.RemoveObjectAt(aIndex); }
|
||||||
void Clear() { return mFiles.Clear(); }
|
void Clear() { return mFiles.Clear(); }
|
||||||
|
|
||||||
|
nsIDOMFile* GetItemAt(PRUint32 aIndex)
|
||||||
|
{
|
||||||
|
return mFiles.SafeObjectAt(aIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static nsDOMFileList* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMFileList> list_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsIDOMFileList pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(list_qi == static_cast<nsIDOMFileList*>(aSupports),
|
||||||
|
"Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return static_cast<nsDOMFileList*>(aSupports);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nsCOMArray<nsIDOMFile> mFiles;
|
nsCOMArray<nsIDOMFile> mFiles;
|
||||||
};
|
};
|
||||||
|
|
|
@ -39,17 +39,18 @@
|
||||||
#define nsINodeList_h___
|
#define nsINodeList_h___
|
||||||
|
|
||||||
class nsINode;
|
class nsINode;
|
||||||
|
class nsIDOMNodeList;
|
||||||
|
|
||||||
// IID for the nsINodeList interface
|
// IID for the nsINodeList interface
|
||||||
#define NS_INODELIST_IID \
|
#define NS_INODELIST_IID \
|
||||||
{ 0x06a6639a, 0x2d47, 0x4551, \
|
{ 0x943420c4, 0x8774, 0x43ea, \
|
||||||
{ 0x94, 0xef, 0x93, 0xb8, 0xe1, 0x09, 0x3a, 0xb3 } }
|
{ 0xb3, 0x53, 0x62, 0xa1, 0x26, 0x1c, 0x9b, 0x55 } }
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An internal interface that allows QI-less getting of nodes from node lists
|
* An internal interface that allows QI-less getting of nodes from node lists
|
||||||
*/
|
*/
|
||||||
class nsINodeList : public nsISupports {
|
class nsINodeList : public nsIDOMNodeList
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_INODELIST_IID)
|
NS_DECLARE_STATIC_IID_ACCESSOR(NS_INODELIST_IID)
|
||||||
|
|
||||||
|
|
|
@ -135,7 +135,6 @@ CPPSRCS = \
|
||||||
nsFrameLoader.cpp \
|
nsFrameLoader.cpp \
|
||||||
nsGenConImageContent.cpp \
|
nsGenConImageContent.cpp \
|
||||||
nsGenericDOMDataNode.cpp \
|
nsGenericDOMDataNode.cpp \
|
||||||
nsGenericDOMNodeList.cpp \
|
|
||||||
nsGenericElement.cpp \
|
nsGenericElement.cpp \
|
||||||
nsGkAtoms.cpp \
|
nsGkAtoms.cpp \
|
||||||
nsHTMLContentSerializer.cpp \
|
nsHTMLContentSerializer.cpp \
|
||||||
|
|
|
@ -70,10 +70,6 @@ NS_NewPreContentIterator(nsIContentIterator** aInstancePtrResult);
|
||||||
|
|
||||||
static nsContentList *gCachedContentList;
|
static nsContentList *gCachedContentList;
|
||||||
|
|
||||||
nsBaseContentList::nsBaseContentList()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
nsBaseContentList::~nsBaseContentList()
|
nsBaseContentList::~nsBaseContentList()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -90,7 +86,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsBaseContentList)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsBaseContentList)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsINodeList)
|
NS_INTERFACE_MAP_ENTRY(nsINodeList)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
|
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
|
||||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMNodeList)
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsINodeList)
|
||||||
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(NodeList)
|
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(NodeList)
|
||||||
NS_INTERFACE_MAP_END
|
NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
|
|
|
@ -74,11 +74,9 @@ class nsIDocument;
|
||||||
class nsIDOMHTMLFormElement;
|
class nsIDOMHTMLFormElement;
|
||||||
|
|
||||||
|
|
||||||
class nsBaseContentList : public nsIDOMNodeList,
|
class nsBaseContentList : public nsINodeList
|
||||||
public nsINodeList
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
nsBaseContentList();
|
|
||||||
virtual ~nsBaseContentList();
|
virtual ~nsBaseContentList();
|
||||||
|
|
||||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||||
|
@ -89,7 +87,7 @@ public:
|
||||||
// nsINodeList
|
// nsINodeList
|
||||||
virtual nsINode* GetNodeAt(PRUint32 aIndex);
|
virtual nsINode* GetNodeAt(PRUint32 aIndex);
|
||||||
|
|
||||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsBaseContentList, nsIDOMNodeList)
|
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsBaseContentList, nsINodeList)
|
||||||
|
|
||||||
void AppendElement(nsIContent *aContent);
|
void AppendElement(nsIContent *aContent);
|
||||||
void RemoveElement(nsIContent *aContent);
|
void RemoveElement(nsIContent *aContent);
|
||||||
|
@ -265,6 +263,22 @@ public:
|
||||||
|
|
||||||
static void OnDocumentDestroy(nsIDocument *aDocument);
|
static void OnDocumentDestroy(nsIDocument *aDocument);
|
||||||
|
|
||||||
|
static nsContentList* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
nsINodeList* list = static_cast<nsINodeList*>(aSupports);
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsINodeList> list_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsINodeList pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(list_qi == list, "Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return static_cast<nsContentList*>(list);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Returns whether the content element matches our criterion
|
* Returns whether the content element matches our criterion
|
||||||
|
|
|
@ -46,7 +46,6 @@
|
||||||
#include "nsIDOMAttr.h"
|
#include "nsIDOMAttr.h"
|
||||||
#include "nsIDOMText.h"
|
#include "nsIDOMText.h"
|
||||||
#include "nsIDOMNodeList.h"
|
#include "nsIDOMNodeList.h"
|
||||||
#include "nsGenericDOMNodeList.h"
|
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
#include "nsCOMPtr.h"
|
#include "nsCOMPtr.h"
|
||||||
#include "nsINodeInfo.h"
|
#include "nsINodeInfo.h"
|
||||||
|
|
|
@ -163,12 +163,10 @@ nsDOMAttributeMap::DropAttribute(PRInt32 aNamespaceID, nsIAtom* aLocalName)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsDOMAttributeMap::GetAttribute(nsINodeInfo* aNodeInfo,
|
nsDOMAttributeMap::RemoveAttribute(nsINodeInfo* aNodeInfo, nsIDOMNode** aReturn)
|
||||||
nsIDOMNode** aReturn,
|
|
||||||
PRBool aRemove)
|
|
||||||
{
|
{
|
||||||
NS_ASSERTION(aNodeInfo, "GetAttribute() called with aNodeInfo == nsnull!");
|
NS_ASSERTION(aNodeInfo, "RemoveAttribute() called with aNodeInfo == nsnull!");
|
||||||
NS_ASSERTION(aReturn, "GetAttribute() called with aReturn == nsnull");
|
NS_ASSERTION(aReturn, "RemoveAttribute() called with aReturn == nsnull");
|
||||||
|
|
||||||
*aReturn = nsnull;
|
*aReturn = nsnull;
|
||||||
|
|
||||||
|
@ -176,22 +174,16 @@ nsDOMAttributeMap::GetAttribute(nsINodeInfo* aNodeInfo,
|
||||||
|
|
||||||
if (!mAttributeCache.Get(attr, aReturn)) {
|
if (!mAttributeCache.Get(attr, aReturn)) {
|
||||||
nsAutoString value;
|
nsAutoString value;
|
||||||
if (aRemove) {
|
// As we are removing the attribute we need to set the current value in
|
||||||
// As we are removing the attribute we need to set the current value in
|
// the attribute node.
|
||||||
// the attribute node.
|
mContent->GetAttr(aNodeInfo->NamespaceID(), aNodeInfo->NameAtom(), value);
|
||||||
mContent->GetAttr(aNodeInfo->NamespaceID(), aNodeInfo->NameAtom(), value);
|
nsCOMPtr<nsIDOMNode> newAttr = new nsDOMAttribute(nsnull, aNodeInfo, value);
|
||||||
}
|
|
||||||
nsCOMPtr<nsIDOMNode> newAttr = new nsDOMAttribute(aRemove ? nsnull : this,
|
|
||||||
aNodeInfo, value);
|
|
||||||
if (!newAttr) {
|
if (!newAttr) {
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
if (!aRemove && !mAttributeCache.Put(attr, newAttr)) {
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
newAttr.swap(*aReturn);
|
newAttr.swap(*aReturn);
|
||||||
}
|
}
|
||||||
else if (aRemove) {
|
else {
|
||||||
nsCOMPtr<nsIAttribute> iAttr(do_QueryInterface(*aReturn));
|
nsCOMPtr<nsIAttribute> iAttr(do_QueryInterface(*aReturn));
|
||||||
NS_ASSERTION(iAttr, "non-nsIAttribute somehow made it into the hashmap?!");
|
NS_ASSERTION(iAttr, "non-nsIAttribute somehow made it into the hashmap?!");
|
||||||
|
|
||||||
|
@ -205,6 +197,25 @@ nsDOMAttributeMap::GetAttribute(nsINodeInfo* aNodeInfo,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIDOMNode*
|
||||||
|
nsDOMAttributeMap::GetAttribute(nsINodeInfo* aNodeInfo)
|
||||||
|
{
|
||||||
|
NS_ASSERTION(aNodeInfo, "GetAttribute() called with aNodeInfo == nsnull!");
|
||||||
|
|
||||||
|
nsAttrKey attr(aNodeInfo->NamespaceID(), aNodeInfo->NameAtom());
|
||||||
|
|
||||||
|
nsIDOMNode* node = mAttributeCache.GetWeak(attr);
|
||||||
|
if (!node) {
|
||||||
|
nsCOMPtr<nsIDOMNode> newAttr =
|
||||||
|
new nsDOMAttribute(this, aNodeInfo, EmptyString());
|
||||||
|
if (newAttr && mAttributeCache.Put(attr, newAttr)) {
|
||||||
|
node = newAttr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMAttributeMap::GetNamedItem(const nsAString& aAttrName,
|
nsDOMAttributeMap::GetNamedItem(const nsAString& aAttrName,
|
||||||
nsIDOMNode** aAttribute)
|
nsIDOMNode** aAttribute)
|
||||||
|
@ -294,7 +305,7 @@ nsDOMAttributeMap::SetNamedItemInternal(nsIDOMNode *aNode,
|
||||||
ni = iAttribute->NodeInfo();
|
ni = iAttribute->NodeInfo();
|
||||||
|
|
||||||
if (mContent->HasAttr(ni->NamespaceID(), ni->NameAtom())) {
|
if (mContent->HasAttr(ni->NamespaceID(), ni->NameAtom())) {
|
||||||
rv = GetAttribute(ni, getter_AddRefs(tmpReturn), PR_TRUE);
|
rv = RemoveAttribute(ni, getter_AddRefs(tmpReturn));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -304,7 +315,7 @@ nsDOMAttributeMap::SetNamedItemInternal(nsIDOMNode *aNode,
|
||||||
// get node-info of old attribute
|
// get node-info of old attribute
|
||||||
ni = mContent->GetExistingAttrNameFromQName(name);
|
ni = mContent->GetExistingAttrNameFromQName(name);
|
||||||
if (ni) {
|
if (ni) {
|
||||||
rv = GetAttribute(ni, getter_AddRefs(tmpReturn), PR_TRUE);
|
rv = RemoveAttribute(ni, getter_AddRefs(tmpReturn));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -374,10 +385,12 @@ nsDOMAttributeMap::RemoveNamedItem(const nsAString& aName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
nsIDOMNode*
|
||||||
nsDOMAttributeMap::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
nsDOMAttributeMap::GetItemAt(PRUint32 aIndex, nsresult *aResult)
|
||||||
{
|
{
|
||||||
NS_ENSURE_ARG_POINTER(aReturn);
|
*aResult = NS_OK;
|
||||||
|
|
||||||
|
nsIDOMNode* node = nsnull;
|
||||||
|
|
||||||
const nsAttrName* name;
|
const nsAttrName* name;
|
||||||
if (mContent && (name = mContent->GetAttrNameAt(aIndex))) {
|
if (mContent && (name = mContent->GetAttrNameAt(aIndex))) {
|
||||||
|
@ -386,14 +399,23 @@ nsDOMAttributeMap::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
||||||
nsCOMPtr<nsINodeInfo> ni;
|
nsCOMPtr<nsINodeInfo> ni;
|
||||||
ni = mContent->NodeInfo()->NodeInfoManager()->
|
ni = mContent->NodeInfo()->NodeInfoManager()->
|
||||||
GetNodeInfo(name->LocalName(), name->GetPrefix(), name->NamespaceID());
|
GetNodeInfo(name->LocalName(), name->GetPrefix(), name->NamespaceID());
|
||||||
NS_ENSURE_TRUE(ni, NS_ERROR_OUT_OF_MEMORY);
|
if (ni) {
|
||||||
|
node = GetAttribute(ni);
|
||||||
return GetAttribute(ni, aReturn);
|
}
|
||||||
|
if (!node) {
|
||||||
|
*aResult = NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*aReturn = nsnull;
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
return NS_OK;
|
NS_IMETHODIMP
|
||||||
|
nsDOMAttributeMap::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
NS_IF_ADDREF(*aReturn = GetItemAt(aIndex, &rv));
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -457,7 +479,7 @@ nsDOMAttributeMap::GetNamedItemNSInternal(const nsAString& aNamespaceURI,
|
||||||
GetNodeInfo(nameAtom, name->GetPrefix(), nameSpaceID);
|
GetNodeInfo(nameAtom, name->GetPrefix(), nameSpaceID);
|
||||||
NS_ENSURE_TRUE(ni, NS_ERROR_OUT_OF_MEMORY);
|
NS_ENSURE_TRUE(ni, NS_ERROR_OUT_OF_MEMORY);
|
||||||
|
|
||||||
return GetAttribute(ni, aReturn, aRemove);
|
return aRemove ? RemoveAttribute(ni, aReturn) : GetAttribute(ni, aReturn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
#include "nsInterfaceHashtable.h"
|
#include "nsInterfaceHashtable.h"
|
||||||
#include "nsCycleCollectionParticipant.h"
|
#include "nsCycleCollectionParticipant.h"
|
||||||
#include "prbit.h"
|
#include "prbit.h"
|
||||||
|
#include "nsIDOMNode.h"
|
||||||
|
|
||||||
class nsIAtom;
|
class nsIAtom;
|
||||||
class nsIContent;
|
class nsIContent;
|
||||||
|
@ -169,6 +170,25 @@ public:
|
||||||
*/
|
*/
|
||||||
PRUint32 Enumerate(AttrCache::EnumReadFunction aFunc, void *aUserArg) const;
|
PRUint32 Enumerate(AttrCache::EnumReadFunction aFunc, void *aUserArg) const;
|
||||||
|
|
||||||
|
nsIDOMNode* GetItemAt(PRUint32 aIndex, nsresult *rv);
|
||||||
|
|
||||||
|
static nsDOMAttributeMap* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMNamedNodeMap> map_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsIDOMNamedNodeMap pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(map_qi == static_cast<nsIDOMNamedNodeMap*>(aSupports),
|
||||||
|
"Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return static_cast<nsDOMAttributeMap*>(aSupports);
|
||||||
|
}
|
||||||
|
|
||||||
NS_DECL_CYCLE_COLLECTION_CLASS(nsDOMAttributeMap)
|
NS_DECL_CYCLE_COLLECTION_CLASS(nsDOMAttributeMap)
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -201,8 +221,25 @@ private:
|
||||||
* creating a new one.
|
* creating a new one.
|
||||||
*/
|
*/
|
||||||
nsresult GetAttribute(nsINodeInfo* aNodeInfo,
|
nsresult GetAttribute(nsINodeInfo* aNodeInfo,
|
||||||
nsIDOMNode** aReturn,
|
nsIDOMNode** aReturn)
|
||||||
PRBool aRemove = PR_FALSE);
|
{
|
||||||
|
*aReturn = GetAttribute(aNodeInfo);
|
||||||
|
if (!*aReturn) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_ADDREF(*aReturn);
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIDOMNode* GetAttribute(nsINodeInfo* aNodeInfo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove an attribute, returns the removed node.
|
||||||
|
*/
|
||||||
|
nsresult RemoveAttribute(nsINodeInfo* aNodeInfo,
|
||||||
|
nsIDOMNode** aReturn);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -386,7 +386,7 @@ nsDOMFileList::GetLength(PRUint32* aLength)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMFileList::Item(PRUint32 aIndex, nsIDOMFile **aFile)
|
nsDOMFileList::Item(PRUint32 aIndex, nsIDOMFile **aFile)
|
||||||
{
|
{
|
||||||
NS_IF_ADDREF(*aFile = mFiles.SafeObjectAt(aIndex));
|
NS_IF_ADDREF(*aFile = GetItemAt(aIndex));
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -616,20 +616,30 @@ nsDOMStyleSheetList::GetLength(PRUint32* aLength)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIStyleSheet*
|
||||||
|
nsDOMStyleSheetList::GetItemAt(PRUint32 aIndex)
|
||||||
|
{
|
||||||
|
if (!mDocument || aIndex >= (PRUint32)mDocument->GetNumberOfStyleSheets()) {
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIStyleSheet *sheet = mDocument->GetStyleSheetAt(aIndex);
|
||||||
|
NS_ASSERTION(sheet, "Must have a sheet");
|
||||||
|
|
||||||
|
return sheet;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMStyleSheetList::Item(PRUint32 aIndex, nsIDOMStyleSheet** aReturn)
|
nsDOMStyleSheetList::Item(PRUint32 aIndex, nsIDOMStyleSheet** aReturn)
|
||||||
{
|
{
|
||||||
*aReturn = nsnull;
|
nsIStyleSheet *sheet = GetItemAt(aIndex);
|
||||||
if (mDocument) {
|
if (!sheet) {
|
||||||
PRInt32 count = mDocument->GetNumberOfStyleSheets();
|
*aReturn = nsnull;
|
||||||
if (aIndex < (PRUint32)count) {
|
|
||||||
nsIStyleSheet *sheet = mDocument->GetStyleSheetAt(aIndex);
|
return NS_OK;
|
||||||
NS_ASSERTION(sheet, "Must have a sheet");
|
|
||||||
return CallQueryInterface(sheet, aReturn);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return CallQueryInterface(sheet, aReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -368,6 +368,24 @@ public:
|
||||||
nsIStyleSheet* aStyleSheet,
|
nsIStyleSheet* aStyleSheet,
|
||||||
PRBool aDocumentSheet);
|
PRBool aDocumentSheet);
|
||||||
|
|
||||||
|
nsIStyleSheet* GetItemAt(PRUint32 aIndex);
|
||||||
|
|
||||||
|
static nsDOMStyleSheetList* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
nsIDOMStyleSheetList* list = static_cast<nsIDOMStyleSheetList*>(aSupports);
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMStyleSheetList> list_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsIDOMStyleSheetList pointer as the
|
||||||
|
// nsISupports pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(list_qi == list, "Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return static_cast<nsDOMStyleSheetList*>(list);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
PRInt32 mLength;
|
PRInt32 mLength;
|
||||||
nsIDocument* mDocument;
|
nsIDocument* mDocument;
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
||||||
/* ***** BEGIN LICENSE BLOCK *****
|
|
||||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
||||||
*
|
|
||||||
* The contents of this file are subject to the Mozilla Public License Version
|
|
||||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
* http://www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
||||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
||||||
* for the specific language governing rights and limitations under the
|
|
||||||
* License.
|
|
||||||
*
|
|
||||||
* The Original Code is Mozilla Communicator client code.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is
|
|
||||||
* Netscape Communications Corporation.
|
|
||||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
||||||
* the Initial Developer. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s):
|
|
||||||
*
|
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
|
||||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
||||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
||||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
||||||
* of those above. If you wish to allow use of your version of this file only
|
|
||||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
||||||
* use your version of this file under the terms of the MPL, indicate your
|
|
||||||
* decision by deleting the provisions above and replace them with the notice
|
|
||||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
||||||
* the provisions above, a recipient may use your version of this file under
|
|
||||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
||||||
*
|
|
||||||
* ***** END LICENSE BLOCK ***** */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A base class for simple DOM NodeLists which implements nsISupports
|
|
||||||
* and expects subclasess to implement GetLength() and Item()
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "nsGenericDOMNodeList.h"
|
|
||||||
#include "nsGenericElement.h"
|
|
||||||
|
|
||||||
nsGenericDOMNodeList::nsGenericDOMNodeList()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
nsGenericDOMNodeList::~nsGenericDOMNodeList()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
NS_IMPL_ADDREF(nsGenericDOMNodeList)
|
|
||||||
NS_IMPL_RELEASE(nsGenericDOMNodeList)
|
|
||||||
|
|
||||||
|
|
||||||
// QueryInterface implementation for nsGenericDOMNodeList
|
|
||||||
NS_INTERFACE_MAP_BEGIN(nsGenericDOMNodeList)
|
|
||||||
NS_INTERFACE_MAP_ENTRY(nsINodeList)
|
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
|
|
||||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMNodeList)
|
|
||||||
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(NodeList)
|
|
||||||
NS_INTERFACE_MAP_END
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsGenericDOMNodeList::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
|
||||||
{
|
|
||||||
nsINode* node = GetNodeAt(aIndex);
|
|
||||||
if (!node) {
|
|
||||||
*aReturn = nsnull;
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return CallQueryInterface(node, aReturn);
|
|
||||||
}
|
|
|
@ -456,10 +456,15 @@ nsIContent::FindFirstNonNativeAnonymous() const
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
nsChildContentList::~nsChildContentList()
|
NS_IMPL_ADDREF(nsChildContentList)
|
||||||
{
|
NS_IMPL_RELEASE(nsChildContentList)
|
||||||
MOZ_COUNT_DTOR(nsChildContentList);
|
|
||||||
}
|
NS_INTERFACE_MAP_BEGIN(nsChildContentList)
|
||||||
|
NS_INTERFACE_MAP_ENTRY(nsINodeList)
|
||||||
|
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
|
||||||
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsINodeList)
|
||||||
|
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(NodeList)
|
||||||
|
NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsChildContentList::GetLength(PRUint32* aLength)
|
nsChildContentList::GetLength(PRUint32* aLength)
|
||||||
|
@ -469,6 +474,19 @@ nsChildContentList::GetLength(PRUint32* aLength)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsChildContentList::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
||||||
|
{
|
||||||
|
nsINode* node = GetNodeAt(aIndex);
|
||||||
|
if (!node) {
|
||||||
|
*aReturn = nsnull;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CallQueryInterface(node, aReturn);
|
||||||
|
}
|
||||||
|
|
||||||
nsINode*
|
nsINode*
|
||||||
nsChildContentList::GetNodeAt(PRUint32 aIndex)
|
nsChildContentList::GetNodeAt(PRUint32 aIndex)
|
||||||
{
|
{
|
||||||
|
|
|
@ -55,7 +55,6 @@
|
||||||
#include "nsIDOMNSEventTarget.h"
|
#include "nsIDOMNSEventTarget.h"
|
||||||
#include "nsIDOMNSElement.h"
|
#include "nsIDOMNSElement.h"
|
||||||
#include "nsILinkHandler.h"
|
#include "nsILinkHandler.h"
|
||||||
#include "nsGenericDOMNodeList.h"
|
|
||||||
#include "nsContentUtils.h"
|
#include "nsContentUtils.h"
|
||||||
#include "nsNodeUtils.h"
|
#include "nsNodeUtils.h"
|
||||||
#include "nsAttrAndChildArray.h"
|
#include "nsAttrAndChildArray.h"
|
||||||
|
@ -90,18 +89,18 @@ typedef unsigned long PtrBits;
|
||||||
* and Item to its existing child list.
|
* and Item to its existing child list.
|
||||||
* @see nsIDOMNodeList
|
* @see nsIDOMNodeList
|
||||||
*/
|
*/
|
||||||
class nsChildContentList : public nsGenericDOMNodeList
|
class nsChildContentList : public nsINodeList
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
nsChildContentList(nsINode* aNode)
|
nsChildContentList(nsINode* aNode)
|
||||||
: mNode(aNode)
|
: mNode(aNode)
|
||||||
{
|
{
|
||||||
MOZ_COUNT_CTOR(nsChildContentList);
|
|
||||||
}
|
}
|
||||||
virtual ~nsChildContentList();
|
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
// nsIDOMNodeList interface
|
// nsIDOMNodeList interface
|
||||||
NS_IMETHOD GetLength(PRUint32* aLength);
|
NS_DECL_NSIDOMNODELIST
|
||||||
|
|
||||||
// nsINodeList interface
|
// nsINodeList interface
|
||||||
virtual nsINode* GetNodeAt(PRUint32 aIndex);
|
virtual nsINode* GetNodeAt(PRUint32 aIndex);
|
||||||
|
|
|
@ -67,6 +67,7 @@ EXPORTS = \
|
||||||
nsHTMLAudioElement.h \
|
nsHTMLAudioElement.h \
|
||||||
nsHTMLMediaElement.h \
|
nsHTMLMediaElement.h \
|
||||||
nsHTMLVideoElement.h \
|
nsHTMLVideoElement.h \
|
||||||
|
nsIHTMLCollection.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
include $(topsrcdir)/config/rules.mk
|
include $(topsrcdir)/config/rules.mk
|
||||||
|
|
|
@ -12,18 +12,18 @@
|
||||||
* for the specific language governing rights and limitations under the
|
* for the specific language governing rights and limitations under the
|
||||||
* License.
|
* License.
|
||||||
*
|
*
|
||||||
* The Original Code is Mozilla Communicator client code.
|
* The Original Code is Mozilla DOM code.
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is
|
* The Initial Developer of the Original Code is Mozilla Corporation.
|
||||||
* Netscape Communications Corporation.
|
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
||||||
* the Initial Developer. All Rights Reserved.
|
* the Initial Developer. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
|
* Peter Van der Beken <peterv@propagandism.org> (Original Author)
|
||||||
*
|
*
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
* of those above. If you wish to allow use of your version of this file only
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
@ -35,38 +35,31 @@
|
||||||
*
|
*
|
||||||
* ***** END LICENSE BLOCK ***** */
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
/*
|
#ifndef nsIHTMLCollection_h___
|
||||||
* A base class for simple DOM NodeLists which implements nsISupports and Item()
|
#define nsIHTMLCollection_h___
|
||||||
* and expects subclasess to implement GetLength() and GetNodeAt()
|
|
||||||
|
#include "nsIDOMHTMLCollection.h";
|
||||||
|
|
||||||
|
// IID for the nsIHTMLCollection interface
|
||||||
|
#define NS_IHTMLCOLLECTION_IID \
|
||||||
|
{ 0xb90f2c8c, 0xc564, 0x4464, \
|
||||||
|
{ 0x97, 0x01, 0x05, 0x14, 0xe4, 0xeb, 0x69, 0x65 } }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An internal interface that allows QI-less getting of nodes from HTML
|
||||||
|
* collections
|
||||||
*/
|
*/
|
||||||
|
class nsIHTMLCollection : public nsIDOMHTMLCollection
|
||||||
// XXXbz we don't use this for much... should we be using it more, or
|
|
||||||
// just nix it?
|
|
||||||
|
|
||||||
#ifndef nsGenericDOMNodeList_h__
|
|
||||||
#define nsGenericDOMNodeList_h__
|
|
||||||
|
|
||||||
#include "nsISupports.h"
|
|
||||||
#include "nsIDOMNodeList.h"
|
|
||||||
#include "nsINodeList.h"
|
|
||||||
|
|
||||||
class nsGenericDOMNodeList : public nsIDOMNodeList,
|
|
||||||
public nsINodeList
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
nsGenericDOMNodeList();
|
NS_DECLARE_STATIC_IID_ACCESSOR(NS_IHTMLCOLLECTION_IID)
|
||||||
virtual ~nsGenericDOMNodeList();
|
|
||||||
|
|
||||||
NS_DECL_ISUPPORTS
|
/**
|
||||||
|
* Get the node at the index. Returns null if the index is out of bounds
|
||||||
NS_IMETHOD Item(PRUint32 aIndex, nsIDOMNode** aReturn);
|
*/
|
||||||
|
virtual nsISupports* GetNodeAt(PRUint32 aIndex, nsresult* aResult) = 0;
|
||||||
// The following need to be defined in the subclass
|
|
||||||
// nsIDOMNodeList interface
|
|
||||||
NS_IMETHOD GetLength(PRUint32* aLength)=0;
|
|
||||||
|
|
||||||
// nsINodeList interface
|
|
||||||
virtual nsINode* GetNodeAt(PRUint32 aIndex) = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // nsGenericDOMNodeList_h__
|
NS_DEFINE_STATIC_IID_ACCESSOR(nsIHTMLCollection, NS_IHTMLCOLLECTION_IID)
|
||||||
|
|
||||||
|
#endif /* nsIHTMLCollection_h___ */
|
|
@ -118,12 +118,7 @@ nsClientRectList::GetLength(PRUint32* aLength)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsClientRectList::Item(PRUint32 aIndex, nsIDOMClientRect** aReturn)
|
nsClientRectList::Item(PRUint32 aIndex, nsIDOMClientRect** aReturn)
|
||||||
{
|
{
|
||||||
if (aIndex >= PRUint32(mArray.Count())) {
|
NS_IF_ADDREF(*aReturn = GetItemAt(aIndex));
|
||||||
*aReturn = nsnull;
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IF_ADDREF(*aReturn = mArray.ObjectAt(aIndex));
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#include "nsIDOMClientRectList.h"
|
#include "nsIDOMClientRectList.h"
|
||||||
#include "nsCOMArray.h"
|
#include "nsCOMArray.h"
|
||||||
#include "nsRect.h"
|
#include "nsRect.h"
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
|
|
||||||
class nsPresContext;
|
class nsPresContext;
|
||||||
|
|
||||||
|
@ -76,6 +77,28 @@ public:
|
||||||
|
|
||||||
void Append(nsIDOMClientRect* aElement) { mArray.AppendObject(aElement); }
|
void Append(nsIDOMClientRect* aElement) { mArray.AppendObject(aElement); }
|
||||||
|
|
||||||
|
nsIDOMClientRect* GetItemAt(PRUint32 aIndex)
|
||||||
|
{
|
||||||
|
return mArray.SafeObjectAt(aIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static nsClientRectList* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMClientRectList> list_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsIDOMClientRectList pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(list_qi == static_cast<nsIDOMClientRectList*>(aSupports),
|
||||||
|
"Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return static_cast<nsClientRectList*>(aSupports);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~nsClientRectList() {}
|
virtual ~nsClientRectList() {}
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,7 @@
|
||||||
#include "nsEventDispatcher.h"
|
#include "nsEventDispatcher.h"
|
||||||
|
|
||||||
#include "mozAutoDocUpdate.h"
|
#include "mozAutoDocUpdate.h"
|
||||||
|
#include "nsIHTMLCollection.h"
|
||||||
|
|
||||||
static const int NS_FORM_CONTROL_LIST_HASHTABLE_SIZE = 16;
|
static const int NS_FORM_CONTROL_LIST_HASHTABLE_SIZE = 16;
|
||||||
|
|
||||||
|
@ -348,7 +349,7 @@ PRBool nsHTMLFormElement::gPasswordManagerInitialized = PR_FALSE;
|
||||||
|
|
||||||
// nsFormControlList
|
// nsFormControlList
|
||||||
class nsFormControlList : public nsIDOMNSHTMLFormControlList,
|
class nsFormControlList : public nsIDOMNSHTMLFormControlList,
|
||||||
public nsIDOMHTMLCollection
|
public nsIHTMLCollection
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
nsFormControlList(nsHTMLFormElement* aForm);
|
nsFormControlList(nsHTMLFormElement* aForm);
|
||||||
|
@ -366,6 +367,15 @@ public:
|
||||||
// nsIDOMNSHTMLFormControlList interface
|
// nsIDOMNSHTMLFormControlList interface
|
||||||
NS_DECL_NSIDOMNSHTMLFORMCONTROLLIST
|
NS_DECL_NSIDOMNSHTMLFORMCONTROLLIST
|
||||||
|
|
||||||
|
virtual nsISupports* GetNodeAt(PRUint32 aIndex, nsresult* aResult)
|
||||||
|
{
|
||||||
|
FlushPendingNotifications();
|
||||||
|
|
||||||
|
*aResult = NS_OK;
|
||||||
|
|
||||||
|
return mElements.SafeElementAt(aIndex, nsnull);
|
||||||
|
}
|
||||||
|
|
||||||
nsresult AddElementToTable(nsIFormControl* aChild,
|
nsresult AddElementToTable(nsIFormControl* aChild,
|
||||||
const nsAString& aName);
|
const nsAString& aName);
|
||||||
nsresult RemoveElementFromTable(nsIFormControl* aChild,
|
nsresult RemoveElementFromTable(nsIFormControl* aChild,
|
||||||
|
@ -398,8 +408,7 @@ public:
|
||||||
|
|
||||||
nsTArray<nsIFormControl*> mNotInElements; // Holds WEAK references
|
nsTArray<nsIFormControl*> mNotInElements; // Holds WEAK references
|
||||||
|
|
||||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsFormControlList,
|
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsFormControlList, nsIHTMLCollection)
|
||||||
nsIDOMHTMLCollection)
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Drop all our references to the form elements
|
// Drop all our references to the form elements
|
||||||
|
@ -2112,7 +2121,8 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
|
|
||||||
// XPConnect interface list for nsFormControlList
|
// XPConnect interface list for nsFormControlList
|
||||||
NS_INTERFACE_TABLE_HEAD(nsFormControlList)
|
NS_INTERFACE_TABLE_HEAD(nsFormControlList)
|
||||||
NS_INTERFACE_TABLE2(nsFormControlList,
|
NS_INTERFACE_TABLE3(nsFormControlList,
|
||||||
|
nsIHTMLCollection,
|
||||||
nsIDOMHTMLCollection,
|
nsIDOMHTMLCollection,
|
||||||
nsIDOMNSHTMLFormControlList)
|
nsIDOMNSHTMLFormControlList)
|
||||||
NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(nsFormControlList)
|
NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(nsFormControlList)
|
||||||
|
@ -2120,10 +2130,8 @@ NS_INTERFACE_TABLE_HEAD(nsFormControlList)
|
||||||
NS_INTERFACE_MAP_END
|
NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsFormControlList,
|
NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsFormControlList, nsIHTMLCollection)
|
||||||
nsIDOMHTMLCollection)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsFormControlList, nsIHTMLCollection)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsFormControlList,
|
|
||||||
nsIDOMHTMLCollection)
|
|
||||||
|
|
||||||
|
|
||||||
// nsIDOMHTMLCollection interface
|
// nsIDOMHTMLCollection interface
|
||||||
|
@ -2139,14 +2147,15 @@ nsFormControlList::GetLength(PRUint32* aLength)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsFormControlList::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
nsFormControlList::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
||||||
{
|
{
|
||||||
FlushPendingNotifications();
|
nsresult rv;
|
||||||
|
nsISupports* item = GetNodeAt(aIndex, &rv);
|
||||||
|
if (!item) {
|
||||||
|
*aReturn = nsnull;
|
||||||
|
|
||||||
if (aIndex < mElements.Length()) {
|
return rv;
|
||||||
return CallQueryInterface(mElements[aIndex], aReturn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*aReturn = nsnull;
|
return CallQueryInterface(item, aReturn);
|
||||||
return NS_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
|
|
@ -1845,7 +1845,8 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
|
|
||||||
// QueryInterface implementation for nsHTMLOptionCollection
|
// QueryInterface implementation for nsHTMLOptionCollection
|
||||||
NS_INTERFACE_TABLE_HEAD(nsHTMLOptionCollection)
|
NS_INTERFACE_TABLE_HEAD(nsHTMLOptionCollection)
|
||||||
NS_INTERFACE_TABLE3(nsHTMLOptionCollection,
|
NS_INTERFACE_TABLE4(nsHTMLOptionCollection,
|
||||||
|
nsIHTMLCollection,
|
||||||
nsIDOMNSHTMLOptionCollection,
|
nsIDOMNSHTMLOptionCollection,
|
||||||
nsIDOMHTMLOptionsCollection,
|
nsIDOMHTMLOptionsCollection,
|
||||||
nsIDOMHTMLCollection)
|
nsIDOMHTMLCollection)
|
||||||
|
@ -1855,9 +1856,9 @@ NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsHTMLOptionCollection,
|
NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsHTMLOptionCollection,
|
||||||
nsIDOMNSHTMLOptionCollection)
|
nsIHTMLCollection)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsHTMLOptionCollection,
|
NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsHTMLOptionCollection,
|
||||||
nsIDOMNSHTMLOptionCollection)
|
nsIHTMLCollection)
|
||||||
|
|
||||||
|
|
||||||
// nsIDOMNSHTMLOptionCollection interface
|
// nsIDOMNSHTMLOptionCollection interface
|
||||||
|
@ -1947,11 +1948,15 @@ nsHTMLOptionCollection::SetSelectedIndex(PRInt32 aSelectedIndex)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsHTMLOptionCollection::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
nsHTMLOptionCollection::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
||||||
{
|
{
|
||||||
nsIDOMHTMLOptionElement *option = mElements.SafeObjectAt(aIndex);
|
nsresult rv;
|
||||||
|
nsISupports* item = GetNodeAt(aIndex, &rv);
|
||||||
|
if (!item) {
|
||||||
|
*aReturn = nsnull;
|
||||||
|
|
||||||
NS_IF_ADDREF(*aReturn = option);
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return CallQueryInterface(item, aReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
|
|
@ -49,11 +49,11 @@
|
||||||
#include "nsIDOMNSXBLFormControl.h"
|
#include "nsIDOMNSXBLFormControl.h"
|
||||||
#include "nsIDOMHTMLFormElement.h"
|
#include "nsIDOMHTMLFormElement.h"
|
||||||
#include "nsIDOMHTMLOptionElement.h"
|
#include "nsIDOMHTMLOptionElement.h"
|
||||||
#include "nsIDOMHTMLCollection.h"
|
|
||||||
#include "nsIDOMHTMLOptionsCollection.h"
|
#include "nsIDOMHTMLOptionsCollection.h"
|
||||||
#include "nsIDOMNSHTMLOptionCollectn.h"
|
#include "nsIDOMNSHTMLOptionCollectn.h"
|
||||||
#include "nsISelectControlFrame.h"
|
#include "nsISelectControlFrame.h"
|
||||||
#include "nsContentUtils.h"
|
#include "nsContentUtils.h"
|
||||||
|
#include "nsIHTMLCollection.h"
|
||||||
|
|
||||||
// PresState
|
// PresState
|
||||||
#include "nsXPCOM.h"
|
#include "nsXPCOM.h"
|
||||||
|
@ -71,7 +71,7 @@ class nsHTMLSelectElement;
|
||||||
*/
|
*/
|
||||||
class nsHTMLOptionCollection: public nsIDOMHTMLOptionsCollection,
|
class nsHTMLOptionCollection: public nsIDOMHTMLOptionsCollection,
|
||||||
public nsIDOMNSHTMLOptionCollection,
|
public nsIDOMNSHTMLOptionCollection,
|
||||||
public nsIDOMHTMLCollection
|
public nsIHTMLCollection
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
nsHTMLOptionCollection(nsHTMLSelectElement* aSelect);
|
nsHTMLOptionCollection(nsHTMLSelectElement* aSelect);
|
||||||
|
@ -88,8 +88,15 @@ public:
|
||||||
// nsIDOMHTMLCollection interface, all its methods are defined in
|
// nsIDOMHTMLCollection interface, all its methods are defined in
|
||||||
// nsIDOMHTMLOptionsCollection
|
// nsIDOMHTMLOptionsCollection
|
||||||
|
|
||||||
|
virtual nsISupports* GetNodeAt(PRUint32 aIndex, nsresult* aResult)
|
||||||
|
{
|
||||||
|
*aResult = NS_OK;
|
||||||
|
|
||||||
|
return mElements.SafeObjectAt(aIndex);
|
||||||
|
}
|
||||||
|
|
||||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsHTMLOptionCollection,
|
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsHTMLOptionCollection,
|
||||||
nsIDOMNSHTMLOptionCollection)
|
nsIHTMLCollection)
|
||||||
|
|
||||||
// Helpers for nsHTMLSelectElement
|
// Helpers for nsHTMLSelectElement
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
/* for collections */
|
/* for collections */
|
||||||
#include "nsIDOMElement.h"
|
#include "nsIDOMElement.h"
|
||||||
#include "nsGenericHTMLElement.h"
|
#include "nsGenericHTMLElement.h"
|
||||||
|
#include "nsIHTMLCollection.h"
|
||||||
/* end for collections */
|
/* end for collections */
|
||||||
|
|
||||||
class TableRowsCollection;
|
class TableRowsCollection;
|
||||||
|
@ -105,7 +106,7 @@ protected:
|
||||||
* This class provides a late-bound collection of rows in a table.
|
* This class provides a late-bound collection of rows in a table.
|
||||||
* mParent is NOT ref-counted to avoid circular references
|
* mParent is NOT ref-counted to avoid circular references
|
||||||
*/
|
*/
|
||||||
class TableRowsCollection : public nsIDOMHTMLCollection
|
class TableRowsCollection : public nsIHTMLCollection
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TableRowsCollection(nsHTMLTableElement *aParent);
|
TableRowsCollection(nsHTMLTableElement *aParent);
|
||||||
|
@ -116,6 +117,8 @@ public:
|
||||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||||
NS_DECL_NSIDOMHTMLCOLLECTION
|
NS_DECL_NSIDOMHTMLCOLLECTION
|
||||||
|
|
||||||
|
virtual nsISupports* GetNodeAt(PRUint32 aIndex, nsresult* aResult);
|
||||||
|
|
||||||
NS_IMETHOD ParentDestroyed();
|
NS_IMETHOD ParentDestroyed();
|
||||||
|
|
||||||
NS_DECL_CYCLE_COLLECTION_CLASS(TableRowsCollection)
|
NS_DECL_CYCLE_COLLECTION_CLASS(TableRowsCollection)
|
||||||
|
@ -172,12 +175,14 @@ TableRowsCollection::Init()
|
||||||
// that this may be null at any time. This macro assumes an nsresult named
|
// that this may be null at any time. This macro assumes an nsresult named
|
||||||
// |rv| is in scope.
|
// |rv| is in scope.
|
||||||
#define DO_FOR_EACH_ROWGROUP(_code) \
|
#define DO_FOR_EACH_ROWGROUP(_code) \
|
||||||
PR_BEGIN_MACRO \
|
do { \
|
||||||
if (mParent) { \
|
if (mParent) { \
|
||||||
/* THead */ \
|
/* THead */ \
|
||||||
nsCOMPtr<nsIDOMHTMLTableSectionElement> rowGroup; \
|
nsCOMPtr<nsIDOMHTMLTableSectionElement> rowGroup; \
|
||||||
rv = mParent->GetTHead(getter_AddRefs(rowGroup)); \
|
rv = mParent->GetTHead(getter_AddRefs(rowGroup)); \
|
||||||
NS_ENSURE_SUCCESS(rv, rv); \
|
if (NS_FAILED(rv)) { \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
nsCOMPtr<nsIDOMHTMLCollection> rows; \
|
nsCOMPtr<nsIDOMHTMLCollection> rows; \
|
||||||
if (rowGroup) { \
|
if (rowGroup) { \
|
||||||
rowGroup->GetRows(getter_AddRefs(rows)); \
|
rowGroup->GetRows(getter_AddRefs(rows)); \
|
||||||
|
@ -188,12 +193,16 @@ TableRowsCollection::Init()
|
||||||
nsCOMPtr<nsIDOMHTMLCollection> _tbodies; \
|
nsCOMPtr<nsIDOMHTMLCollection> _tbodies; \
|
||||||
/* TBodies */ \
|
/* TBodies */ \
|
||||||
rv = mParent->GetTBodies(getter_AddRefs(_tbodies)); \
|
rv = mParent->GetTBodies(getter_AddRefs(_tbodies)); \
|
||||||
NS_ENSURE_SUCCESS(rv, rv); \
|
if (NS_FAILED(rv)) { \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
if (_tbodies) { \
|
if (_tbodies) { \
|
||||||
nsCOMPtr<nsIDOMNode> _node; \
|
nsCOMPtr<nsIDOMNode> _node; \
|
||||||
PRUint32 _tbodyIndex = 0; \
|
PRUint32 _tbodyIndex = 0; \
|
||||||
rv = _tbodies->Item(_tbodyIndex, getter_AddRefs(_node)); \
|
rv = _tbodies->Item(_tbodyIndex, getter_AddRefs(_node)); \
|
||||||
NS_ENSURE_SUCCESS(rv, rv); \
|
if (NS_FAILED(rv)) { \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
while (_node) { \
|
while (_node) { \
|
||||||
rowGroup = do_QueryInterface(_node); \
|
rowGroup = do_QueryInterface(_node); \
|
||||||
if (rowGroup) { \
|
if (rowGroup) { \
|
||||||
|
@ -203,7 +212,12 @@ TableRowsCollection::Init()
|
||||||
} while (0); \
|
} while (0); \
|
||||||
} \
|
} \
|
||||||
rv = _tbodies->Item(++_tbodyIndex, getter_AddRefs(_node)); \
|
rv = _tbodies->Item(++_tbodyIndex, getter_AddRefs(_node)); \
|
||||||
NS_ENSURE_SUCCESS(rv, rv); \
|
if (NS_FAILED(rv)) { \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
if (NS_FAILED(rv)) { \
|
||||||
|
break; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
/* orphan rows */ \
|
/* orphan rows */ \
|
||||||
|
@ -213,7 +227,9 @@ TableRowsCollection::Init()
|
||||||
} while (0); \
|
} while (0); \
|
||||||
/* TFoot */ \
|
/* TFoot */ \
|
||||||
rv = mParent->GetTFoot(getter_AddRefs(rowGroup)); \
|
rv = mParent->GetTFoot(getter_AddRefs(rowGroup)); \
|
||||||
NS_ENSURE_SUCCESS(rv, rv); \
|
if (NS_FAILED(rv)) { \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
rows = nsnull; \
|
rows = nsnull; \
|
||||||
if (rowGroup) { \
|
if (rowGroup) { \
|
||||||
rowGroup->GetRows(getter_AddRefs(rows)); \
|
rowGroup->GetRows(getter_AddRefs(rows)); \
|
||||||
|
@ -222,7 +238,7 @@ TableRowsCollection::Init()
|
||||||
} while (0); \
|
} while (0); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
PR_END_MACRO
|
} while (0);
|
||||||
|
|
||||||
static PRUint32
|
static PRUint32
|
||||||
CountRowsInRowGroup(nsIDOMHTMLCollection* rows)
|
CountRowsInRowGroup(nsIDOMHTMLCollection* rows)
|
||||||
|
@ -252,45 +268,59 @@ TableRowsCollection::GetLength(PRUint32* aLength)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the number of items in the row group, only if *aItem ends
|
// Returns the item at index aIndex if available. If null is returned,
|
||||||
// up null. Otherwise, returns 0.
|
// then aCount will be set to the number of rows in this row collection.
|
||||||
static PRUint32
|
// Otherwise, the value of aCount is undefined.
|
||||||
|
static nsINode*
|
||||||
GetItemOrCountInRowGroup(nsIDOMHTMLCollection* rows,
|
GetItemOrCountInRowGroup(nsIDOMHTMLCollection* rows,
|
||||||
PRUint32 aIndex, nsIDOMNode** aItem)
|
PRUint32 aIndex, PRUint32* aCount)
|
||||||
{
|
{
|
||||||
NS_PRECONDITION(aItem, "Null out param");
|
*aCount = 0;
|
||||||
|
|
||||||
*aItem = nsnull;
|
|
||||||
PRUint32 length = 0;
|
|
||||||
|
|
||||||
if (rows) {
|
if (rows) {
|
||||||
rows->Item(aIndex, aItem);
|
rows->GetLength(aCount);
|
||||||
if (!*aItem) {
|
if (aIndex < *aCount) {
|
||||||
rows->GetLength(&length);
|
nsCOMPtr<nsINodeList> list = do_QueryInterface(rows);
|
||||||
|
return list->GetNodeAt(aIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return length;
|
return nsnull;
|
||||||
}
|
}
|
||||||
|
|
||||||
// increments aReturn refcnt by 1
|
nsISupports*
|
||||||
NS_IMETHODIMP
|
TableRowsCollection::GetNodeAt(PRUint32 aIndex, nsresult *aResult)
|
||||||
TableRowsCollection::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
|
||||||
{
|
{
|
||||||
*aReturn = nsnull;
|
nsresult rv;
|
||||||
nsresult rv = NS_OK;
|
|
||||||
|
|
||||||
DO_FOR_EACH_ROWGROUP(
|
DO_FOR_EACH_ROWGROUP(
|
||||||
PRUint32 count = GetItemOrCountInRowGroup(rows, aIndex, aReturn);
|
PRUint32 count;
|
||||||
if (*aReturn) {
|
nsINode* node = GetItemOrCountInRowGroup(rows, aIndex, &count);
|
||||||
return NS_OK;
|
if (node) {
|
||||||
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_ASSERTION(count <= aIndex, "GetItemOrCountInRowGroup screwed up");
|
NS_ASSERTION(count <= aIndex, "GetItemOrCountInRowGroup screwed up");
|
||||||
aIndex -= count;
|
aIndex -= count;
|
||||||
);
|
);
|
||||||
|
|
||||||
return rv;
|
*aResult = rv;
|
||||||
|
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
TableRowsCollection::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
|
||||||
|
nsISupports* node = GetNodeAt(aIndex, &rv);
|
||||||
|
if (!node) {
|
||||||
|
*aReturn = nsnull;
|
||||||
|
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CallQueryInterface(node, aReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static nsresult
|
static nsresult
|
||||||
|
|
|
@ -98,7 +98,6 @@
|
||||||
#include "nsIDOMHTMLBodyElement.h"
|
#include "nsIDOMHTMLBodyElement.h"
|
||||||
#include "nsINameSpaceManager.h"
|
#include "nsINameSpaceManager.h"
|
||||||
#include "nsGenericHTMLElement.h"
|
#include "nsGenericHTMLElement.h"
|
||||||
#include "nsGenericDOMNodeList.h"
|
|
||||||
#include "nsICSSLoader.h"
|
#include "nsICSSLoader.h"
|
||||||
#include "nsIHttpChannel.h"
|
#include "nsIHttpChannel.h"
|
||||||
#include "nsIFile.h"
|
#include "nsIFile.h"
|
||||||
|
@ -2860,7 +2859,7 @@ nsHTMLDocument::ResolveName(const nsAString& aName,
|
||||||
|
|
||||||
if (aForm) {
|
if (aForm) {
|
||||||
// ... we're called from a form, in that case we create a
|
// ... we're called from a form, in that case we create a
|
||||||
// nsFormNameContentList which will filter out the elements in the
|
// nsFormContentList which will filter out the elements in the
|
||||||
// list that don't belong to aForm
|
// list that don't belong to aForm
|
||||||
|
|
||||||
nsFormContentList *fc_list = new nsFormContentList(aForm, *list);
|
nsFormContentList *fc_list = new nsFormContentList(aForm, *list);
|
||||||
|
|
|
@ -58,7 +58,6 @@
|
||||||
#include "nsContentCID.h"
|
#include "nsContentCID.h"
|
||||||
#include "nsXMLDocument.h"
|
#include "nsXMLDocument.h"
|
||||||
#include "nsIStreamListener.h"
|
#include "nsIStreamListener.h"
|
||||||
#include "nsGenericDOMNodeList.h"
|
|
||||||
|
|
||||||
#include "nsXBLBinding.h"
|
#include "nsXBLBinding.h"
|
||||||
#include "nsXBLPrototypeBinding.h"
|
#include "nsXBLPrototypeBinding.h"
|
||||||
|
@ -92,15 +91,14 @@
|
||||||
{ 0xa29df1f8, 0xaeca, 0x4356, \
|
{ 0xa29df1f8, 0xaeca, 0x4356, \
|
||||||
{ 0xa8, 0xc2, 0xa7, 0x24, 0xa2, 0x11, 0x73, 0xac } }
|
{ 0xa8, 0xc2, 0xa7, 0x24, 0xa2, 0x11, 0x73, 0xac } }
|
||||||
|
|
||||||
class nsAnonymousContentList : public nsIDOMNodeList,
|
class nsAnonymousContentList : public nsINodeList
|
||||||
public nsINodeList
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
nsAnonymousContentList(nsInsertionPointList* aElements);
|
nsAnonymousContentList(nsInsertionPointList* aElements);
|
||||||
virtual ~nsAnonymousContentList();
|
virtual ~nsAnonymousContentList();
|
||||||
|
|
||||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsAnonymousContentList, nsIDOMNodeList)
|
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsAnonymousContentList, nsINodeList)
|
||||||
// nsIDOMNodeList interface
|
// nsIDOMNodeList interface
|
||||||
NS_DECL_NSIDOMNODELIST
|
NS_DECL_NSIDOMNODELIST
|
||||||
|
|
||||||
|
@ -142,10 +140,8 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE(nsAnonymousContentList)
|
||||||
NS_INTERFACE_MAP_BEGIN(nsAnonymousContentList)
|
NS_INTERFACE_MAP_BEGIN(nsAnonymousContentList)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsINodeList)
|
NS_INTERFACE_MAP_ENTRY(nsINodeList)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
|
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
|
||||||
if (aIID.Equals(NS_GET_IID(nsAnonymousContentList)))
|
NS_INTERFACE_MAP_ENTRY(nsAnonymousContentList)
|
||||||
foundInterface = static_cast<nsIDOMNodeList*>(this);
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsINodeList)
|
||||||
else
|
|
||||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMNodeList)
|
|
||||||
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(NodeList)
|
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(NodeList)
|
||||||
NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsAnonymousContentList)
|
NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsAnonymousContentList)
|
||||||
NS_INTERFACE_MAP_END
|
NS_INTERFACE_MAP_END
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#include "domstubs.idl"
|
#include "domstubs.idl"
|
||||||
|
|
||||||
interface nsIDOMOfflineResourceList;
|
interface nsIDOMOfflineResourceList;
|
||||||
interface nsIDOMLoadStatusList;
|
|
||||||
|
|
||||||
[scriptable, uuid(f8bbf8c3-c47b-465a-a221-22824449f689)]
|
[scriptable, uuid(f8bbf8c3-c47b-465a-a221-22824449f689)]
|
||||||
interface nsIDOMClientInformation : nsISupports
|
interface nsIDOMClientInformation : nsISupports
|
||||||
|
|
|
@ -48,7 +48,6 @@ GRE_MODULE = 1
|
||||||
|
|
||||||
XPIDLSRCS = \
|
XPIDLSRCS = \
|
||||||
nsIDOMOfflineResourceList.idl \
|
nsIDOMOfflineResourceList.idl \
|
||||||
nsIDOMLoadStatusList.idl \
|
|
||||||
nsIDOMLoadStatus.idl \
|
nsIDOMLoadStatus.idl \
|
||||||
nsIDOMLoadStatusEvent.idl \
|
nsIDOMLoadStatusEvent.idl \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
|
@ -408,7 +408,6 @@ enum nsDOMClassInfoID {
|
||||||
eDOMClassInfo_XULCommandEvent_id,
|
eDOMClassInfo_XULCommandEvent_id,
|
||||||
eDOMClassInfo_CommandEvent_id,
|
eDOMClassInfo_CommandEvent_id,
|
||||||
eDOMClassInfo_OfflineResourceList_id,
|
eDOMClassInfo_OfflineResourceList_id,
|
||||||
eDOMClassInfo_LoadStatusList_id,
|
|
||||||
eDOMClassInfo_LoadStatus_id,
|
eDOMClassInfo_LoadStatus_id,
|
||||||
eDOMClassInfo_LoadStatusEvent_id,
|
eDOMClassInfo_LoadStatusEvent_id,
|
||||||
|
|
||||||
|
|
|
@ -132,6 +132,7 @@ LOCAL_INCLUDES = \
|
||||||
-I$(topsrcdir)/content/base/src \
|
-I$(topsrcdir)/content/base/src \
|
||||||
-I$(topsrcdir)/content/html/document/src \
|
-I$(topsrcdir)/content/html/document/src \
|
||||||
-I$(topsrcdir)/layout/style \
|
-I$(topsrcdir)/layout/style \
|
||||||
|
-I$(topsrcdir)/layout/xul/base/src/tree/src \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
DEFINES += -D_IMPL_NS_LAYOUT
|
DEFINES += -D_IMPL_NS_LAYOUT
|
||||||
|
|
|
@ -113,8 +113,7 @@
|
||||||
#include "nsIDOMMediaList.h"
|
#include "nsIDOMMediaList.h"
|
||||||
#include "nsIDOMChromeWindow.h"
|
#include "nsIDOMChromeWindow.h"
|
||||||
#include "nsIDOMConstructor.h"
|
#include "nsIDOMConstructor.h"
|
||||||
#include "nsIDOMClientRect.h"
|
#include "nsClientRect.h"
|
||||||
#include "nsIDOMClientRectList.h"
|
|
||||||
|
|
||||||
// DOM core includes
|
// DOM core includes
|
||||||
#include "nsDOMError.h"
|
#include "nsDOMError.h"
|
||||||
|
@ -134,6 +133,7 @@
|
||||||
#include "nsIDOMHTMLFormElement.h"
|
#include "nsIDOMHTMLFormElement.h"
|
||||||
#include "nsIDOMNSHTMLFormControlList.h"
|
#include "nsIDOMNSHTMLFormControlList.h"
|
||||||
#include "nsIDOMHTMLCollection.h"
|
#include "nsIDOMHTMLCollection.h"
|
||||||
|
#include "nsIHTMLCollection.h"
|
||||||
#include "nsHTMLDocument.h"
|
#include "nsHTMLDocument.h"
|
||||||
|
|
||||||
// HTMLSelectElement helper includes
|
// HTMLSelectElement helper includes
|
||||||
|
@ -182,7 +182,8 @@
|
||||||
#include "nsIDOMStyleSheetList.h"
|
#include "nsIDOMStyleSheetList.h"
|
||||||
#include "nsIDOMCSSStyleDeclaration.h"
|
#include "nsIDOMCSSStyleDeclaration.h"
|
||||||
#include "nsIDOMCSSRule.h"
|
#include "nsIDOMCSSRule.h"
|
||||||
#include "nsIDOMCSSRuleList.h"
|
#include "nsICSSRule.h"
|
||||||
|
#include "nsICSSRuleList.h"
|
||||||
#include "nsIDOMRect.h"
|
#include "nsIDOMRect.h"
|
||||||
#include "nsIDOMRGBColor.h"
|
#include "nsIDOMRGBColor.h"
|
||||||
#include "nsIDOMNSRGBAColor.h"
|
#include "nsIDOMNSRGBAColor.h"
|
||||||
|
@ -331,7 +332,7 @@
|
||||||
#include "nsIDOMCSSPrimitiveValue.h"
|
#include "nsIDOMCSSPrimitiveValue.h"
|
||||||
#include "nsIDOMCSSStyleRule.h"
|
#include "nsIDOMCSSStyleRule.h"
|
||||||
#include "nsIDOMCSSStyleSheet.h"
|
#include "nsIDOMCSSStyleSheet.h"
|
||||||
#include "nsIDOMCSSValueList.h"
|
#include "nsDOMCSSValueList.h"
|
||||||
#include "nsIDOMRange.h"
|
#include "nsIDOMRange.h"
|
||||||
#include "nsIDOMNSRange.h"
|
#include "nsIDOMNSRange.h"
|
||||||
#include "nsIDOMRangeException.h"
|
#include "nsIDOMRangeException.h"
|
||||||
|
@ -351,7 +352,7 @@
|
||||||
#include "nsITreeContentView.h"
|
#include "nsITreeContentView.h"
|
||||||
#include "nsITreeView.h"
|
#include "nsITreeView.h"
|
||||||
#include "nsIXULTemplateBuilder.h"
|
#include "nsIXULTemplateBuilder.h"
|
||||||
#include "nsITreeColumns.h"
|
#include "nsTreeColumns.h"
|
||||||
#endif
|
#endif
|
||||||
#include "nsIDOMXPathException.h"
|
#include "nsIDOMXPathException.h"
|
||||||
#include "nsIDOMXPathExpression.h"
|
#include "nsIDOMXPathExpression.h"
|
||||||
|
@ -453,7 +454,6 @@
|
||||||
#include "nsIDOMDataTransfer.h"
|
#include "nsIDOMDataTransfer.h"
|
||||||
|
|
||||||
// Offline includes
|
// Offline includes
|
||||||
#include "nsIDOMLoadStatusList.h"
|
|
||||||
#include "nsIDOMLoadStatus.h"
|
#include "nsIDOMLoadStatus.h"
|
||||||
#include "nsIDOMLoadStatusEvent.h"
|
#include "nsIDOMLoadStatusEvent.h"
|
||||||
|
|
||||||
|
@ -462,8 +462,7 @@
|
||||||
#include "nsIDOMGeoPosition.h"
|
#include "nsIDOMGeoPosition.h"
|
||||||
#include "nsIDOMGeoPositionError.h"
|
#include "nsIDOMGeoPositionError.h"
|
||||||
|
|
||||||
#include "nsIDOMFileList.h"
|
#include "nsDOMFile.h"
|
||||||
#include "nsIDOMFile.h"
|
|
||||||
#include "nsIDOMFileException.h"
|
#include "nsIDOMFileException.h"
|
||||||
|
|
||||||
static NS_DEFINE_CID(kCPluginManagerCID, NS_PLUGINMANAGER_CID);
|
static NS_DEFINE_CID(kCPluginManagerCID, NS_PLUGINMANAGER_CID);
|
||||||
|
@ -634,7 +633,7 @@ static nsDOMClassInfoData sClassInfoData[] = {
|
||||||
NS_DEFINE_CLASSINFO_DATA(ProcessingInstruction, nsNodeSH,
|
NS_DEFINE_CLASSINFO_DATA(ProcessingInstruction, nsNodeSH,
|
||||||
NODE_SCRIPTABLE_FLAGS)
|
NODE_SCRIPTABLE_FLAGS)
|
||||||
NS_DEFINE_CLASSINFO_DATA(Notation, nsNodeSH, NODE_SCRIPTABLE_FLAGS)
|
NS_DEFINE_CLASSINFO_DATA(Notation, nsNodeSH, NODE_SCRIPTABLE_FLAGS)
|
||||||
NS_DEFINE_CLASSINFO_DATA(NodeList, nsArraySH, ARRAY_SCRIPTABLE_FLAGS)
|
NS_DEFINE_CLASSINFO_DATA(NodeList, nsNodeListSH, ARRAY_SCRIPTABLE_FLAGS)
|
||||||
NS_DEFINE_CLASSINFO_DATA(NamedNodeMap, nsNamedNodeMapSH,
|
NS_DEFINE_CLASSINFO_DATA(NamedNodeMap, nsNamedNodeMapSH,
|
||||||
ARRAY_SCRIPTABLE_FLAGS)
|
ARRAY_SCRIPTABLE_FLAGS)
|
||||||
|
|
||||||
|
@ -1229,8 +1228,6 @@ static nsDOMClassInfoData sClassInfoData[] = {
|
||||||
NS_DEFINE_CLASSINFO_DATA(OfflineResourceList, nsOfflineResourceListSH,
|
NS_DEFINE_CLASSINFO_DATA(OfflineResourceList, nsOfflineResourceListSH,
|
||||||
ARRAY_SCRIPTABLE_FLAGS)
|
ARRAY_SCRIPTABLE_FLAGS)
|
||||||
|
|
||||||
NS_DEFINE_CLASSINFO_DATA(LoadStatusList, nsLoadStatusListSH,
|
|
||||||
ARRAY_SCRIPTABLE_FLAGS)
|
|
||||||
NS_DEFINE_CLASSINFO_DATA(LoadStatus, nsDOMGenericSH,
|
NS_DEFINE_CLASSINFO_DATA(LoadStatus, nsDOMGenericSH,
|
||||||
DOM_DEFAULT_SCRIPTABLE_FLAGS)
|
DOM_DEFAULT_SCRIPTABLE_FLAGS)
|
||||||
NS_DEFINE_CLASSINFO_DATA(LoadStatusEvent, nsDOMGenericSH,
|
NS_DEFINE_CLASSINFO_DATA(LoadStatusEvent, nsDOMGenericSH,
|
||||||
|
@ -3419,11 +3416,6 @@ nsDOMClassInfo::Init()
|
||||||
DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget)
|
DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget)
|
||||||
DOM_CLASSINFO_MAP_END
|
DOM_CLASSINFO_MAP_END
|
||||||
|
|
||||||
DOM_CLASSINFO_MAP_BEGIN(LoadStatusList, nsIDOMLoadStatusList)
|
|
||||||
DOM_CLASSINFO_MAP_ENTRY(nsIDOMLoadStatusList)
|
|
||||||
DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget)
|
|
||||||
DOM_CLASSINFO_MAP_END
|
|
||||||
|
|
||||||
DOM_CLASSINFO_MAP_BEGIN(LoadStatus, nsIDOMLoadStatus)
|
DOM_CLASSINFO_MAP_BEGIN(LoadStatus, nsIDOMLoadStatus)
|
||||||
DOM_CLASSINFO_MAP_ENTRY(nsIDOMLoadStatus)
|
DOM_CLASSINFO_MAP_ENTRY(nsIDOMLoadStatus)
|
||||||
DOM_CLASSINFO_MAP_END
|
DOM_CLASSINFO_MAP_END
|
||||||
|
@ -7538,35 +7530,8 @@ nsGenericArraySH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
// it doesn't provide one.
|
// it doesn't provide one.
|
||||||
|
|
||||||
PRUint32 length;
|
PRUint32 length;
|
||||||
|
nsresult rv = GetLength(wrapper, cx, obj, &length);
|
||||||
nsCOMPtr<nsIDOMNodeList> map = do_QueryWrappedNative(wrapper);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
if (map) {
|
|
||||||
// Fast path: Get the length from our map.
|
|
||||||
|
|
||||||
map->GetLength(&length);
|
|
||||||
} else {
|
|
||||||
// Slow path: We don't know how to get the length in a fast way, ask our
|
|
||||||
// implementation.
|
|
||||||
|
|
||||||
jsval lenval;
|
|
||||||
if (!JS_GetProperty(cx, obj, "length", &lenval)) {
|
|
||||||
return NS_ERROR_UNEXPECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!JSVAL_IS_INT(lenval)) {
|
|
||||||
// This can apparently happen with some sparse array impls falling back
|
|
||||||
// onto this code.
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
PRInt32 slen = JSVAL_TO_INT(lenval);
|
|
||||||
if (slen < 0) {
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
length = (PRUint32)slen;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((PRUint32)n < length) {
|
if ((PRUint32)n < length) {
|
||||||
*_retval = ::JS_DefineElement(cx, obj, n, JSVAL_VOID, nsnull, nsnull,
|
*_retval = ::JS_DefineElement(cx, obj, n, JSVAL_VOID, nsnull, nsnull,
|
||||||
|
@ -7578,6 +7543,33 @@ nsGenericArraySH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsresult
|
||||||
|
nsGenericArraySH::GetLength(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
|
JSObject *obj, PRUint32 *length)
|
||||||
|
{
|
||||||
|
*length = 0;
|
||||||
|
|
||||||
|
jsval lenval;
|
||||||
|
if (!JS_GetProperty(cx, obj, "length", &lenval)) {
|
||||||
|
return NS_ERROR_UNEXPECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!JSVAL_IS_INT(lenval)) {
|
||||||
|
// This can apparently happen with some sparse array impls falling back
|
||||||
|
// onto this code.
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRInt32 slen = JSVAL_TO_INT(lenval);
|
||||||
|
if (slen < 0) {
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
*length = (PRUint32)slen;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsGenericArraySH::Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
nsGenericArraySH::Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
JSObject *obj, PRBool *_retval)
|
JSObject *obj, PRBool *_retval)
|
||||||
|
@ -7613,21 +7605,7 @@ nsGenericArraySH::Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
return ok ? NS_OK : NS_ERROR_UNEXPECTED;
|
return ok ? NS_OK : NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NodeList scriptable helper
|
// Array scriptable helper
|
||||||
|
|
||||||
nsresult
|
|
||||||
nsArraySH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult)
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsINodeList> list(do_QueryInterface(aNative));
|
|
||||||
if (!list) {
|
|
||||||
return NS_ERROR_UNEXPECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IF_ADDREF(*aResult = list->GetNodeAt(aIndex));
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsArraySH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
nsArraySH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
|
@ -7643,9 +7621,10 @@ nsArraySH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
return NS_ERROR_DOM_INDEX_SIZE_ERR;
|
return NS_ERROR_DOM_INDEX_SIZE_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsISupports> array_item;
|
// Make sure rv == NS_OK here, so GetItemAt implementations that never fail
|
||||||
|
// don't have to set rv.
|
||||||
rv = GetItemAt(wrapper->Native(), n, getter_AddRefs(array_item));
|
rv = NS_OK;
|
||||||
|
nsISupports* array_item = GetItemAt(wrapper->Native(), n, &rv);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
if (array_item) {
|
if (array_item) {
|
||||||
|
@ -7662,6 +7641,47 @@ nsArraySH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// NodeList scriptable helper
|
||||||
|
|
||||||
|
nsresult
|
||||||
|
nsNodeListSH::GetLength(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
|
JSObject *obj, PRUint32 *length)
|
||||||
|
{
|
||||||
|
nsINodeList* list = static_cast<nsINodeList*>(wrapper->Native());
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsINodeList> list_qi = do_QueryWrappedNative(wrapper);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsINodeList pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(list_qi == list, "Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return list->GetLength(length);
|
||||||
|
}
|
||||||
|
|
||||||
|
nsISupports*
|
||||||
|
nsNodeListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
|
nsresult *aResult)
|
||||||
|
{
|
||||||
|
nsINodeList* list = static_cast<nsINodeList*>(aNative);
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsINodeList> list_qi = do_QueryInterface(aNative);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsINodeList pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(list_qi == list, "Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return list->GetNodeAt(aIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// StringList scriptable helper
|
// StringList scriptable helper
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -7707,19 +7727,13 @@ nsNamedArraySH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
|
|
||||||
// NamedNodeMap helper
|
// NamedNodeMap helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsNamedNodeMapSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsNamedNodeMapSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMNamedNodeMap> map(do_QueryInterface(aNative));
|
nsDOMAttributeMap* map = nsDOMAttributeMap::FromSupports(aNative);
|
||||||
NS_ENSURE_TRUE(map, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMNode *node = nsnull; // Weak, transfer the ownership over to aResult
|
return map->GetItemAt(aIndex, aResult);
|
||||||
nsresult rv = map->Item(aIndex, &node);
|
|
||||||
|
|
||||||
*aResult = node;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -7740,25 +7754,23 @@ nsNamedNodeMapSH::GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
|
|
||||||
// HTMLCollection helper
|
// HTMLCollection helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsHTMLCollectionSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsHTMLCollectionSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
// Common case is that we're also an nsINodeList
|
nsIHTMLCollection* collection = static_cast<nsIHTMLCollection*>(aNative);
|
||||||
nsresult rv = nsArraySH::GetItemAt(aNative, aIndex, aResult);
|
#ifdef DEBUG
|
||||||
if (NS_SUCCEEDED(rv)) {
|
{
|
||||||
return rv;
|
nsCOMPtr<nsIHTMLCollection> collection_qi = do_QueryInterface(aNative);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsIHTMLCollection pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(collection_qi == collection, "Uh, fix QI!");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
nsCOMPtr<nsIDOMHTMLCollection> collection(do_QueryInterface(aNative));
|
|
||||||
NS_ENSURE_TRUE(collection, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMNode *node = nsnull; // Weak, transfer the ownership over to aResult
|
return collection->GetNodeAt(aIndex, aResult);
|
||||||
rv = collection->Item(aIndex, &node);
|
|
||||||
|
|
||||||
*aResult = node;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -7783,14 +7795,7 @@ nsresult
|
||||||
nsContentListSH::PreCreate(nsISupports *nativeObj, JSContext *cx,
|
nsContentListSH::PreCreate(nsISupports *nativeObj, JSContext *cx,
|
||||||
JSObject *globalObj, JSObject **parentObj)
|
JSObject *globalObj, JSObject **parentObj)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMNodeList> nodeList(do_QueryInterface(nativeObj));
|
nsContentList *contentList = nsContentList::FromSupports(nativeObj);
|
||||||
nsContentList *contentList =
|
|
||||||
static_cast<nsContentList*>(static_cast<nsIDOMNodeList*>(nodeList));
|
|
||||||
|
|
||||||
if (!contentList) {
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsISupports *native_parent = contentList->GetParentObject();
|
nsISupports *native_parent = contentList->GetParentObject();
|
||||||
|
|
||||||
if (!native_parent) {
|
if (!native_parent) {
|
||||||
|
@ -7809,6 +7814,29 @@ nsContentListSH::PreCreate(nsISupports *nativeObj, JSContext *cx,
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsContentListSH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
|
JSObject *obj, jsval id, jsval *vp,
|
||||||
|
PRBool *_retval)
|
||||||
|
{
|
||||||
|
if (JSVAL_IS_STRING(id) && !ObjectIsNativeWrapper(cx, obj)) {
|
||||||
|
nsContentList *list = nsContentList::FromSupports(wrapper->Native());
|
||||||
|
nsINode* node = list->NamedItem(nsDependentJSString(id), PR_TRUE);
|
||||||
|
if (!node) {
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
|
||||||
|
nsresult rv = WrapNative(cx, obj, node, NS_GET_IID(nsISupports), vp,
|
||||||
|
getter_AddRefs(holder));
|
||||||
|
|
||||||
|
return NS_FAILED(rv) ? rv : NS_SUCCESS_I_DID_SOMETHING;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nsNodeListSH::GetProperty(wrapper, cx, obj, id, vp, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// FormControlList helper
|
// FormControlList helper
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -9846,19 +9874,13 @@ nsHTMLOptionsCollectionSH::Add(JSContext *cx, JSObject *obj, uintN argc,
|
||||||
|
|
||||||
// Plugin helper
|
// Plugin helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsPluginSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsPluginSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMPlugin> plugin(do_QueryInterface(aNative));
|
nsPluginElement* plugin = nsPluginElement::FromSupports(aNative);
|
||||||
NS_ENSURE_TRUE(plugin, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMMimeType *mime_type = nsnull;
|
return plugin->GetItemAt(aIndex, aResult);
|
||||||
nsresult rv = plugin->Item(aIndex, &mime_type);
|
|
||||||
|
|
||||||
*aResult = mime_type;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -9880,19 +9902,13 @@ nsPluginSH::GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
|
|
||||||
// PluginArray helper
|
// PluginArray helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsPluginArraySH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsPluginArraySH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMPluginArray> array(do_QueryInterface(aNative));
|
nsPluginArray* array = nsPluginArray::FromSupports(aNative);
|
||||||
NS_ENSURE_TRUE(array, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMPlugin *plugin = nsnull;
|
return array->GetItemAt(aIndex, aResult);
|
||||||
nsresult rv = array->Item(aIndex, &plugin);
|
|
||||||
|
|
||||||
*aResult = plugin;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -9914,19 +9930,13 @@ nsPluginArraySH::GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
|
|
||||||
// MimeTypeArray helper
|
// MimeTypeArray helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsMimeTypeArraySH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsMimeTypeArraySH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMMimeTypeArray> array(do_QueryInterface(aNative));
|
nsMimeTypeArray* array = nsMimeTypeArray::FromSupports(aNative);
|
||||||
NS_ENSURE_TRUE(array, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMMimeType *mime_type = nsnull;
|
return array->GetItemAt(aIndex, aResult);
|
||||||
nsresult rv = array->Item(aIndex, &mime_type);
|
|
||||||
|
|
||||||
*aResult = mime_type;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -10041,37 +10051,25 @@ nsMediaListSH::GetStringAt(nsISupports *aNative, PRInt32 aIndex,
|
||||||
|
|
||||||
// StyleSheetList helper
|
// StyleSheetList helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsStyleSheetListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsStyleSheetListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *rv)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMStyleSheetList> stylesheets(do_QueryInterface(aNative));
|
nsDOMStyleSheetList* list = nsDOMStyleSheetList::FromSupports(aNative);
|
||||||
NS_ENSURE_TRUE(stylesheets, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMStyleSheet *sheet = nsnull;
|
return list->GetItemAt(aIndex);
|
||||||
nsresult rv = stylesheets->Item(aIndex, &sheet);
|
|
||||||
|
|
||||||
*aResult = sheet;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// CSSValueList helper
|
// CSSValueList helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsCSSValueListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsCSSValueListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMCSSValueList> cssValueList(do_QueryInterface(aNative));
|
nsDOMCSSValueList* list = nsDOMCSSValueList::FromSupports(aNative);
|
||||||
NS_ENSURE_TRUE(cssValueList, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMCSSValue *cssValue = nsnull; // Weak, transfer the ownership over to aResult
|
return list->GetItemAt(aIndex);
|
||||||
nsresult rv = cssValueList->Item(aIndex, &cssValue);
|
|
||||||
|
|
||||||
*aResult = cssValue;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -10093,54 +10091,46 @@ nsCSSStyleDeclSH::GetStringAt(nsISupports *aNative, PRInt32 aIndex,
|
||||||
|
|
||||||
// CSSRuleList scriptable helper
|
// CSSRuleList scriptable helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsCSSRuleListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsCSSRuleListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMCSSRuleList> list(do_QueryInterface(aNative));
|
nsICSSRuleList* list = static_cast<nsICSSRuleList*>(aNative);
|
||||||
NS_ENSURE_TRUE(list, NS_ERROR_UNEXPECTED);
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsICSSRuleList> list_qi = do_QueryInterface(aNative);
|
||||||
|
|
||||||
nsIDOMCSSRule *rule = nsnull; // Weak, transfer the ownership over to aResult
|
// If this assertion fires the QI implementation for the object in
|
||||||
nsresult rv = list->Item(aIndex, &rule);
|
// question doesn't use the nsICSSRuleList pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(list_qi == list, "Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
*aResult = rule;
|
return list->GetItemAt(aIndex, aResult);
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientRectList scriptable helper
|
// ClientRectList scriptable helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsClientRectListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsClientRectListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMClientRectList> list(do_QueryInterface(aNative));
|
nsClientRectList* list = nsClientRectList::FromSupports(aNative);
|
||||||
NS_ENSURE_TRUE(list, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMClientRect *rule = nsnull; // Weak, transfer the ownership over to aResult
|
return list->GetItemAt(aIndex);
|
||||||
nsresult rv = list->Item(aIndex, &rule);
|
|
||||||
|
|
||||||
*aResult = rule;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MOZ_XUL
|
#ifdef MOZ_XUL
|
||||||
// TreeColumns helper
|
// TreeColumns helper
|
||||||
|
|
||||||
nsresult
|
nsISupports*
|
||||||
nsTreeColumnsSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsTreeColumnsSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsITreeColumns> columns(do_QueryInterface(aNative));
|
nsTreeColumns* columns = nsTreeColumns::FromSupports(aNative);
|
||||||
NS_ENSURE_TRUE(columns, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsITreeColumn* column = nsnull; // Weak, transfer the ownership over to aResult
|
return columns->GetColumnAt(aIndex);
|
||||||
nsresult rv = columns->GetColumnAt(aIndex, &column);
|
|
||||||
|
|
||||||
*aResult = column;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -10479,34 +10469,12 @@ nsOfflineResourceListSH::GetStringAt(nsISupports *aNative, PRInt32 aIndex,
|
||||||
return list->Item(aIndex, aResult);
|
return list->Item(aIndex, aResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
// nsLoadStatusListSH
|
|
||||||
nsresult
|
|
||||||
nsLoadStatusListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult)
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsIDOMLoadStatusList> list(do_QueryInterface(aNative));
|
|
||||||
NS_ENSURE_TRUE(list, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMLoadStatus *status = nsnull; // Weak, transfer the ownership over to aResult
|
|
||||||
nsresult rv = list->Item(aIndex, &status);
|
|
||||||
|
|
||||||
*aResult = status;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
// nsFileListSH
|
// nsFileListSH
|
||||||
nsresult
|
nsISupports*
|
||||||
nsFileListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
nsFileListSH::GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult)
|
nsresult *aResult)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMFileList> list(do_QueryInterface(aNative));
|
nsDOMFileList* list = nsDOMFileList::FromSupports(aNative);
|
||||||
NS_ENSURE_TRUE(list, NS_ERROR_UNEXPECTED);
|
|
||||||
|
|
||||||
nsIDOMFile *file = nsnull; // weak, transfer ownership over to aResult
|
return list->GetItemAt(aIndex);
|
||||||
nsresult rv = list->Item(aIndex, &file);
|
|
||||||
|
|
||||||
*aResult = file;
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -620,6 +620,9 @@ public:
|
||||||
NS_IMETHOD Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
NS_IMETHOD Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
JSObject *obj, PRBool *_retval);
|
JSObject *obj, PRBool *_retval);
|
||||||
|
|
||||||
|
virtual nsresult GetLength(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
|
JSObject *obj, PRUint32 *length);
|
||||||
|
|
||||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
||||||
{
|
{
|
||||||
return new nsGenericArraySH(aData);
|
return new nsGenericArraySH(aData);
|
||||||
|
@ -627,7 +630,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// NodeList scriptable helper
|
// Array scriptable helper
|
||||||
|
|
||||||
class nsArraySH : public nsGenericArraySH
|
class nsArraySH : public nsGenericArraySH
|
||||||
{
|
{
|
||||||
|
@ -640,16 +643,39 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
// Subclasses need to override this, if the implementation can't fail it's
|
||||||
nsISupports **aResult);
|
// allowed to not set *aResult.
|
||||||
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
|
nsresult *aResult) = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
|
JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Not implemented, nothing should create an instance of this class.
|
||||||
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// NodeList scriptable helper
|
||||||
|
|
||||||
|
class nsNodeListSH : public nsArraySH
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
nsNodeListSH(nsDOMClassInfoData* aData) : nsArraySH(aData)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual nsresult GetLength(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
|
JSObject *obj, PRUint32 *length);
|
||||||
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
|
nsresult *aResult);
|
||||||
|
|
||||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
||||||
{
|
{
|
||||||
return new nsArraySH(aData);
|
return new nsNodeListSH(aData);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -673,6 +699,10 @@ protected:
|
||||||
public:
|
public:
|
||||||
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
|
JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Not implemented, nothing should create an instance of this class.
|
||||||
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -689,10 +719,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
// Override nsNamedArraySH::GetNamedItem()
|
// Override nsNamedArraySH::GetNamedItem()
|
||||||
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
|
@ -719,10 +747,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
// Override nsNamedArraySH::GetNamedItem()
|
// Override nsNamedArraySH::GetNamedItem()
|
||||||
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
|
@ -738,20 +764,18 @@ public:
|
||||||
|
|
||||||
// ContentList helper
|
// ContentList helper
|
||||||
|
|
||||||
class nsContentListSH : public nsHTMLCollectionSH
|
class nsContentListSH : public nsNodeListSH
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
nsContentListSH(nsDOMClassInfoData* aData) : nsHTMLCollectionSH(aData)
|
nsContentListSH(nsDOMClassInfoData* aData) : nsNodeListSH(aData)
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~nsContentListSH()
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NS_IMETHOD PreCreate(nsISupports *nativeObj, JSContext *cx,
|
NS_IMETHOD PreCreate(nsISupports *nativeObj, JSContext *cx,
|
||||||
JSObject *globalObj, JSObject **parentObj);
|
JSObject *globalObj, JSObject **parentObj);
|
||||||
|
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
|
JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
|
||||||
|
|
||||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
||||||
{
|
{
|
||||||
|
@ -1067,10 +1091,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
// Override nsNamedArraySH::GetNamedItem()
|
// Override nsNamedArraySH::GetNamedItem()
|
||||||
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
|
@ -1097,10 +1119,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
// Override nsNamedArraySH::GetNamedItem()
|
// Override nsNamedArraySH::GetNamedItem()
|
||||||
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
|
@ -1127,10 +1147,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
// Override nsNamedArraySH::GetNamedItem()
|
// Override nsNamedArraySH::GetNamedItem()
|
||||||
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
|
@ -1255,10 +1273,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
||||||
|
@ -1281,10 +1297,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
||||||
|
@ -1331,10 +1345,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
||||||
|
@ -1356,10 +1368,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
||||||
|
@ -1383,10 +1393,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override nsArraySH::GetItemAt() since our list isn't a
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
// nsIDOMNodeList
|
nsresult *aResult);
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
// Override nsNamedArraySH::GetNamedItem()
|
// Override nsNamedArraySH::GetNamedItem()
|
||||||
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
|
@ -1424,6 +1432,11 @@ protected:
|
||||||
JSObject *obj, PRUint32 enum_op, jsval *statep,
|
JSObject *obj, PRUint32 enum_op, jsval *statep,
|
||||||
jsid *idp, PRBool *_retval);
|
jsid *idp, PRBool *_retval);
|
||||||
|
|
||||||
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
|
nsresult *aResult)
|
||||||
|
{
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
// Override nsNamedArraySH::GetNamedItem()
|
// Override nsNamedArraySH::GetNamedItem()
|
||||||
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
nsISupports **aResult);
|
nsISupports **aResult);
|
||||||
|
@ -1446,6 +1459,11 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
|
nsresult *aResult)
|
||||||
|
{
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
// Override nsNamedArraySH::GetNamedItem()
|
// Override nsNamedArraySH::GetNamedItem()
|
||||||
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
virtual nsresult GetNamedItem(nsISupports *aNative, const nsAString& aName,
|
||||||
nsISupports **aResult);
|
nsISupports **aResult);
|
||||||
|
@ -1571,27 +1589,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class nsLoadStatusListSH : public nsArraySH
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
nsLoadStatusListSH(nsDOMClassInfoData *aData) : nsArraySH(aData)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~nsLoadStatusListSH()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
|
||||||
nsISupports **aResult);
|
|
||||||
|
|
||||||
public:
|
|
||||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
|
||||||
{
|
|
||||||
return new nsLoadStatusListSH(aData);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class nsFileListSH : public nsArraySH
|
class nsFileListSH : public nsArraySH
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
@ -1603,8 +1600,8 @@ protected:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual nsresult GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
|
||||||
nsISupports **aResult);
|
nsresult *aResult);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
||||||
|
|
|
@ -124,7 +124,6 @@ class nsDummyJavaPluginOwner;
|
||||||
class PostMessageEvent;
|
class PostMessageEvent;
|
||||||
|
|
||||||
class nsDOMOfflineResourceList;
|
class nsDOMOfflineResourceList;
|
||||||
class nsDOMOfflineLoadStatusList;
|
|
||||||
class nsGeolocation;
|
class nsGeolocation;
|
||||||
|
|
||||||
// permissible values for CheckOpenAllow
|
// permissible values for CheckOpenAllow
|
||||||
|
|
|
@ -85,20 +85,34 @@ nsMimeTypeArray::GetLength(PRUint32* aLength)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIDOMMimeType*
|
||||||
|
nsMimeTypeArray::GetItemAt(PRUint32 aIndex, nsresult *aResult)
|
||||||
|
{
|
||||||
|
if (mMimeTypeArray == nsnull) {
|
||||||
|
*aResult = GetMimeTypes();
|
||||||
|
if (*aResult != NS_OK)
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aIndex >= mMimeTypeCount) {
|
||||||
|
*aResult = NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
*aResult = NS_OK;
|
||||||
|
|
||||||
|
return mMimeTypeArray[aIndex];
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsMimeTypeArray::Item(PRUint32 aIndex, nsIDOMMimeType** aReturn)
|
nsMimeTypeArray::Item(PRUint32 aIndex, nsIDOMMimeType** aReturn)
|
||||||
{
|
{
|
||||||
if (mMimeTypeArray == nsnull) {
|
nsresult rv;
|
||||||
nsresult rv = GetMimeTypes();
|
|
||||||
if (rv != NS_OK)
|
NS_IF_ADDREF(*aReturn = GetItemAt(aIndex, &rv));
|
||||||
return rv;
|
|
||||||
}
|
return rv;
|
||||||
if (aIndex < mMimeTypeCount) {
|
|
||||||
*aReturn = mMimeTypeArray[aIndex];
|
|
||||||
NS_IF_ADDREF(*aReturn);
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
|
|
@ -56,6 +56,25 @@ public:
|
||||||
|
|
||||||
nsresult Refresh();
|
nsresult Refresh();
|
||||||
|
|
||||||
|
nsIDOMMimeType* GetItemAt(PRUint32 aIndex, nsresult* aResult);
|
||||||
|
|
||||||
|
static nsMimeTypeArray* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMMimeTypeArray> array_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsIDOMMimeTypeArray pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(array_qi == static_cast<nsIDOMMimeTypeArray*>(aSupports),
|
||||||
|
"Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return static_cast<nsMimeTypeArray*>(aSupports);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nsresult GetMimeTypes();
|
nsresult GetMimeTypes();
|
||||||
void Clear();
|
void Clear();
|
||||||
|
|
|
@ -105,27 +105,31 @@ nsPluginArray::AllowPlugins()
|
||||||
return allowPlugins;
|
return allowPlugins;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIDOMPlugin*
|
||||||
|
nsPluginArray::GetItemAt(PRUint32 aIndex, nsresult* aResult)
|
||||||
|
{
|
||||||
|
*aResult = NS_OK;
|
||||||
|
|
||||||
|
if (!AllowPlugins())
|
||||||
|
return nsnull;
|
||||||
|
|
||||||
|
if (mPluginArray == nsnull) {
|
||||||
|
*aResult = GetPlugins();
|
||||||
|
if (*aResult != NS_OK)
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
return aIndex < mPluginCount ? mPluginArray[aIndex] : nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsPluginArray::Item(PRUint32 aIndex, nsIDOMPlugin** aReturn)
|
nsPluginArray::Item(PRUint32 aIndex, nsIDOMPlugin** aReturn)
|
||||||
{
|
{
|
||||||
NS_PRECONDITION(nsnull != aReturn, "null arg");
|
nsresult rv;
|
||||||
*aReturn = nsnull;
|
|
||||||
|
|
||||||
if (!AllowPlugins())
|
NS_IF_ADDREF(*aReturn = GetItemAt(aIndex, &rv));
|
||||||
return NS_OK;
|
|
||||||
|
|
||||||
if (mPluginArray == nsnull) {
|
return rv;
|
||||||
nsresult rv = GetPlugins();
|
|
||||||
if (rv != NS_OK)
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aIndex < mPluginCount) {
|
|
||||||
*aReturn = mPluginArray[aIndex];
|
|
||||||
NS_IF_ADDREF(*aReturn);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
@ -330,21 +334,34 @@ nsPluginElement::GetLength(PRUint32* aLength)
|
||||||
return mPlugin->GetLength(aLength);
|
return mPlugin->GetLength(aLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIDOMMimeType*
|
||||||
|
nsPluginElement::GetItemAt(PRUint32 aIndex, nsresult *aResult)
|
||||||
|
{
|
||||||
|
if (mMimeTypeArray == nsnull) {
|
||||||
|
*aResult = GetMimeTypes();
|
||||||
|
if (*aResult != NS_OK)
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aIndex >= mMimeTypeCount) {
|
||||||
|
*aResult = NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
*aResult = NS_OK;
|
||||||
|
|
||||||
|
return mMimeTypeArray[aIndex];
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsPluginElement::Item(PRUint32 aIndex, nsIDOMMimeType** aReturn)
|
nsPluginElement::Item(PRUint32 aIndex, nsIDOMMimeType** aReturn)
|
||||||
{
|
{
|
||||||
if (mMimeTypeArray == nsnull) {
|
nsresult rv;
|
||||||
nsresult rv = GetMimeTypes();
|
|
||||||
if (rv != NS_OK)
|
NS_IF_ADDREF(*aReturn = GetItemAt(aIndex, &rv));
|
||||||
return rv;
|
|
||||||
}
|
return rv;
|
||||||
if (aIndex < mMimeTypeCount) {
|
|
||||||
nsIDOMMimeType* mimeType = mMimeTypeArray[aIndex];
|
|
||||||
NS_IF_ADDREF(mimeType);
|
|
||||||
*aReturn = mimeType;
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
|
|
@ -60,6 +60,25 @@ public:
|
||||||
|
|
||||||
nsresult GetPluginHost(nsIPluginHost** aPluginHost);
|
nsresult GetPluginHost(nsIPluginHost** aPluginHost);
|
||||||
|
|
||||||
|
nsIDOMPlugin* GetItemAt(PRUint32 aIndex, nsresult* aResult);
|
||||||
|
|
||||||
|
static nsPluginArray* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMPluginArray> array_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsIDOMPluginArray pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(array_qi == static_cast<nsIDOMPluginArray*>(aSupports),
|
||||||
|
"Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return static_cast<nsPluginArray*>(aSupports);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nsresult GetPlugins();
|
nsresult GetPlugins();
|
||||||
PRBool AllowPlugins();
|
PRBool AllowPlugins();
|
||||||
|
@ -84,6 +103,25 @@ public:
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
NS_DECL_NSIDOMPLUGIN
|
NS_DECL_NSIDOMPLUGIN
|
||||||
|
|
||||||
|
nsIDOMMimeType* GetItemAt(PRUint32 aIndex, nsresult* aResult);
|
||||||
|
|
||||||
|
static nsPluginElement* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMPlugin> plugin_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsIDOMPlugin pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(plugin_qi == static_cast<nsIDOMPlugin*>(aSupports),
|
||||||
|
"Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return static_cast<nsPluginElement*>(aSupports);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nsresult GetMimeTypes();
|
nsresult GetMimeTypes();
|
||||||
|
|
||||||
|
|
|
@ -1,577 +0,0 @@
|
||||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
||||||
/* ***** BEGIN LICENSE BLOCK *****
|
|
||||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
||||||
*
|
|
||||||
* The contents of this file are subject to the Mozilla Public License Version
|
|
||||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
* http://www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
||||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
||||||
* for the specific language governing rights and limitations under the
|
|
||||||
* License.
|
|
||||||
*
|
|
||||||
* The Original Code is mozilla.org code.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is
|
|
||||||
* Mozilla Corporation
|
|
||||||
* Portions created by the Initial Developer are Copyright (C) 2007
|
|
||||||
* the Initial Developer. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s):
|
|
||||||
* Dave Camp <dcamp@mozilla.com>
|
|
||||||
*
|
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
|
||||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
||||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
||||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
||||||
* of those above. If you wish to allow use of your version of this file only
|
|
||||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
||||||
* use your version of this file under the terms of the MPL, indicate your
|
|
||||||
* decision by deleting the provisions above and replace them with the notice
|
|
||||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
||||||
* the provisions above, a recipient may use your version of this file under
|
|
||||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
||||||
*
|
|
||||||
* ***** END LICENSE BLOCK ***** */
|
|
||||||
|
|
||||||
#include "nsDOMOfflineLoadStatusList.h"
|
|
||||||
#include "nsDOMClassInfo.h"
|
|
||||||
#include "nsIMutableArray.h"
|
|
||||||
#include "nsCPrefetchService.h"
|
|
||||||
#include "nsIObserverService.h"
|
|
||||||
#include "nsIJSContextStack.h"
|
|
||||||
#include "nsIScriptSecurityManager.h"
|
|
||||||
#include "nsIContent.h"
|
|
||||||
#include "nsNetCID.h"
|
|
||||||
#include "nsICacheService.h"
|
|
||||||
#include "nsICacheSession.h"
|
|
||||||
#include "nsIOfflineCacheUpdate.h"
|
|
||||||
#include "nsContentUtils.h"
|
|
||||||
#include "nsDOMError.h"
|
|
||||||
#include "nsNetUtil.h"
|
|
||||||
#include "nsAutoPtr.h"
|
|
||||||
|
|
||||||
#define LOADREQUESTED_STR "loadrequested"
|
|
||||||
#define LOADCOMPLETED_STR "loadcompleted"
|
|
||||||
|
|
||||||
//
|
|
||||||
// nsDOMOfflineLoadStatus
|
|
||||||
//
|
|
||||||
|
|
||||||
// XXX
|
|
||||||
//
|
|
||||||
// nsDOMOfflineLoadStatusList has an array wrapper in its classinfo struct
|
|
||||||
// (LoadStatusList) that exposes nsDOMOfflineLoadStatusList::Item() as
|
|
||||||
// array items.
|
|
||||||
//
|
|
||||||
// For scripts to recognize these as nsIDOMLoadStatus objects, I needed
|
|
||||||
// to add a LoadStatus classinfo.
|
|
||||||
//
|
|
||||||
// Because the prefetch service is outside the dom module, it can't
|
|
||||||
// actually use the LoadStatus classinfo.
|
|
||||||
//
|
|
||||||
// nsDOMOfflineLoadStatus is just a simple wrapper around the
|
|
||||||
// nsIDOMLoadStatus objects returned by the prefetch service that adds the
|
|
||||||
// LoadStatus classinfo implementation.
|
|
||||||
//
|
|
||||||
// Is there a better way around this?
|
|
||||||
|
|
||||||
class nsDOMOfflineLoadStatus : public nsIDOMLoadStatus
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
NS_DECL_ISUPPORTS
|
|
||||||
NS_DECL_NSIDOMLOADSTATUS
|
|
||||||
|
|
||||||
nsDOMOfflineLoadStatus(nsIDOMLoadStatus *status);
|
|
||||||
virtual ~nsDOMOfflineLoadStatus();
|
|
||||||
|
|
||||||
const nsIDOMLoadStatus *Implementation() { return mStatus; }
|
|
||||||
private:
|
|
||||||
nsCOMPtr<nsIDOMLoadStatus> mStatus;
|
|
||||||
};
|
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN(nsDOMOfflineLoadStatus)
|
|
||||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMLoadStatus)
|
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMLoadStatus)
|
|
||||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(LoadStatus)
|
|
||||||
NS_INTERFACE_MAP_END
|
|
||||||
|
|
||||||
NS_IMPL_ADDREF(nsDOMOfflineLoadStatus)
|
|
||||||
NS_IMPL_RELEASE(nsDOMOfflineLoadStatus)
|
|
||||||
|
|
||||||
nsDOMOfflineLoadStatus::nsDOMOfflineLoadStatus(nsIDOMLoadStatus *aStatus)
|
|
||||||
: mStatus(aStatus)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
nsDOMOfflineLoadStatus::~nsDOMOfflineLoadStatus()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatus::GetSource(nsIDOMNode **aSource)
|
|
||||||
{
|
|
||||||
return mStatus->GetSource(aSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatus::GetUri(nsAString &aURI)
|
|
||||||
{
|
|
||||||
return mStatus->GetUri(aURI);
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatus::GetTotalSize(PRInt32 *aTotalSize)
|
|
||||||
{
|
|
||||||
return mStatus->GetTotalSize(aTotalSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatus::GetLoadedSize(PRInt32 *aLoadedSize)
|
|
||||||
{
|
|
||||||
return mStatus->GetLoadedSize(aLoadedSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatus::GetReadyState(PRUint16 *aReadyState)
|
|
||||||
{
|
|
||||||
return mStatus->GetReadyState(aReadyState);
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatus::GetStatus(PRUint16 *aStatus)
|
|
||||||
{
|
|
||||||
return mStatus->GetStatus(aStatus);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// nsDOMOfflineLoadStatusList
|
|
||||||
//
|
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN(nsDOMOfflineLoadStatusList)
|
|
||||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMLoadStatusList)
|
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMLoadStatusList)
|
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMEventTarget)
|
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIObserver)
|
|
||||||
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
|
|
||||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(LoadStatusList)
|
|
||||||
NS_INTERFACE_MAP_END
|
|
||||||
|
|
||||||
NS_IMPL_ADDREF(nsDOMOfflineLoadStatusList)
|
|
||||||
NS_IMPL_RELEASE(nsDOMOfflineLoadStatusList)
|
|
||||||
|
|
||||||
nsDOMOfflineLoadStatusList::nsDOMOfflineLoadStatusList(nsIURI *aURI)
|
|
||||||
: mInitialized(PR_FALSE)
|
|
||||||
, mURI(aURI)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
nsDOMOfflineLoadStatusList::~nsDOMOfflineLoadStatusList()
|
|
||||||
{
|
|
||||||
mLoadRequestedEventListeners.Clear();
|
|
||||||
mLoadCompletedEventListeners.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
nsDOMOfflineLoadStatusList::Init()
|
|
||||||
{
|
|
||||||
if (mInitialized) {
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
mInitialized = PR_TRUE;
|
|
||||||
|
|
||||||
nsresult rv = mURI->GetHostPort(mHostPort);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
nsCOMPtr<nsIOfflineCacheUpdateService> cacheUpdateService =
|
|
||||||
do_GetService(NS_OFFLINECACHEUPDATESERVICE_CONTRACTID, &rv);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
PRUint32 numUpdates;
|
|
||||||
rv = cacheUpdateService->GetNumUpdates(&numUpdates);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
for (PRUint32 i = 0; i < numUpdates; i++) {
|
|
||||||
nsCOMPtr<nsIOfflineCacheUpdate> cacheUpdate;
|
|
||||||
rv = cacheUpdateService->GetUpdate(i, getter_AddRefs(cacheUpdate));
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
UpdateAdded(cacheUpdate);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
}
|
|
||||||
|
|
||||||
// watch for new offline cache updates
|
|
||||||
nsCOMPtr<nsIObserverService> observerServ =
|
|
||||||
do_GetService("@mozilla.org/observer-service;1", &rv);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
rv = observerServ->AddObserver(this, "offline-cache-update-added", PR_TRUE);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
rv = observerServ->AddObserver(this, "offline-cache-update-completed", PR_TRUE);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsIDOMLoadStatus *
|
|
||||||
nsDOMOfflineLoadStatusList::FindWrapper(nsIDOMLoadStatus *aStatus,
|
|
||||||
PRUint32 *index)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < mItems.Count(); i++) {
|
|
||||||
nsDOMOfflineLoadStatus *item = static_cast<nsDOMOfflineLoadStatus*>
|
|
||||||
(mItems[i]);
|
|
||||||
if (item->Implementation() == aStatus) {
|
|
||||||
*index = i;
|
|
||||||
return mItems[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nsnull;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
nsDOMOfflineLoadStatusList::UpdateAdded(nsIOfflineCacheUpdate *aUpdate)
|
|
||||||
{
|
|
||||||
nsCAutoString owner;
|
|
||||||
nsresult rv = aUpdate->GetUpdateDomain(owner);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
if (owner != mHostPort) {
|
|
||||||
// This update doesn't belong to us
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
PRUint32 numItems;
|
|
||||||
rv = aUpdate->GetCount(&numItems);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
for (PRUint32 i = 0; i < numItems; i++) {
|
|
||||||
nsCOMPtr<nsIDOMLoadStatus> status;
|
|
||||||
rv = aUpdate->Item(i, getter_AddRefs(status));
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
nsDOMOfflineLoadStatus *wrapper = new nsDOMOfflineLoadStatus(status);
|
|
||||||
if (!wrapper) return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
|
|
||||||
mItems.AppendObject(wrapper);
|
|
||||||
|
|
||||||
SendLoadEvent(NS_LITERAL_STRING(LOADREQUESTED_STR),
|
|
||||||
mLoadRequestedEventListeners,
|
|
||||||
wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
nsDOMOfflineLoadStatusList::UpdateCompleted(nsIOfflineCacheUpdate *aUpdate)
|
|
||||||
{
|
|
||||||
nsCAutoString owner;
|
|
||||||
nsresult rv = aUpdate->GetUpdateDomain(owner);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
if (owner != mHostPort) {
|
|
||||||
// This update doesn't belong to us
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
PRUint32 numItems;
|
|
||||||
rv = aUpdate->GetCount(&numItems);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
for (PRUint32 i = 0; i < numItems; i++) {
|
|
||||||
nsCOMPtr<nsIDOMLoadStatus> status;
|
|
||||||
rv = aUpdate->Item(i, getter_AddRefs(status));
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
PRUint32 index;
|
|
||||||
nsCOMPtr<nsIDOMLoadStatus> wrapper = FindWrapper(status, &index);
|
|
||||||
if (wrapper) {
|
|
||||||
mItems.RemoveObjectAt(index);
|
|
||||||
nsresult rv = SendLoadEvent(NS_LITERAL_STRING(LOADCOMPLETED_STR),
|
|
||||||
mLoadCompletedEventListeners,
|
|
||||||
wrapper);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// nsDOMOfflineLoadStatusList::nsIDOMLoadStatusList
|
|
||||||
//
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatusList::GetLength(PRUint32 *aLength)
|
|
||||||
{
|
|
||||||
nsresult rv = Init();
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
*aLength = mItems.Count();
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatusList::Item(PRUint32 aItem, nsIDOMLoadStatus **aStatus)
|
|
||||||
{
|
|
||||||
nsresult rv = Init();
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
if ((PRInt32)aItem >= mItems.Count()) return NS_ERROR_DOM_INDEX_SIZE_ERR;
|
|
||||||
|
|
||||||
NS_ADDREF(*aStatus = mItems[aItem]);
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// nsDOMOfflineLoadStatusList::nsIDOMEventTarget
|
|
||||||
//
|
|
||||||
|
|
||||||
static nsIScriptContext *
|
|
||||||
GetCurrentContext()
|
|
||||||
{
|
|
||||||
// Get JSContext from stack.
|
|
||||||
nsCOMPtr<nsIJSContextStack> stack =
|
|
||||||
do_GetService("@mozilla.org/js/xpc/ContextStack;1");
|
|
||||||
|
|
||||||
if (!stack) {
|
|
||||||
return nsnull;
|
|
||||||
}
|
|
||||||
|
|
||||||
JSContext *cx;
|
|
||||||
|
|
||||||
if (NS_FAILED(stack->Peek(&cx)) || !cx) {
|
|
||||||
return nsnull;
|
|
||||||
}
|
|
||||||
|
|
||||||
return GetScriptContextFromJSContext(cx);
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatusList::AddEventListener(const nsAString& aType,
|
|
||||||
nsIDOMEventListener *aListener,
|
|
||||||
PRBool aUseCapture)
|
|
||||||
{
|
|
||||||
nsresult rv = Init();
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
NS_ENSURE_ARG(aListener);
|
|
||||||
|
|
||||||
nsCOMArray<nsIDOMEventListener> *array;
|
|
||||||
|
|
||||||
#define IMPL_ADD_LISTENER(_type, _member) \
|
|
||||||
if (aType.EqualsLiteral(_type)) { \
|
|
||||||
array = &(_member); \
|
|
||||||
} else
|
|
||||||
|
|
||||||
IMPL_ADD_LISTENER(LOADREQUESTED_STR, mLoadRequestedEventListeners)
|
|
||||||
IMPL_ADD_LISTENER(LOADCOMPLETED_STR, mLoadCompletedEventListeners)
|
|
||||||
{
|
|
||||||
return NS_ERROR_INVALID_ARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
array->AppendObject(aListener);
|
|
||||||
mScriptContext = GetCurrentContext();
|
|
||||||
#undef IMPL_ADD_LISTENER
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatusList::RemoveEventListener(const nsAString &aType,
|
|
||||||
nsIDOMEventListener *aListener,
|
|
||||||
PRBool aUseCapture)
|
|
||||||
{
|
|
||||||
nsresult rv = Init();
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
NS_ENSURE_ARG(aListener);
|
|
||||||
|
|
||||||
nsCOMArray<nsIDOMEventListener> *array;
|
|
||||||
|
|
||||||
#define IMPL_REMOVE_LISTENER(_type, _member) \
|
|
||||||
if (aType.EqualsLiteral(_type)) { \
|
|
||||||
array = &(_member); \
|
|
||||||
} else
|
|
||||||
|
|
||||||
IMPL_REMOVE_LISTENER(LOADREQUESTED_STR, mLoadRequestedEventListeners)
|
|
||||||
IMPL_REMOVE_LISTENER(LOADCOMPLETED_STR, mLoadCompletedEventListeners)
|
|
||||||
{
|
|
||||||
return NS_ERROR_INVALID_ARG;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Allow a caller to remove O(N^2) behavior by removing end-to-start.
|
|
||||||
for (PRUint32 i = array->Count() - 1; i != PRUint32(-1); --i) {
|
|
||||||
if (array->ObjectAt(i) == aListener) {
|
|
||||||
array->RemoveObjectAt(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef IMPL_ADD_LISTENER
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatusList::DispatchEvent(nsIDOMEvent *evt, PRBool *_retval)
|
|
||||||
{
|
|
||||||
// Ignored
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
nsDOMOfflineLoadStatusList::NotifyEventListeners(const nsCOMArray<nsIDOMEventListener>& aListeners,
|
|
||||||
nsIDOMEvent* aEvent)
|
|
||||||
{
|
|
||||||
// XXXbz wouldn't it be easier to just have an actual nsEventListenerManager
|
|
||||||
// to work with or something? I feel like we're duplicating code here...
|
|
||||||
//
|
|
||||||
// (and this was duplicated from XMLHttpRequest)
|
|
||||||
if (!aEvent)
|
|
||||||
return;
|
|
||||||
|
|
||||||
nsCOMPtr<nsIJSContextStack> stack;
|
|
||||||
JSContext *cx = nsnull;
|
|
||||||
|
|
||||||
if (mScriptContext) {
|
|
||||||
stack = do_GetService("@mozilla.org/js/xpc/ContextStack;1");
|
|
||||||
|
|
||||||
if (stack) {
|
|
||||||
cx = (JSContext *)mScriptContext->GetNativeContext();
|
|
||||||
|
|
||||||
if (cx) {
|
|
||||||
stack->Push(cx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PRInt32 count = aListeners.Count();
|
|
||||||
for (PRInt32 index = 0; index < count; ++index) {
|
|
||||||
nsIDOMEventListener* listener = aListeners[index];
|
|
||||||
|
|
||||||
if (listener) {
|
|
||||||
listener->HandleEvent(aEvent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cx) {
|
|
||||||
stack->Pop(&cx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
nsDOMOfflineLoadStatusList::SendLoadEvent(const nsAString &aEventName,
|
|
||||||
const nsCOMArray<nsIDOMEventListener> &aListeners,
|
|
||||||
nsIDOMLoadStatus *aStatus)
|
|
||||||
{
|
|
||||||
NS_ENSURE_ARG(aStatus);
|
|
||||||
|
|
||||||
if (aListeners.Count() == 0) return NS_OK;
|
|
||||||
|
|
||||||
nsRefPtr<nsDOMLoadStatusEvent> event = new nsDOMLoadStatusEvent(aEventName,
|
|
||||||
aStatus);
|
|
||||||
if (!event) return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
|
|
||||||
nsresult rv = event->Init();
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
NotifyEventListeners(aListeners,
|
|
||||||
static_cast<nsIDOMLoadStatusEvent*>(event));
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// nsDOMLoadStatusList::nsIObserver
|
|
||||||
//
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMOfflineLoadStatusList::Observe(nsISupports *aSubject,
|
|
||||||
const char *aTopic,
|
|
||||||
const PRUnichar *aData)
|
|
||||||
{
|
|
||||||
if (!strcmp(aTopic, "offline-cache-update-added")) {
|
|
||||||
nsCOMPtr<nsIOfflineCacheUpdate> update = do_QueryInterface(aSubject);
|
|
||||||
if (update) {
|
|
||||||
UpdateAdded(update);
|
|
||||||
}
|
|
||||||
} else if (!strcmp(aTopic, "offline-cache-update-completed")) {
|
|
||||||
nsCOMPtr<nsIOfflineCacheUpdate> update = do_QueryInterface(aSubject);
|
|
||||||
if (update) {
|
|
||||||
UpdateCompleted(update);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// nsDOMLoadStatusEvent
|
|
||||||
//
|
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN(nsDOMLoadStatusEvent)
|
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMLoadStatusEvent)
|
|
||||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(LoadStatusEvent)
|
|
||||||
NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
|
|
||||||
|
|
||||||
NS_IMPL_ADDREF_INHERITED(nsDOMLoadStatusEvent, nsDOMEvent)
|
|
||||||
NS_IMPL_RELEASE_INHERITED(nsDOMLoadStatusEvent, nsDOMEvent)
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
nsDOMLoadStatusEvent::Init()
|
|
||||||
{
|
|
||||||
nsresult rv = InitEvent(mEventName, PR_TRUE, PR_FALSE);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
// This init method is only called by native code, so set the
|
|
||||||
// trusted flag there.
|
|
||||||
SetTrusted(PR_TRUE);
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMLoadStatusEvent::InitLoadStatusEvent(const nsAString& aTypeArg,
|
|
||||||
PRBool aCanBubbleArg,
|
|
||||||
PRBool aCancelableArg,
|
|
||||||
nsIDOMLoadStatus* aStatusArg)
|
|
||||||
{
|
|
||||||
nsresult rv = InitEvent(aTypeArg, aCanBubbleArg, aCancelableArg);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
mStatus = aStatusArg;
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMLoadStatusEvent::InitLoadStatusEventNS(const nsAString& aNamespaceURIArg,
|
|
||||||
const nsAString& aTypeArg,
|
|
||||||
PRBool aCanBubbleArg,
|
|
||||||
PRBool aCancelableArg,
|
|
||||||
nsIDOMLoadStatus* aStatusArg)
|
|
||||||
{
|
|
||||||
// XXX: Figure out what to do with aNamespaceURIArg here!
|
|
||||||
nsresult rv = InitEvent(aTypeArg, aCanBubbleArg, aCancelableArg);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
mStatus = aStatusArg;
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
nsDOMLoadStatusEvent::GetStatus(nsIDOMLoadStatus **aStatus)
|
|
||||||
{
|
|
||||||
NS_ADDREF(*aStatus = mStatus);
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
|
@ -102,6 +102,7 @@ EXPORTS = \
|
||||||
nsICSSParser.h \
|
nsICSSParser.h \
|
||||||
nsICSSPseudoComparator.h \
|
nsICSSPseudoComparator.h \
|
||||||
nsICSSRule.h \
|
nsICSSRule.h \
|
||||||
|
nsICSSRuleList.h \
|
||||||
nsICSSStyleRule.h \
|
nsICSSStyleRule.h \
|
||||||
nsICSSStyleRuleDOMWrapper.h \
|
nsICSSStyleRuleDOMWrapper.h \
|
||||||
nsICSSStyleSheet.h \
|
nsICSSStyleSheet.h \
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
#include "nsIDOMCSSStyleDeclaration.h"
|
#include "nsIDOMCSSStyleDeclaration.h"
|
||||||
#include "nsIMediaList.h"
|
#include "nsIMediaList.h"
|
||||||
#include "nsIDOMMediaList.h"
|
#include "nsIDOMMediaList.h"
|
||||||
#include "nsIDOMCSSRuleList.h"
|
#include "nsICSSRuleList.h"
|
||||||
#include "nsIDOMStyleSheet.h"
|
#include "nsIDOMStyleSheet.h"
|
||||||
#include "nsIDocument.h"
|
#include "nsIDocument.h"
|
||||||
#include "nsPresContext.h"
|
#include "nsPresContext.h"
|
||||||
|
@ -76,19 +76,18 @@
|
||||||
NS_IMETHODIMP _class::GetStyleSheet(nsIStyleSheet*& aSheet) const { return super::GetStyleSheet(aSheet); } \
|
NS_IMETHODIMP _class::GetStyleSheet(nsIStyleSheet*& aSheet) const { return super::GetStyleSheet(aSheet); } \
|
||||||
NS_IMETHODIMP _class::SetStyleSheet(nsICSSStyleSheet* aSheet) { return super::SetStyleSheet(aSheet); } \
|
NS_IMETHODIMP _class::SetStyleSheet(nsICSSStyleSheet* aSheet) { return super::SetStyleSheet(aSheet); } \
|
||||||
NS_IMETHODIMP _class::SetParentRule(nsICSSGroupRule* aRule) { return super::SetParentRule(aRule); } \
|
NS_IMETHODIMP _class::SetParentRule(nsICSSGroupRule* aRule) { return super::SetParentRule(aRule); } \
|
||||||
NS_IMETHODIMP _class::GetDOMRule(nsIDOMCSSRule** aDOMRule) { return CallQueryInterface(this, aDOMRule); } \
|
nsIDOMCSSRule* _class::GetDOMRuleWeak(nsresult *aResult) { *aResult = NS_OK; return this; } \
|
||||||
NS_IMETHODIMP _class::MapRuleInfoInto(nsRuleData* aRuleData) { return NS_OK; }
|
NS_IMETHODIMP _class::MapRuleInfoInto(nsRuleData* aRuleData) { return NS_OK; }
|
||||||
|
|
||||||
#define IMPL_STYLE_RULE_INHERIT2(_class, super) \
|
#define IMPL_STYLE_RULE_INHERIT2(_class, super) \
|
||||||
NS_IMETHODIMP _class::GetStyleSheet(nsIStyleSheet*& aSheet) const { return super::GetStyleSheet(aSheet); } \
|
NS_IMETHODIMP _class::GetStyleSheet(nsIStyleSheet*& aSheet) const { return super::GetStyleSheet(aSheet); } \
|
||||||
NS_IMETHODIMP _class::SetParentRule(nsICSSGroupRule* aRule) { return super::SetParentRule(aRule); } \
|
NS_IMETHODIMP _class::SetParentRule(nsICSSGroupRule* aRule) { return super::SetParentRule(aRule); } \
|
||||||
NS_IMETHODIMP _class::GetDOMRule(nsIDOMCSSRule** aDOMRule) { return CallQueryInterface(this, aDOMRule); } \
|
|
||||||
NS_IMETHODIMP _class::MapRuleInfoInto(nsRuleData* aRuleData) { return NS_OK; }
|
NS_IMETHODIMP _class::MapRuleInfoInto(nsRuleData* aRuleData) { return NS_OK; }
|
||||||
|
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Style Rule List for group rules
|
// Style Rule List for group rules
|
||||||
//
|
//
|
||||||
class CSSGroupRuleRuleListImpl : public nsIDOMCSSRuleList
|
class CSSGroupRuleRuleListImpl : public nsICSSRuleList
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CSSGroupRuleRuleListImpl(nsICSSGroupRule *aGroupRule);
|
CSSGroupRuleRuleListImpl(nsICSSGroupRule *aGroupRule);
|
||||||
|
@ -97,6 +96,8 @@ public:
|
||||||
|
|
||||||
NS_DECL_NSIDOMCSSRULELIST
|
NS_DECL_NSIDOMCSSRULELIST
|
||||||
|
|
||||||
|
virtual nsIDOMCSSRule* GetItemAt(PRUint32 aIndex, nsresult* aResult);
|
||||||
|
|
||||||
void DropReference() { mGroupRule = nsnull; }
|
void DropReference() { mGroupRule = nsnull; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -119,6 +120,7 @@ CSSGroupRuleRuleListImpl::~CSSGroupRuleRuleListImpl()
|
||||||
|
|
||||||
// QueryInterface implementation for CSSGroupRuleRuleList
|
// QueryInterface implementation for CSSGroupRuleRuleList
|
||||||
NS_INTERFACE_MAP_BEGIN(CSSGroupRuleRuleListImpl)
|
NS_INTERFACE_MAP_BEGIN(CSSGroupRuleRuleListImpl)
|
||||||
|
NS_INTERFACE_MAP_ENTRY(nsICSSRuleList)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRuleList)
|
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRuleList)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||||
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(CSSGroupRuleRuleList)
|
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(CSSGroupRuleRuleList)
|
||||||
|
@ -142,24 +144,39 @@ CSSGroupRuleRuleListImpl::GetLength(PRUint32* aLength)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
nsIDOMCSSRule*
|
||||||
CSSGroupRuleRuleListImpl::Item(PRUint32 aIndex, nsIDOMCSSRule** aReturn)
|
CSSGroupRuleRuleListImpl::GetItemAt(PRUint32 aIndex, nsresult* aResult)
|
||||||
{
|
{
|
||||||
nsresult result = NS_OK;
|
nsresult result = NS_OK;
|
||||||
|
|
||||||
*aReturn = nsnull;
|
|
||||||
if (mGroupRule) {
|
if (mGroupRule) {
|
||||||
nsCOMPtr<nsICSSRule> rule;
|
nsCOMPtr<nsICSSRule> rule;
|
||||||
|
|
||||||
result = mGroupRule->GetStyleRuleAt(aIndex, *getter_AddRefs(rule));
|
result = mGroupRule->GetStyleRuleAt(aIndex, *getter_AddRefs(rule));
|
||||||
if (rule) {
|
if (rule) {
|
||||||
result = rule->GetDOMRule(aReturn);
|
return rule->GetDOMRuleWeak(aResult);
|
||||||
} else if (result == NS_ERROR_ILLEGAL_VALUE) {
|
}
|
||||||
|
if (result == NS_ERROR_ILLEGAL_VALUE) {
|
||||||
result = NS_OK; // per spec: "Return Value ... null if ... not a valid index."
|
result = NS_OK; // per spec: "Return Value ... null if ... not a valid index."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
*aResult = result;
|
||||||
|
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
CSSGroupRuleRuleListImpl::Item(PRUint32 aIndex, nsIDOMCSSRule** aReturn)
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
nsIDOMCSSRule* rule = GetItemAt(aIndex, &rv);
|
||||||
|
if (!rule) {
|
||||||
|
*aReturn = nsnull;
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CallQueryInterface(rule, aReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------
|
// -------------------------------------------
|
||||||
|
|
|
@ -56,13 +56,16 @@
|
||||||
class CSSGroupRuleRuleListImpl;
|
class CSSGroupRuleRuleListImpl;
|
||||||
class nsMediaList;
|
class nsMediaList;
|
||||||
|
|
||||||
#define DECL_STYLE_RULE_INHERIT \
|
#define DECL_STYLE_RULE_INHERIT_NO_DOMRULE \
|
||||||
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const; \
|
NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const; \
|
||||||
NS_IMETHOD SetStyleSheet(nsICSSStyleSheet* aSheet); \
|
NS_IMETHOD SetStyleSheet(nsICSSStyleSheet* aSheet); \
|
||||||
NS_IMETHOD SetParentRule(nsICSSGroupRule* aRule); \
|
NS_IMETHOD SetParentRule(nsICSSGroupRule* aRule); \
|
||||||
NS_IMETHOD GetDOMRule(nsIDOMCSSRule** aDOMRule); \
|
|
||||||
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
|
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
|
||||||
|
|
||||||
|
#define DECL_STYLE_RULE_INHERIT \
|
||||||
|
DECL_STYLE_RULE_INHERIT_NO_DOMRULE \
|
||||||
|
nsIDOMCSSRule* GetDOMRuleWeak(nsresult* aResult);
|
||||||
|
|
||||||
// inherits from nsCSSRule and also implements methods on nsICSSGroupRule
|
// inherits from nsCSSRule and also implements methods on nsICSSGroupRule
|
||||||
// so they can be shared between nsCSSMediaRule and nsCSSDocumentRule
|
// so they can be shared between nsCSSMediaRule and nsCSSDocumentRule
|
||||||
class nsCSSGroupRule : public nsCSSRule, public nsICSSGroupRule
|
class nsCSSGroupRule : public nsCSSRule, public nsICSSGroupRule
|
||||||
|
@ -73,7 +76,7 @@ protected:
|
||||||
~nsCSSGroupRule();
|
~nsCSSGroupRule();
|
||||||
|
|
||||||
// implement part of nsIStyleRule and nsICSSRule
|
// implement part of nsIStyleRule and nsICSSRule
|
||||||
DECL_STYLE_RULE_INHERIT
|
DECL_STYLE_RULE_INHERIT_NO_DOMRULE
|
||||||
|
|
||||||
// to help implement nsIStyleRule
|
// to help implement nsIStyleRule
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -128,6 +131,11 @@ public:
|
||||||
NS_IMETHOD SetStyleSheet(nsICSSStyleSheet* aSheet); //override nsCSSGroupRule
|
NS_IMETHOD SetStyleSheet(nsICSSStyleSheet* aSheet); //override nsCSSGroupRule
|
||||||
NS_IMETHOD GetType(PRInt32& aType) const;
|
NS_IMETHOD GetType(PRInt32& aType) const;
|
||||||
NS_IMETHOD Clone(nsICSSRule*& aClone) const;
|
NS_IMETHOD Clone(nsICSSRule*& aClone) const;
|
||||||
|
nsIDOMCSSRule* GetDOMRuleWeak(nsresult *aResult)
|
||||||
|
{
|
||||||
|
*aResult = NS_OK;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// nsIDOMCSSRule interface
|
// nsIDOMCSSRule interface
|
||||||
NS_DECL_NSIDOMCSSRULE
|
NS_DECL_NSIDOMCSSRULE
|
||||||
|
@ -164,6 +172,11 @@ public:
|
||||||
// nsICSSRule methods
|
// nsICSSRule methods
|
||||||
NS_IMETHOD GetType(PRInt32& aType) const;
|
NS_IMETHOD GetType(PRInt32& aType) const;
|
||||||
NS_IMETHOD Clone(nsICSSRule*& aClone) const;
|
NS_IMETHOD Clone(nsICSSRule*& aClone) const;
|
||||||
|
nsIDOMCSSRule* GetDOMRuleWeak(nsresult *aResult)
|
||||||
|
{
|
||||||
|
*aResult = NS_OK;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// nsIDOMCSSRule interface
|
// nsIDOMCSSRule interface
|
||||||
NS_DECL_NSIDOMCSSRULE
|
NS_DECL_NSIDOMCSSRULE
|
||||||
|
|
|
@ -1187,7 +1187,7 @@ public:
|
||||||
NS_IMETHOD GetType(PRInt32& aType) const;
|
NS_IMETHOD GetType(PRInt32& aType) const;
|
||||||
NS_IMETHOD Clone(nsICSSRule*& aClone) const;
|
NS_IMETHOD Clone(nsICSSRule*& aClone) const;
|
||||||
|
|
||||||
NS_IMETHOD GetDOMRule(nsIDOMCSSRule** aDOMRule);
|
nsIDOMCSSRule* GetDOMRuleWeak(nsresult* aResult);
|
||||||
|
|
||||||
virtual already_AddRefed<nsICSSStyleRule>
|
virtual already_AddRefed<nsICSSStyleRule>
|
||||||
DeclarationChanged(PRBool aHandleContainer);
|
DeclarationChanged(PRBool aHandleContainer);
|
||||||
|
@ -1376,26 +1376,24 @@ CSSStyleRuleImpl::Clone(nsICSSRule*& aClone) const
|
||||||
return CallQueryInterface(clone, &aClone);
|
return CallQueryInterface(clone, &aClone);
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
nsIDOMCSSRule*
|
||||||
CSSStyleRuleImpl::GetDOMRule(nsIDOMCSSRule** aDOMRule)
|
CSSStyleRuleImpl::GetDOMRuleWeak(nsresult *aResult)
|
||||||
{
|
{
|
||||||
|
*aResult = NS_OK;
|
||||||
if (!mSheet) {
|
if (!mSheet) {
|
||||||
// inline style rules aren't supposed to have a DOM rule object, only
|
// inline style rules aren't supposed to have a DOM rule object, only
|
||||||
// a declaration.
|
// a declaration.
|
||||||
*aDOMRule = nsnull;
|
return nsnull;
|
||||||
return NS_OK;
|
|
||||||
}
|
}
|
||||||
if (!mDOMRule) {
|
if (!mDOMRule) {
|
||||||
mDOMRule = new DOMCSSStyleRuleImpl(this);
|
mDOMRule = new DOMCSSStyleRuleImpl(this);
|
||||||
if (!mDOMRule) {
|
if (!mDOMRule) {
|
||||||
*aDOMRule = nsnull;
|
*aResult = NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return nsnull;
|
||||||
}
|
}
|
||||||
NS_ADDREF(mDOMRule);
|
NS_ADDREF(mDOMRule);
|
||||||
}
|
}
|
||||||
*aDOMRule = mDOMRule;
|
return mDOMRule;
|
||||||
NS_ADDREF(*aDOMRule);
|
|
||||||
return NS_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* virtual */ already_AddRefed<nsICSSStyleRule>
|
/* virtual */ already_AddRefed<nsICSSStyleRule>
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
#include "nsIDOMCSSStyleSheet.h"
|
#include "nsIDOMCSSStyleSheet.h"
|
||||||
#include "nsIDOMCSSRule.h"
|
#include "nsIDOMCSSRule.h"
|
||||||
#include "nsIDOMCSSImportRule.h"
|
#include "nsIDOMCSSImportRule.h"
|
||||||
#include "nsIDOMCSSRuleList.h"
|
#include "nsICSSRuleList.h"
|
||||||
#include "nsIDOMMediaList.h"
|
#include "nsIDOMMediaList.h"
|
||||||
#include "nsIDOMNode.h"
|
#include "nsIDOMNode.h"
|
||||||
#include "nsDOMError.h"
|
#include "nsDOMError.h"
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Style Rule List for the DOM
|
// Style Rule List for the DOM
|
||||||
//
|
//
|
||||||
class CSSRuleListImpl : public nsIDOMCSSRuleList
|
class CSSRuleListImpl : public nsICSSRuleList
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CSSRuleListImpl(nsCSSStyleSheet *aStyleSheet);
|
CSSRuleListImpl(nsCSSStyleSheet *aStyleSheet);
|
||||||
|
@ -92,6 +92,8 @@ public:
|
||||||
NS_IMETHOD GetLength(PRUint32* aLength);
|
NS_IMETHOD GetLength(PRUint32* aLength);
|
||||||
NS_IMETHOD Item(PRUint32 aIndex, nsIDOMCSSRule** aReturn);
|
NS_IMETHOD Item(PRUint32 aIndex, nsIDOMCSSRule** aReturn);
|
||||||
|
|
||||||
|
virtual nsIDOMCSSRule* GetItemAt(PRUint32 aIndex, nsresult* aResult);
|
||||||
|
|
||||||
void DropReference() { mStyleSheet = nsnull; }
|
void DropReference() { mStyleSheet = nsnull; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -116,6 +118,7 @@ CSSRuleListImpl::~CSSRuleListImpl()
|
||||||
|
|
||||||
// QueryInterface implementation for CSSRuleList
|
// QueryInterface implementation for CSSRuleList
|
||||||
NS_INTERFACE_MAP_BEGIN(CSSRuleListImpl)
|
NS_INTERFACE_MAP_BEGIN(CSSRuleListImpl)
|
||||||
|
NS_INTERFACE_MAP_ENTRY(nsICSSRuleList)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRuleList)
|
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRuleList)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||||
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(CSSRuleList)
|
NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(CSSRuleList)
|
||||||
|
@ -141,12 +144,11 @@ CSSRuleListImpl::GetLength(PRUint32* aLength)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
nsIDOMCSSRule*
|
||||||
CSSRuleListImpl::Item(PRUint32 aIndex, nsIDOMCSSRule** aReturn)
|
CSSRuleListImpl::GetItemAt(PRUint32 aIndex, nsresult* aResult)
|
||||||
{
|
{
|
||||||
nsresult result = NS_OK;
|
nsresult result = NS_OK;
|
||||||
|
|
||||||
*aReturn = nsnull;
|
|
||||||
if (mStyleSheet) {
|
if (mStyleSheet) {
|
||||||
result = mStyleSheet->EnsureUniqueInner(); // needed to ensure rules have correct parent
|
result = mStyleSheet->EnsureUniqueInner(); // needed to ensure rules have correct parent
|
||||||
if (NS_SUCCEEDED(result)) {
|
if (NS_SUCCEEDED(result)) {
|
||||||
|
@ -154,15 +156,31 @@ CSSRuleListImpl::Item(PRUint32 aIndex, nsIDOMCSSRule** aReturn)
|
||||||
|
|
||||||
result = mStyleSheet->GetStyleRuleAt(aIndex, *getter_AddRefs(rule));
|
result = mStyleSheet->GetStyleRuleAt(aIndex, *getter_AddRefs(rule));
|
||||||
if (rule) {
|
if (rule) {
|
||||||
result = rule->GetDOMRule(aReturn);
|
|
||||||
mRulesAccessed = PR_TRUE; // signal to never share rules again
|
mRulesAccessed = PR_TRUE; // signal to never share rules again
|
||||||
} else if (result == NS_ERROR_ILLEGAL_VALUE) {
|
return rule->GetDOMRuleWeak(aResult);
|
||||||
|
}
|
||||||
|
if (result == NS_ERROR_ILLEGAL_VALUE) {
|
||||||
result = NS_OK; // per spec: "Return Value ... null if ... not a valid index."
|
result = NS_OK; // per spec: "Return Value ... null if ... not a valid index."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
*aResult = result;
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
CSSRuleListImpl::Item(PRUint32 aIndex, nsIDOMCSSRule** aReturn)
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
nsIDOMCSSRule* rule = GetItemAt(aIndex, &rv);
|
||||||
|
if (!rule) {
|
||||||
|
*aReturn = nsnull;
|
||||||
|
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CallQueryInterface(rule, aReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Numeric>
|
template <class Numeric>
|
||||||
|
|
|
@ -84,8 +84,7 @@ nsDOMCSSValueList::Item(PRUint32 aIndex, nsIDOMCSSValue **aReturn)
|
||||||
{
|
{
|
||||||
NS_ENSURE_ARG_POINTER(aReturn);
|
NS_ENSURE_ARG_POINTER(aReturn);
|
||||||
|
|
||||||
*aReturn = mCSSValues[aIndex];
|
NS_IF_ADDREF(*aReturn = GetItemAt(aIndex));
|
||||||
NS_IF_ADDREF(*aReturn);
|
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,6 +68,28 @@ public:
|
||||||
*/
|
*/
|
||||||
PRBool AppendCSSValue(nsIDOMCSSValue* aValue);
|
PRBool AppendCSSValue(nsIDOMCSSValue* aValue);
|
||||||
|
|
||||||
|
nsIDOMCSSValue* GetItemAt(PRUint32 aIndex)
|
||||||
|
{
|
||||||
|
return mCSSValues.SafeObjectAt(aIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static nsDOMCSSValueList* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMCSSValueList> list_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsIDOMCSSValueList pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(list_qi == static_cast<nsIDOMCSSValueList*>(aSupports),
|
||||||
|
"Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return static_cast<nsDOMCSSValueList*>(aSupports);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PRPackedBool mCommaDelimited; // some value lists use a comma
|
PRPackedBool mCommaDelimited; // some value lists use a comma
|
||||||
// as the delimiter, some just use
|
// as the delimiter, some just use
|
||||||
|
|
|
@ -41,15 +41,15 @@
|
||||||
#define nsICSSRule_h___
|
#define nsICSSRule_h___
|
||||||
|
|
||||||
#include "nsIStyleRule.h"
|
#include "nsIStyleRule.h"
|
||||||
|
#include "nsIDOMCSSRule.h"
|
||||||
|
|
||||||
class nsICSSStyleSheet;
|
class nsICSSStyleSheet;
|
||||||
class nsICSSGroupRule;
|
class nsICSSGroupRule;
|
||||||
class nsIDOMCSSRule;
|
|
||||||
class nsAString;
|
class nsAString;
|
||||||
|
|
||||||
// IID for the nsICSSRule interface {b9791e20-1a04-11d3-805a-006008159b5a}
|
// IID for the nsICSSRule interface {e775eac0-b022-462c-b1f9-221c01aa2988}
|
||||||
#define NS_ICSS_RULE_IID \
|
#define NS_ICSS_RULE_IID \
|
||||||
{0xb9791e20, 0x1a04, 0x11d3, {0x80, 0x5a, 0x00, 0x60, 0x08, 0x15, 0x9b, 0x5a}}
|
{0xe775eac0, 0xb022, 0x462c, {0xb1, 0xf9, 0x22, 0x1c, 0x01, 0xaa, 0x29, 0x88}}
|
||||||
|
|
||||||
// inheriting from nsIStyleRule is only for style rules, not other rule types
|
// inheriting from nsIStyleRule is only for style rules, not other rule types
|
||||||
class nsICSSRule : public nsIStyleRule {
|
class nsICSSRule : public nsIStyleRule {
|
||||||
|
@ -77,7 +77,13 @@ public:
|
||||||
|
|
||||||
// Note that this returns null for inline style rules since they aren't
|
// Note that this returns null for inline style rules since they aren't
|
||||||
// supposed to have a DOM rule representation (and our code wouldn't work).
|
// supposed to have a DOM rule representation (and our code wouldn't work).
|
||||||
NS_IMETHOD GetDOMRule(nsIDOMCSSRule** aDOMRule) = 0;
|
nsresult GetDOMRule(nsIDOMCSSRule** aDOMRule)
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
NS_IF_ADDREF(*aDOMRule = GetDOMRuleWeak(&rv));
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
virtual nsIDOMCSSRule* GetDOMRuleWeak(nsresult* aResult) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
NS_DEFINE_STATIC_IID_ACCESSOR(nsICSSRule, NS_ICSS_RULE_IID)
|
NS_DEFINE_STATIC_IID_ACCESSOR(nsICSSRule, NS_ICSS_RULE_IID)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* ***** BEGIN LICENSE BLOCK *****
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
*
|
*
|
||||||
|
@ -12,15 +12,14 @@
|
||||||
* for the specific language governing rights and limitations under the
|
* for the specific language governing rights and limitations under the
|
||||||
* License.
|
* License.
|
||||||
*
|
*
|
||||||
* The Original Code is mozilla.org code.
|
* The Original Code is Mozilla layout code.
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is
|
* The Initial Developer of the Original Code is Mozilla Corporation.
|
||||||
* Mozilla Corporation
|
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||||
* Portions created by the Initial Developer are Copyright (C) 2007
|
|
||||||
* the Initial Developer. All Rights Reserved.
|
* the Initial Developer. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
* Dave Camp <dcamp@mozilla.com>
|
* Peter Van der Beken <peterv@propagandism.org> (Original Author)
|
||||||
*
|
*
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
@ -36,13 +35,24 @@
|
||||||
*
|
*
|
||||||
* ***** END LICENSE BLOCK ***** */
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
#include "domstubs.idl"
|
#ifndef nsICSSRuleList_h___
|
||||||
|
#define nsICSSRuleList_h___
|
||||||
|
|
||||||
interface nsIDOMLoadStatus;
|
#include "nsIDOMCSSRuleList.h"
|
||||||
|
|
||||||
[scriptable, uuid(d58bc0cf-e35c-4d22-9e21-9ada8fc4203a)]
|
// IID for the nsICSSRuleList interface
|
||||||
interface nsIDOMLoadStatusList : nsISupports
|
#define NS_ICSSRULELIST_IID \
|
||||||
|
{ 0x7ae746fd, 0x259a, 0x4a69, \
|
||||||
|
{ 0x97, 0x2d, 0x2c, 0x10, 0xf7, 0xb0, 0x04, 0xa1 } }
|
||||||
|
|
||||||
|
class nsICSSRuleList : public nsIDOMCSSRuleList
|
||||||
{
|
{
|
||||||
readonly attribute unsigned long length;
|
public:
|
||||||
nsIDOMLoadStatus item(in unsigned long index);
|
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICSSRULELIST_IID)
|
||||||
|
|
||||||
|
virtual nsIDOMCSSRule* GetItemAt(PRUint32 aIndex, nsresult* aResult) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
NS_DEFINE_STATIC_IID_ACCESSOR(nsICSSRuleList, NS_ICSSRULELIST_IID)
|
||||||
|
|
||||||
|
#endif /* nsICSSRuleList_h___ */
|
|
@ -535,17 +535,23 @@ nsTreeColumns::GetNamedColumn(const nsAString& aId, nsITreeColumn** _retval)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsITreeColumn*
|
||||||
|
nsTreeColumns::GetColumnAt(PRInt32 aIndex)
|
||||||
|
{
|
||||||
|
EnsureColumns();
|
||||||
|
for (nsTreeColumn* currCol = mFirstColumn; currCol; currCol = currCol->GetNext()) {
|
||||||
|
if (currCol->GetIndex() == aIndex) {
|
||||||
|
return currCol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsTreeColumns::GetColumnAt(PRInt32 aIndex, nsITreeColumn** _retval)
|
nsTreeColumns::GetColumnAt(PRInt32 aIndex, nsITreeColumn** _retval)
|
||||||
{
|
{
|
||||||
EnsureColumns();
|
EnsureColumns();
|
||||||
*_retval = nsnull;
|
NS_IF_ADDREF(*_retval = GetColumnAt(aIndex));
|
||||||
for (nsTreeColumn* currCol = mFirstColumn; currCol; currCol = currCol->GetNext()) {
|
|
||||||
if (currCol->GetIndex() == aIndex) {
|
|
||||||
NS_ADDREF(*_retval = currCol);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,25 @@ public:
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
NS_DECL_NSITREECOLUMNS
|
NS_DECL_NSITREECOLUMNS
|
||||||
|
|
||||||
|
nsITreeColumn* GetColumnAt(PRInt32 aIndex);
|
||||||
|
|
||||||
|
static nsTreeColumns* FromSupports(nsISupports* aSupports)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsITreeColumns> columns_qi = do_QueryInterface(aSupports);
|
||||||
|
|
||||||
|
// If this assertion fires the QI implementation for the object in
|
||||||
|
// question doesn't use the nsITreeColumns pointer as the nsISupports
|
||||||
|
// pointer. That must be fixed, or we'll crash...
|
||||||
|
NS_ASSERTION(columns_qi == static_cast<nsITreeColumns*>(aSupports),
|
||||||
|
"Uh, fix QI!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return static_cast<nsTreeColumns*>(aSupports);
|
||||||
|
}
|
||||||
|
|
||||||
friend class nsTreeBodyFrame;
|
friend class nsTreeBodyFrame;
|
||||||
protected:
|
protected:
|
||||||
void SetTree(nsITreeBoxObject* aTree) { mTree = aTree; }
|
void SetTree(nsITreeBoxObject* aTree) { mTree = aTree; }
|
||||||
|
|
Загрузка…
Ссылка в новой задаче