зеркало из https://github.com/mozilla/gecko-dev.git
Continuing fix for bug 18843. Added onload and onerror events for loaded scripts. r=nisheeth, sr=jst
This commit is contained in:
Родитель
3018715592
Коммит
ae0d3ddcd3
|
@ -1471,7 +1471,8 @@ nsGenericElement::HandleDOMEvent(nsIPresContext* aPresContext,
|
|||
|
||||
PRBool intermediateCapture = PR_FALSE;
|
||||
//Capturing stage evaluation
|
||||
if (NS_EVENT_FLAG_BUBBLE != aFlags && aEvent->message != NS_PAGE_LOAD) {
|
||||
if (NS_EVENT_FLAG_BUBBLE != aFlags && aEvent->message != NS_PAGE_LOAD
|
||||
&& aEvent->message != NS_SCRIPT_LOAD) {
|
||||
//Initiate capturing phase. Special case first call to document
|
||||
if (parent) {
|
||||
parent->HandleDOMEvent(aPresContext, aEvent, aDOMEvent, NS_EVENT_FLAG_CAPTURE, aEventStatus);
|
||||
|
@ -1510,7 +1511,8 @@ nsGenericElement::HandleDOMEvent(nsIPresContext* aPresContext,
|
|||
|
||||
//Bubbling stage
|
||||
if (NS_EVENT_FLAG_CAPTURE != aFlags && mDocument &&
|
||||
aEvent->message != NS_PAGE_LOAD) {
|
||||
aEvent->message != NS_PAGE_LOAD &&
|
||||
aEvent->message != NS_SCRIPT_LOAD) {
|
||||
if (parent) {
|
||||
/*
|
||||
* If there's a parent we pass the event to the parent...
|
||||
|
|
|
@ -1342,6 +1342,7 @@ const char* nsDOMEvent::GetEventName(PRUint32 aEventType)
|
|||
return mEventNames[eDOMEvents_close];
|
||||
case NS_PAGE_LOAD:
|
||||
case NS_IMAGE_LOAD:
|
||||
case NS_SCRIPT_LOAD:
|
||||
return mEventNames[eDOMEvents_load];
|
||||
case NS_PAGE_UNLOAD:
|
||||
return mEventNames[eDOMEvents_unload];
|
||||
|
|
|
@ -191,14 +191,14 @@ nsEventListenerManager::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
|||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
if (mTarget) {
|
||||
return mTarget->QueryInterface(aIID, aInstancePtr);
|
||||
}
|
||||
if (aIID.Equals(NS_GET_IID(nsISupports))) {
|
||||
*aInstancePtr = (void*)(nsISupports*)(nsIEventListenerManager*)this;
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
if (mTarget) {
|
||||
return mTarget->QueryInterface(aIID, aInstancePtr);
|
||||
}
|
||||
return NS_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
@ -981,6 +981,8 @@ nsEventListenerManager::RegisterScriptEventListener(nsIScriptContext *aContext,
|
|||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsCOMPtr<nsIClassInfo> classInfo = do_QueryInterface(aObject);
|
||||
|
||||
if (NS_FAILED(rv = securityManager->CheckPropertyAccess(cx, jsobj,
|
||||
"EventTarget","addEventListener",
|
||||
nsIXPCSecurityManager::ACCESS_SET_PROPERTY))) {
|
||||
|
@ -1762,6 +1764,7 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
|
|||
case NS_PAGE_UNLOAD:
|
||||
case NS_IMAGE_LOAD:
|
||||
case NS_IMAGE_ERROR:
|
||||
case NS_SCRIPT_LOAD:
|
||||
case NS_SCRIPT_ERROR:
|
||||
listeners = GetListenersByType(eEventArrayType_Load, nsnull, PR_FALSE);
|
||||
if (listeners) {
|
||||
|
@ -1778,6 +1781,7 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
|
|||
switch(aEvent->message) {
|
||||
case NS_PAGE_LOAD:
|
||||
case NS_IMAGE_LOAD:
|
||||
case NS_SCRIPT_LOAD:
|
||||
ret = loadListener->Load(*aDOMEvent);
|
||||
break;
|
||||
case NS_PAGE_UNLOAD:
|
||||
|
@ -1796,6 +1800,7 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
|
|||
switch(aEvent->message) {
|
||||
case NS_PAGE_LOAD:
|
||||
case NS_IMAGE_LOAD:
|
||||
case NS_SCRIPT_LOAD:
|
||||
subType = NS_EVENT_BITS_LOAD_LOAD;
|
||||
if (ls->mSubType & NS_EVENT_BITS_LOAD_LOAD) {
|
||||
correctSubType = PR_TRUE;
|
||||
|
|
|
@ -296,6 +296,20 @@ nsHTMLScriptElement::ScriptAvailable(nsresult aResult,
|
|||
PRInt32 aLineNo,
|
||||
const nsAString& aScript)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!aIsInline && NS_FAILED(aResult)) {
|
||||
nsCOMPtr<nsIPresContext> presContext;
|
||||
GetPresContext(this, getter_AddRefs(presContext));
|
||||
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
nsEvent event;
|
||||
event.eventStructType = NS_EVENT;
|
||||
|
||||
event.message = NS_SCRIPT_ERROR;
|
||||
rv = HandleDOMEvent(presContext, &event, nsnull, NS_EVENT_FLAG_INIT,
|
||||
&status);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -306,7 +320,21 @@ nsHTMLScriptElement::ScriptEvaluated(nsresult aResult,
|
|||
PRBool aIsInline,
|
||||
PRBool aWasPending)
|
||||
{
|
||||
return NS_OK;
|
||||
nsresult rv = NS_OK;
|
||||
if (!aIsInline) {
|
||||
nsCOMPtr<nsIPresContext> presContext;
|
||||
GetPresContext(this, getter_AddRefs(presContext));
|
||||
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
nsEvent event;
|
||||
event.eventStructType = NS_EVENT;
|
||||
|
||||
event.message = NS_SUCCEEDED(aResult) ? NS_SCRIPT_LOAD : NS_SCRIPT_ERROR;
|
||||
rv = HandleDOMEvent(presContext, &event, nsnull, NS_EVENT_FLAG_INIT,
|
||||
&status);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -444,6 +444,7 @@ enum nsDragDropEventStatus {
|
|||
#define NS_IMAGE_LOAD (NS_STREAM_EVENT_START + 2)
|
||||
#define NS_IMAGE_ABORT (NS_STREAM_EVENT_START + 3)
|
||||
#define NS_IMAGE_ERROR (NS_STREAM_EVENT_START + 4)
|
||||
#define NS_SCRIPT_LOAD (NS_STREAM_EVENT_START + 5)
|
||||
|
||||
#define NS_FORM_EVENT_START 1200
|
||||
#define NS_FORM_SUBMIT (NS_FORM_EVENT_START)
|
||||
|
|
Загрузка…
Ссылка в новой задаче