Bug 938341. r=smaug

This commit is contained in:
Mats Palmgren 2013-11-18 03:54:35 +00:00
parent 73cd62cbb6
commit 15e9e305b5
2 changed files with 8 additions and 8 deletions

View File

@ -908,6 +908,7 @@ nsEventListenerManager::CompileEventHandlerInternal(nsListenerStruct *aListenerS
JS::Rooted<JSObject*> boundHandler(cx);
JS::Rooted<JSObject*> scope(cx, listener->GetEventScope());
context->BindCompiledEventHandler(mTarget, scope, handler, &boundHandler);
aListenerStruct = nullptr;
if (!boundHandler) {
listener->ForgetHandler();
} else if (listener->EventName() == nsGkAtoms::onerror && win) {
@ -930,12 +931,12 @@ nsEventListenerManager::CompileEventHandlerInternal(nsListenerStruct *aListenerS
nsresult
nsEventListenerManager::HandleEventSubType(nsListenerStruct* aListenerStruct,
const EventListenerHolder& aListener,
nsIDOMEvent* aDOMEvent,
EventTarget* aCurrentTarget,
nsCxPusher* aPusher)
{
nsresult result = NS_OK;
EventListenerHolder listener(aListenerStruct->mListener); // strong ref
// If this is a script handler and we haven't yet
// compiled the event handler itself
@ -946,6 +947,7 @@ nsEventListenerManager::HandleEventSubType(nsListenerStruct* aListenerStruct,
jslistener->GetEventContext() !=
aPusher->GetCurrentScriptContext(),
nullptr);
aListenerStruct = nullptr;
}
if (NS_SUCCEEDED(result)) {
@ -953,13 +955,13 @@ nsEventListenerManager::HandleEventSubType(nsListenerStruct* aListenerStruct,
nsContentUtils::EnterMicroTask();
}
// nsIDOMEvent::currentTarget is set in nsEventDispatcher.
if (aListener.HasWebIDLCallback()) {
if (listener.HasWebIDLCallback()) {
ErrorResult rv;
aListener.GetWebIDLCallback()->
listener.GetWebIDLCallback()->
HandleEvent(aCurrentTarget, *(aDOMEvent->InternalDOMEvent()), rv);
result = rv.ErrorCode();
} else {
result = aListener.GetXPCOMCallback()->HandleEvent(aDOMEvent);
result = listener.GetXPCOMCallback()->HandleEvent(aDOMEvent);
}
if (mIsMainThreadELM) {
nsContentUtils::LeaveMicroTask();
@ -1036,9 +1038,8 @@ nsEventListenerManager::HandleEventInternal(nsPresContext* aPresContext,
continue;
}
EventListenerHolder kungFuDeathGrip(ls->mListener);
if (NS_FAILED(HandleEventSubType(ls, ls->mListener, *aDOMEvent,
aCurrentTarget, aPusher))) {
if (NS_FAILED(HandleEventSubType(ls, *aDOMEvent, aCurrentTarget,
aPusher))) {
aEvent->mFlags.mExceptionHasBeenRisen = true;
}
}

View File

@ -417,7 +417,6 @@ protected:
nsCxPusher* aPusher);
nsresult HandleEventSubType(nsListenerStruct* aListenerStruct,
const mozilla::dom::EventListenerHolder& aListener,
nsIDOMEvent* aDOMEvent,
mozilla::dom::EventTarget* aCurrentTarget,
nsCxPusher* aPusher);