mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-05 16:22:53 +00:00
Bug 377899, Cycle between nsXULTooltipListener and nsGlobalWindows causes leaks, r=neil,sr=peterv
This commit is contained in:
parent
b301c8bc96
commit
033e829d2f
@ -242,7 +242,6 @@ nsLayoutStatics::Shutdown()
|
||||
nsXULElement::ReleaseGlobals();
|
||||
nsXULPrototypeCache::ReleaseGlobals();
|
||||
nsXULPrototypeElement::ReleaseGlobals();
|
||||
nsXULTooltipListener::ReleaseInstance();
|
||||
nsSprocketLayout::Shutdown();
|
||||
#endif
|
||||
|
||||
|
@ -67,10 +67,7 @@ nsXULTooltipListener* nsXULTooltipListener::mInstance = nsnull;
|
||||
//// nsISupports
|
||||
|
||||
nsXULTooltipListener::nsXULTooltipListener()
|
||||
: mSourceNode(nsnull)
|
||||
, mTargetNode(nsnull)
|
||||
, mCurrentTooltip(nsnull)
|
||||
, mMouseClientX(0)
|
||||
: mMouseClientX(0)
|
||||
, mMouseClientY(0)
|
||||
#ifdef MOZ_XUL
|
||||
, mIsSourceTree(PR_FALSE)
|
||||
@ -90,6 +87,9 @@ nsXULTooltipListener::nsXULTooltipListener()
|
||||
|
||||
nsXULTooltipListener::~nsXULTooltipListener()
|
||||
{
|
||||
if (nsXULTooltipListener::mInstance == this) {
|
||||
ClearTooltipCache();
|
||||
}
|
||||
HideTooltip();
|
||||
|
||||
if (--sTooltipListenerCount == 0) {
|
||||
@ -99,8 +99,7 @@ nsXULTooltipListener::~nsXULTooltipListener()
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF(nsXULTooltipListener)
|
||||
NS_IMPL_RELEASE(nsXULTooltipListener)
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTooltipListener)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsXULTooltipListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMMouseListener)
|
||||
@ -109,8 +108,24 @@ NS_INTERFACE_MAP_BEGIN(nsXULTooltipListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMXULListener)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEventListener, nsIDOMMouseListener)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMMouseMotionListener)
|
||||
NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsXULTooltipListener)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsXULTooltipListener)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsXULTooltipListener)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsXULTooltipListener)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mSourceNode)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mTargetNode)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mCurrentTooltip)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXULTooltipListener)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mSourceNode)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mTargetNode)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mCurrentTooltip)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//// nsIDOMMouseListener
|
||||
|
||||
|
@ -38,6 +38,7 @@
|
||||
#ifndef nsXULTooltipListener_h__
|
||||
#define nsXULTooltipListener_h__
|
||||
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "nsIDOMMouseListener.h"
|
||||
#include "nsIDOMMouseMotionListener.h"
|
||||
#include "nsIDOMKeyListener.h"
|
||||
@ -59,9 +60,9 @@ class nsXULTooltipListener : public nsIDOMMouseListener,
|
||||
public nsIDOMXULListener
|
||||
{
|
||||
public:
|
||||
|
||||
// nsISupports
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsXULTooltipListener,
|
||||
nsIDOMMouseListener)
|
||||
|
||||
// nsIDOMMouseListener
|
||||
NS_IMETHOD MouseDown(nsIDOMEvent* aMouseEvent);
|
||||
@ -97,10 +98,10 @@ public:
|
||||
nsresult RemoveTooltipSupport(nsIContent* aNode);
|
||||
static nsXULTooltipListener* GetInstance() {
|
||||
if (!mInstance)
|
||||
NS_IF_ADDREF(mInstance = new nsXULTooltipListener());
|
||||
mInstance = new nsXULTooltipListener();
|
||||
return mInstance;
|
||||
}
|
||||
static void ReleaseInstance() { NS_IF_RELEASE(mInstance); }
|
||||
static void ClearTooltipCache() { mInstance = nsnull; }
|
||||
|
||||
protected:
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user