Bug 484775 - DocumentFragments and Attribute nodes should expose nsIDOMEventTarget to JS, r+sr=peterv

This commit is contained in:
Olli Pettay
2009-05-07 16:59:51 +03:00
parent e8ebf2853b
commit 9a0f245f6f
9 changed files with 111 additions and 46 deletions

View File

@@ -1536,8 +1536,8 @@ nsDOMEventRTTearoff::mCachedEventTearoff[NS_EVENT_TEAROFF_CACHE_SIZE];
PRUint32 nsDOMEventRTTearoff::mCachedEventTearoffCount = 0;
nsDOMEventRTTearoff::nsDOMEventRTTearoff(nsIContent *aContent)
: mContent(aContent)
nsDOMEventRTTearoff::nsDOMEventRTTearoff(nsINode *aNode)
: mNode(aNode)
{
}
@@ -1545,13 +1545,13 @@ nsDOMEventRTTearoff::~nsDOMEventRTTearoff()
{
}
NS_IMPL_CYCLE_COLLECTION_1(nsDOMEventRTTearoff, mContent)
NS_IMPL_CYCLE_COLLECTION_1(nsDOMEventRTTearoff, mNode)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMEventRTTearoff)
NS_INTERFACE_MAP_ENTRY(nsIDOMEventTarget)
NS_INTERFACE_MAP_ENTRY(nsIDOM3EventTarget)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSEventTarget)
NS_INTERFACE_MAP_END_AGGREGATED(mContent)
NS_INTERFACE_MAP_END_AGGREGATED(mNode)
NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsDOMEventRTTearoff,
nsIDOMEventTarget)
@@ -1560,7 +1560,7 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS_WITH_DESTROY(nsDOMEventRTTearoff,
LastRelease())
nsDOMEventRTTearoff *
nsDOMEventRTTearoff::Create(nsIContent *aContent)
nsDOMEventRTTearoff::Create(nsINode *aNode)
{
if (mCachedEventTearoffCount) {
// We have cached unused instances of this class, return a cached
@@ -1569,13 +1569,13 @@ nsDOMEventRTTearoff::Create(nsIContent *aContent)
mCachedEventTearoff[--mCachedEventTearoffCount];
// Set the back pointer to the content object
tearoff->mContent = aContent;
tearoff->mNode = aNode;
return tearoff;
}
// The cache is empty, this means we haveto create a new instance.
return new nsDOMEventRTTearoff(aContent);
return new nsDOMEventRTTearoff(aNode);
}
// static
@@ -1600,8 +1600,8 @@ nsDOMEventRTTearoff::LastRelease()
// could result in code that grabs a tearoff from the cache and we don't
// want to get reused while still being torn down.
// See bug 330526.
nsCOMPtr<nsIContent> kungFuDeathGrip;
kungFuDeathGrip.swap(mContent);
nsCOMPtr<nsINode> kungFuDeathGrip;
kungFuDeathGrip.swap(mNode);
// The refcount balancing and destructor re-entrancy protection
// code in Release() sets mRefCnt to 1 so we have to set it to 0
@@ -1619,7 +1619,7 @@ nsDOMEventRTTearoff::GetDOM3EventTarget(nsIDOM3EventTarget **aTarget)
{
nsCOMPtr<nsIEventListenerManager> listener_manager;
nsresult rv =
mContent->GetListenerManager(PR_TRUE, getter_AddRefs(listener_manager));
mNode->GetListenerManager(PR_TRUE, getter_AddRefs(listener_manager));
NS_ENSURE_SUCCESS(rv, rv);
return CallQueryInterface(listener_manager, aTarget);
@@ -1628,14 +1628,14 @@ nsDOMEventRTTearoff::GetDOM3EventTarget(nsIDOM3EventTarget **aTarget)
NS_IMETHODIMP
nsDOMEventRTTearoff::GetScriptTypeID(PRUint32 *aLang)
{
*aLang = mContent->GetScriptTypeID();
return NS_OK;
*aLang = mNode->GetScriptTypeID();
return NS_OK;
}
NS_IMETHODIMP
nsDOMEventRTTearoff::SetScriptTypeID(PRUint32 aLang)
{
return mContent->SetScriptTypeID(aLang);
return mNode->SetScriptTypeID(aLang);
}
@@ -1647,7 +1647,7 @@ nsDOMEventRTTearoff::AddEventListener(const nsAString& aType,
{
return
AddEventListener(aType, aListener, useCapture,
!nsContentUtils::IsChromeDoc(mContent->GetOwnerDoc()));
!nsContentUtils::IsChromeDoc(mNode->GetOwnerDoc()));
}
NS_IMETHODIMP
@@ -1663,7 +1663,7 @@ nsDOMEventRTTearoff::DispatchEvent(nsIDOMEvent *aEvt, PRBool* _retval)
{
nsCOMPtr<nsIEventListenerManager> listener_manager;
nsresult rv =
mContent->GetListenerManager(PR_TRUE, getter_AddRefs(listener_manager));
mNode->GetListenerManager(PR_TRUE, getter_AddRefs(listener_manager));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(listener_manager);
NS_ENSURE_STATE(target);
@@ -1720,7 +1720,7 @@ nsDOMEventRTTearoff::AddEventListener(const nsAString& aType,
{
nsCOMPtr<nsIEventListenerManager> listener_manager;
nsresult rv =
mContent->GetListenerManager(PR_TRUE, getter_AddRefs(listener_manager));
mNode->GetListenerManager(PR_TRUE, getter_AddRefs(listener_manager));
NS_ENSURE_SUCCESS(rv, rv);
PRInt32 flags = aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE;
@@ -3198,7 +3198,7 @@ nsGenericElement::GetScriptTypeID() const
return (flags >> NODE_SCRIPT_TYPE_OFFSET) & 0x000F;
}
nsresult
NS_IMETHODIMP
nsGenericElement::SetScriptTypeID(PRUint32 aLang)
{
if ((aLang & 0x000F) != aLang) {