From 6cef3826343da9cf0f46a1633b2caa7975aaea10 Mon Sep 17 00:00:00 2001 From: "kipp%netscape.com" Date: Fri, 23 Apr 1999 19:57:26 +0000 Subject: [PATCH] Work around crash by not assuming we have an owner git-svn-id: svn://10.0.0.236/trunk@28923 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/base/src/nsGenericElement.cpp | 60 ++++++++++--------- mozilla/layout/base/src/nsGenericElement.cpp | 60 ++++++++++--------- 2 files changed, 62 insertions(+), 58 deletions(-) diff --git a/mozilla/content/base/src/nsGenericElement.cpp b/mozilla/content/base/src/nsGenericElement.cpp index 56ba8b23e2f..f0c251e69a2 100644 --- a/mozilla/content/base/src/nsGenericElement.cpp +++ b/mozilla/content/base/src/nsGenericElement.cpp @@ -1218,8 +1218,8 @@ nsGenericElement::TriggerLink(nsIPresContext& aPresContext, nsresult nsGenericElement::AddScriptEventListener(nsIAtom* aAttribute, - const nsString& aValue, - REFNSIID aIID) + const nsString& aValue, + REFNSIID aIID) { nsresult ret = NS_OK; nsIScriptContext* context; @@ -1227,41 +1227,43 @@ nsGenericElement::AddScriptEventListener(nsIAtom* aAttribute, if (nsnull != mDocument) { owner = mDocument->GetScriptContextOwner(); - if (NS_OK == owner->GetScriptContext(&context)) { - if (nsHTMLAtoms::body == mTag || nsHTMLAtoms::frameset == mTag) { - nsIDOMEventReceiver *receiver; - nsIScriptGlobalObject *global = context->GetGlobalObject(); + if (owner) { + if (NS_OK == owner->GetScriptContext(&context)) { + if (nsHTMLAtoms::body == mTag || nsHTMLAtoms::frameset == mTag) { + nsIDOMEventReceiver *receiver; + nsIScriptGlobalObject *global = context->GetGlobalObject(); - if (nsnull != global && NS_OK == global->QueryInterface(kIDOMEventReceiverIID, (void**)&receiver)) { + if (nsnull != global && NS_OK == global->QueryInterface(kIDOMEventReceiverIID, (void**)&receiver)) { + nsIEventListenerManager *manager; + if (NS_OK == receiver->GetListenerManager(&manager)) { + nsIScriptObjectOwner *mObjectOwner; + if (NS_OK == global->QueryInterface(kIScriptObjectOwnerIID, (void**)&mObjectOwner)) { + ret = manager->AddScriptEventListener(context, mObjectOwner, aAttribute, aValue, aIID); + NS_RELEASE(mObjectOwner); + } + NS_RELEASE(manager); + } + NS_RELEASE(receiver); + } + NS_IF_RELEASE(global); + } + else { nsIEventListenerManager *manager; - if (NS_OK == receiver->GetListenerManager(&manager)) { - nsIScriptObjectOwner *mObjectOwner; - if (NS_OK == global->QueryInterface(kIScriptObjectOwnerIID, (void**)&mObjectOwner)) { - ret = manager->AddScriptEventListener(context, mObjectOwner, aAttribute, aValue, aIID); - NS_RELEASE(mObjectOwner); + if (NS_OK == GetListenerManager(&manager)) { + nsIScriptObjectOwner* owner; + if (NS_OK == mContent->QueryInterface(kIScriptObjectOwnerIID, + (void**) &owner)) { + ret = manager->AddScriptEventListener(context, owner, + aAttribute, aValue, aIID); + NS_RELEASE(owner); } NS_RELEASE(manager); } - NS_RELEASE(receiver); } - NS_IF_RELEASE(global); + NS_RELEASE(context); } - else { - nsIEventListenerManager *manager; - if (NS_OK == GetListenerManager(&manager)) { - nsIScriptObjectOwner* owner; - if (NS_OK == mContent->QueryInterface(kIScriptObjectOwnerIID, - (void**) &owner)) { - ret = manager->AddScriptEventListener(context, owner, - aAttribute, aValue, aIID); - NS_RELEASE(owner); - } - NS_RELEASE(manager); - } - } - NS_RELEASE(context); + NS_RELEASE(owner); } - NS_RELEASE(owner); } return ret; } diff --git a/mozilla/layout/base/src/nsGenericElement.cpp b/mozilla/layout/base/src/nsGenericElement.cpp index 56ba8b23e2f..f0c251e69a2 100644 --- a/mozilla/layout/base/src/nsGenericElement.cpp +++ b/mozilla/layout/base/src/nsGenericElement.cpp @@ -1218,8 +1218,8 @@ nsGenericElement::TriggerLink(nsIPresContext& aPresContext, nsresult nsGenericElement::AddScriptEventListener(nsIAtom* aAttribute, - const nsString& aValue, - REFNSIID aIID) + const nsString& aValue, + REFNSIID aIID) { nsresult ret = NS_OK; nsIScriptContext* context; @@ -1227,41 +1227,43 @@ nsGenericElement::AddScriptEventListener(nsIAtom* aAttribute, if (nsnull != mDocument) { owner = mDocument->GetScriptContextOwner(); - if (NS_OK == owner->GetScriptContext(&context)) { - if (nsHTMLAtoms::body == mTag || nsHTMLAtoms::frameset == mTag) { - nsIDOMEventReceiver *receiver; - nsIScriptGlobalObject *global = context->GetGlobalObject(); + if (owner) { + if (NS_OK == owner->GetScriptContext(&context)) { + if (nsHTMLAtoms::body == mTag || nsHTMLAtoms::frameset == mTag) { + nsIDOMEventReceiver *receiver; + nsIScriptGlobalObject *global = context->GetGlobalObject(); - if (nsnull != global && NS_OK == global->QueryInterface(kIDOMEventReceiverIID, (void**)&receiver)) { + if (nsnull != global && NS_OK == global->QueryInterface(kIDOMEventReceiverIID, (void**)&receiver)) { + nsIEventListenerManager *manager; + if (NS_OK == receiver->GetListenerManager(&manager)) { + nsIScriptObjectOwner *mObjectOwner; + if (NS_OK == global->QueryInterface(kIScriptObjectOwnerIID, (void**)&mObjectOwner)) { + ret = manager->AddScriptEventListener(context, mObjectOwner, aAttribute, aValue, aIID); + NS_RELEASE(mObjectOwner); + } + NS_RELEASE(manager); + } + NS_RELEASE(receiver); + } + NS_IF_RELEASE(global); + } + else { nsIEventListenerManager *manager; - if (NS_OK == receiver->GetListenerManager(&manager)) { - nsIScriptObjectOwner *mObjectOwner; - if (NS_OK == global->QueryInterface(kIScriptObjectOwnerIID, (void**)&mObjectOwner)) { - ret = manager->AddScriptEventListener(context, mObjectOwner, aAttribute, aValue, aIID); - NS_RELEASE(mObjectOwner); + if (NS_OK == GetListenerManager(&manager)) { + nsIScriptObjectOwner* owner; + if (NS_OK == mContent->QueryInterface(kIScriptObjectOwnerIID, + (void**) &owner)) { + ret = manager->AddScriptEventListener(context, owner, + aAttribute, aValue, aIID); + NS_RELEASE(owner); } NS_RELEASE(manager); } - NS_RELEASE(receiver); } - NS_IF_RELEASE(global); + NS_RELEASE(context); } - else { - nsIEventListenerManager *manager; - if (NS_OK == GetListenerManager(&manager)) { - nsIScriptObjectOwner* owner; - if (NS_OK == mContent->QueryInterface(kIScriptObjectOwnerIID, - (void**) &owner)) { - ret = manager->AddScriptEventListener(context, owner, - aAttribute, aValue, aIID); - NS_RELEASE(owner); - } - NS_RELEASE(manager); - } - } - NS_RELEASE(context); + NS_RELEASE(owner); } - NS_RELEASE(owner); } return ret; }