Use proper weak refs over raw pointers to hold parent URI content listeners. b=144887 r=radha@netscape.com sr=alecf@netscape.com
git-svn-id: svn://10.0.0.236/trunk@124882 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
ff59a7771d
commit
76b7b4ab26
@ -61,6 +61,7 @@ NS_IMPL_THREADSAFE_RELEASE(nsDSURIContentListener)
|
||||
NS_INTERFACE_MAP_BEGIN(nsDSURIContentListener)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIURIContentListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIURIContentListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
//*****************************************************************************
|
||||
@ -70,8 +71,10 @@ NS_INTERFACE_MAP_END
|
||||
NS_IMETHODIMP
|
||||
nsDSURIContentListener::OnStartURIOpen(nsIURI* aURI, PRBool* aAbortOpen)
|
||||
{
|
||||
if(mParentContentListener)
|
||||
return mParentContentListener->OnStartURIOpen(aURI, aAbortOpen);
|
||||
nsCOMPtr<nsIURIContentListener> parentListener;
|
||||
GetParentContentListener(getter_AddRefs(parentListener));
|
||||
if (parentListener)
|
||||
return parentListener->OnStartURIOpen(aURI, aAbortOpen);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@ -130,8 +133,10 @@ nsDSURIContentListener::IsPreferred(const char* aContentType,
|
||||
// the docshell has no idea if it is the preferred content provider or not.
|
||||
// It needs to ask it's parent if it is the preferred content handler or not...
|
||||
|
||||
if(mParentContentListener) {
|
||||
return mParentContentListener->IsPreferred(aContentType,
|
||||
nsCOMPtr<nsIURIContentListener> parentListener;
|
||||
GetParentContentListener(getter_AddRefs(parentListener));
|
||||
if (parentListener) {
|
||||
return parentListener->IsPreferred(aContentType,
|
||||
aDesiredContentType,
|
||||
aCanHandle);
|
||||
}
|
||||
@ -201,8 +206,17 @@ NS_IMETHODIMP
|
||||
nsDSURIContentListener::GetParentContentListener(nsIURIContentListener**
|
||||
aParentListener)
|
||||
{
|
||||
*aParentListener = mParentContentListener;
|
||||
NS_IF_ADDREF(*aParentListener);
|
||||
if (mWeakParentContentListener)
|
||||
{
|
||||
nsCOMPtr<nsIURIContentListener> tempListener =
|
||||
do_QueryReferent(mWeakParentContentListener);
|
||||
*aParentListener = tempListener;
|
||||
NS_IF_ADDREF(*aParentListener);
|
||||
}
|
||||
else {
|
||||
*aParentListener = mParentContentListener;
|
||||
NS_IF_ADDREF(*aParentListener);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -210,8 +224,22 @@ NS_IMETHODIMP
|
||||
nsDSURIContentListener::SetParentContentListener(nsIURIContentListener*
|
||||
aParentListener)
|
||||
{
|
||||
// Weak Reference, don't addref
|
||||
mParentContentListener = aParentListener;
|
||||
if (aParentListener)
|
||||
{
|
||||
// Store the parent listener as a weak ref. Parents not supporting
|
||||
// nsISupportsWeakReference assert but may still be used.
|
||||
mParentContentListener = nsnull;
|
||||
mWeakParentContentListener = getter_AddRefs(NS_GetWeakReference(aParentListener));
|
||||
if (!mWeakParentContentListener)
|
||||
{
|
||||
mParentContentListener = aParentListener;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mWeakParentContentListener = nsnull;
|
||||
mParentContentListener = nsnull;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user