Bug 687332: Move inline event listeners on FileReader to the event listener manager. r=smaug

This commit is contained in:
Kyle Huey 2011-09-29 12:06:35 -04:00
parent e60509c0df
commit 1eecbf1d0e
7 changed files with 44 additions and 56 deletions

View File

@ -94,54 +94,52 @@ protected:
};
#define NS_DECL_EVENT_HANDLER(_event) \
protected: \
nsRefPtr<nsDOMEventListenerWrapper> mOn##_event##Listener; \
public:
public: \
NS_IMETHOD GetOn##_event(JSContext *cx, jsval *vp); \
NS_IMETHOD SetOn##_event(JSContext *cx, const jsval &vp);
#define NS_DECL_AND_IMPL_EVENT_HANDLER(_event) \
protected: \
nsRefPtr<nsDOMEventListenerWrapper> mOn##_event##Listener; \
public: \
NS_IMETHOD GetOn##_event(nsIDOMEventListener** a##_event) \
{ \
return GetInnerEventListener(mOn##_event##Listener, a##_event); \
} \
NS_IMETHOD SetOn##_event(nsIDOMEventListener* a##_event) \
{ \
return RemoveAddEventListener(NS_LITERAL_STRING(#_event), \
mOn##_event##Listener, a##_event); \
}
NS_IMPL_EVENT_HANDLER(_class, _event)
#define NS_IMPL_EVENT_HANDLER(_class, _event) \
NS_IMETHODIMP \
_class::GetOn##_event(nsIDOMEventListener** a##_event) \
_class::GetOn##_event(JSContext *cx, jsval *vp) \
{ \
return GetInnerEventListener(mOn##_event##Listener, a##_event); \
nsEventListenerManager* elm = GetListenerManager(PR_FALSE); \
if (elm) { \
elm->GetJSEventListener(nsGkAtoms::on##_event, vp); \
} else { \
*vp = JSVAL_NULL; \
} \
return NS_OK; \
} \
NS_IMETHODIMP \
_class::SetOn##_event(nsIDOMEventListener* a##_event) \
_class::SetOn##_event(JSContext *cx, const jsval &vp) \
{ \
return RemoveAddEventListener(NS_LITERAL_STRING(#_event), \
mOn##_event##Listener, a##_event); \
nsEventListenerManager* elm = GetListenerManager(PR_TRUE); \
if (!elm) { \
return NS_ERROR_OUT_OF_MEMORY; \
} \
\
JSObject *obj = GetWrapper(); \
if (!obj) { \
/* Just silently do nothing */ \
return NS_OK; \
} \
return elm->SetJSEventListenerToJsval(nsGkAtoms::on##_event, cx, obj, vp);\
}
#define NS_IMPL_FORWARD_EVENT_HANDLER(_class, _event, _baseclass) \
NS_IMETHODIMP \
_class::GetOn##_event(nsIDOMEventListener** a##_event) \
_class::GetOn##_event(JSContext *cx, jsval *vp) \
{ \
return _baseclass::GetOn##_event(a##_event); \
return _baseclass::GetOn##_event(cx, vp); \
} \
NS_IMETHODIMP \
_class::SetOn##_event(nsIDOMEventListener* a##_event) \
_class::SetOn##_event(JSContext *cx, const jsval &vp) \
{ \
return _baseclass::SetOn##_event(a##_event); \
return _baseclass::SetOn##_event(cx, vp); \
}
#define NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(_event) \
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mOn##_event##Listener)
#define NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(_event) \
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mOn##_event##Listener)
#endif // nsDOMEventTargetWrapperCache_h__

View File

@ -41,7 +41,7 @@ interface nsIDOMEventListener;
interface nsIDOMBlob;
interface nsIDOMFileError;
[scriptable, builtinclass, uuid(fc316500-87c4-411e-ab75-dd62468f4174)]
[scriptable, builtinclass, uuid(57d68e17-85fa-4509-bf71-ffac1b22a174)]
interface nsIDOMFileReader : nsIDOMEventTarget
{
[implicit_jscontext]
@ -61,12 +61,12 @@ interface nsIDOMFileReader : nsIDOMEventTarget
readonly attribute jsval result;
readonly attribute nsIDOMFileError error;
attribute nsIDOMEventListener onloadstart;
attribute nsIDOMEventListener onprogress;
attribute nsIDOMEventListener onload;
attribute nsIDOMEventListener onabort;
attribute nsIDOMEventListener onerror;
attribute nsIDOMEventListener onloadend;
[implicit_jscontext] attribute jsval onloadstart;
[implicit_jscontext] attribute jsval onprogress;
[implicit_jscontext] attribute jsval onload;
[implicit_jscontext] attribute jsval onabort;
[implicit_jscontext] attribute jsval onerror;
[implicit_jscontext] attribute jsval onloadend;
};
%{ C++

View File

@ -43,6 +43,7 @@
#include "nsIDOMProgressEvent.h"
#include "nsComponentManagerUtils.h"
#include "nsEventDispatcher.h"
#include "nsGkAtoms.h"
#define ERROR_STR "error"
#define ABORT_STR "abort"
@ -67,19 +68,17 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(FileIOObject)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(FileIOObject,
nsDOMEventTargetWrapperCache)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mProgressNotifier)
NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(abort)
NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(error)
NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(progress)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(FileIOObject,
nsDOMEventTargetWrapperCache)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mProgressNotifier)
NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(abort)
NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(error)
NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(progress)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_EVENT_HANDLER(FileIOObject, abort)
NS_IMPL_EVENT_HANDLER(FileIOObject, error)
NS_IMPL_EVENT_HANDLER(FileIOObject, progress)
FileIOObject::FileIOObject()
: mProgressEventWasDelayed(PR_FALSE),
mTimerIsActive(PR_FALSE),

View File

@ -72,9 +72,9 @@ public:
NS_METHOD GetReadyState(PRUint16* aReadyState);
NS_METHOD GetError(nsIDOMFileError** aError);
NS_DECL_AND_IMPL_EVENT_HANDLER(abort);
NS_DECL_AND_IMPL_EVENT_HANDLER(error);
NS_DECL_AND_IMPL_EVENT_HANDLER(progress);
NS_DECL_EVENT_HANDLER(abort);
NS_DECL_EVENT_HANDLER(error);
NS_DECL_EVENT_HANDLER(progress);
NS_DECL_NSITIMERCALLBACK

View File

@ -96,9 +96,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsDOMFileReader,
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mFile)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mPrincipal)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mChannel)
NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(load)
NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(loadstart)
NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(loadend)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsDOMFileReader,
@ -106,9 +103,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsDOMFileReader,
tmp->mResultArrayBuffer = nsnull;
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mFile)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mPrincipal)
NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(load)
NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(loadstart)
NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(loadend)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END

View File

@ -83,10 +83,6 @@ public:
// nsIInterfaceRequestor
NS_DECL_NSIINTERFACEREQUESTOR
NS_DECL_EVENT_HANDLER(load)
NS_DECL_EVENT_HANDLER(loadend)
NS_DECL_EVENT_HANDLER(loadstart)
// nsIJSNativeInitializer
NS_IMETHOD Initialize(nsISupports* aOwner, JSContext* cx, JSObject* obj,
PRUint32 argc, jsval* argv);

View File

@ -1790,6 +1790,7 @@ GK_ATOM(svgTSpanFrame, "SVGTSpanFrame")
GK_ATOM(svgUseFrame, "SVGUseFrame")
GK_ATOM(HTMLVideoFrame, "VideoFrame")
GK_ATOM(onloadstart, "onloadstart")
GK_ATOM(onloadend, "onloadend")
GK_ATOM(onprogress, "onprogress")
GK_ATOM(onsuspend, "onsuspend")
GK_ATOM(onemptied, "onemptied")